Principes de base sur la façon de faire une procédure VBA exécutée dans Excel lorsque la cellule est modifiée

J'essaie de montrer certaines données de mon serveur SQL dans Excel. Parce que j'ai une requête qui touche 3 tables et utilise un paramètre, je vais devoir utiliser VBA.

Je ne suis pas sûr de savoir comment obtenir le VBA pour "exécuter automatiquement". Faire une requête normale dans Excel vous offre des options telles que l'exécution lorsque la feuille est ouverte ou automatiquement rafraîchissante. Comme j'ajoute un paramètre, j'aimerais que mon Sub s'exécute lorsque je change la valeur de la cellule dans laquelle le paramètre se trouve.

Des idées?

Cliquez avec le bouton droit de la souris sur l'onglet Feuille et choisissez Afficher le code. Placez le code comme ceci dans le module de la feuille

 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then 'only run if the correct cell is changed MySub 'this is the name of your vba procedure End If End Sub 

Ce sous-répertoire fonctionnera chaque fois qu'une cellule sur cette feuille est modifiée. Si la cellule qui a changé est A1 (changer pour convenir à vos données), une procédure dans un module standard appelé MySub (changer pour convenir) sera exécutée.

Je ne sais pas pourquoi vous devez utiliser VBA. Il semble que vous pourriez écrire SQL pour extraire le nombre de tables que vous souhaitez et inclure un paramètre.

Mettre:

 application.volatile 

Dans votre code.

Pour des raisons de clarté, je vais dire que le paramètre est dans CELL A1 et le résultat du code VBA est répertorié dans CELL A2.

Dans le module VBA

 Function Test1(strText as string) as string Test1 = strText & "15" End Function 

Dans la cellule A2, placez l'équation "= Test1 (A1)
Dans la cellule A1, placez le paramètre que vous souhaitez modifier

Je vérifierais que cela fonctionnerait, puis placez votre autre code VBA pour que le code soit exécuté chaque fois que A1 change.

La réponse de dkusleika est la meilleure; Les choses deviennent un peu plus difficiles si vous voulez faire la même chose pour une gamme. Le code suivant se produira chaque fois qu'une cellule dans la zone spécifiée est modifiée.

 Private Sub Worksheet_Change(ByVal Target As Range) Dim woArea As Range, isect As Range Set woArea = Sheet1.Range("A1:A500") Set isect = Application.Intersect(Target, woArea) If isect Is Nothing Then ' Nothing happens Else ' Stuff you want to happen goes here End If End Sub