"Les fiches VBA" sont une srie de petits tutoriels rapides regroupant les informations utiles sur un sujet donn. Elles concernent le langage VBA dans son ensemble et ne sont pas spcifiques un logiciel donn. Vous y trouverez donc des informations valables pour Access, Excel, Word, Outlook, PowerPoint, ... Bonne lecture !
I - Qu'abordons-nous ici ? II - Les syntaxes fondamentales II-A - Les parenthses II-A-1 - La rgle pratiquer II-A-2 - Les explications II-A-3 - Cas particuliers II-A-3-a - Le passage par Valeur II-A-3-b - Le mot-cl "Call" II-B - Le symbole gal (=) II-B-1 - La rgle II-B-2 - Les explications II-C - Les proprits II-C-1 - La rgle II-C-2 - Les explications II-D - Les mthodes II-D-1 - La rgle II-D-2 - Les explications II-E - Les instructions et fonctions II-E-1 - La rgle II-E-2 - Les explications III - Remerciements
-2Copyright 2010 - Maxence HUBICHE. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrts.
http://mhubiche.developpez.com/vba/fiches/syntaxes/bases/
I - Qu'abordons-nous ici ?
L'objet spcifique de cette fiche est de recenser, et d'expliquer, les syntaxes de base du langage VBA. Ce qu'il est d'ores et dj intressant de noter, c'est que le VBA (Visual Basic for Application) est un langage 'Basic', donc simple ! Le nombre de syntaxes fondamentales du langage est donc limit (5) et leur bonne connaissance sera susceptible de vous viter bien des soucis dues aux erreurs de syntaxes.
-3Copyright 2010 - Maxence HUBICHE. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrts.
http://mhubiche.developpez.com/vba/fiches/syntaxes/bases/
On notera les points suivants : La syntaxe mentionne la prsence de parenthses La page d'aide indique qu'il s'agit d'une fonction
Pourtant, l'application stricte de la syntaxe ne fonctionne pas ! Vous pouvez essayer en crivant le texte suivant :
La validation met la ligne en rouge, et, pour peu que vous ayez coch la case d'arrt sur toutes les erreurs (dans les options), un beau message d'erreur apparat. Par contre, si vous n'aviez pas mis les parenthses, le mme code fonctionnerait parfaitement, et pourrait tre excut !
Sub CaMarche() MsgBox "Ceci est un essai", vbOKOnly + vbQuestion, "Syntaxe" End Sub
Cherchons comprendre pourquoi... Dans le premier cas, nous avons fait usage des parenthses. Nous indiquions par cela, l'interprteur VBA, que nous souhaitions rcuprer le rsultat de la fonction MsgBox (qui, je le rappelle, est prvue, en tant que FONCTION, pour renvoyer un rsultat). Mais nous avons oubli un dtail d'importance ! Qu'allons nous faire de ce rsultat ? Nulle part n'est indiqu l'endroit o nous allons le mettre, ce rsultat. Si nous avions un tant soit peut modifi la ligne, comme ceci, par exemple :
-4Copyright 2010 - Maxence HUBICHE. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrts.
http://mhubiche.developpez.com/vba/fiches/syntaxes/bases/
alors l, oui, la syntaxe aurait march, parce que nous indiquions que nous voulions rcuprer le rsultat dans la variable n. D'ailleurs, si vous excutez cette procdure en mode dbogage (F8) vous pourrez vrifier que n rcupre bien une valeur numrique en fonction du bouton sur lequel vous aurez cliqu. Voil pourquoi la syntaxe CaMarche fonctionne : Nous ne demandons pas la rcupration d'un rsultat l'interprteur VBA, et, par l mme, nous n'avons pas besoin de le stocker nulle part.
On notera la mauvaise foi de ceux qui avancent ce propos, car ils n'ont mis qu'un seul argument, alors que dans les exemples que j'ai cit, il y en avait 3. dj, rien que cela devrait nous mettre en veil. Pourquoi, lorsqu'il n'y a qu'un seul argument, l'usage des parenthses n'est pas contre-indiqu ? Livrons-nous un petit test... saisissez le code suivant dans un module
Sub proc_Un() Dim a As Long a = 2 proc_Deux a MsgBox a End Sub Sub proc_Deux(arg) arg = arg * 2 End Sub
'### Procdure initiale 'dclare la variable a comme nombre entier long 'affecte 2 la variable a 'passe a la procdure proc_Deux 'Affiche a
D'aprs vous, que vous renverra la fonction MsgBox ? Bien rpondu ! vous verrez apparatre un beau "4" Modifions maintenant un tout petit peu la procdure. C'est trs lger... ajoutons des parenthses autour du a, lors de l'appel de la proc_Deux, comme suit :
Sub proc_Un() Dim a As Long a = 2 proc_Deux (a) MsgBox a End Sub Sub proc_Deux(arg) arg = arg * 2
'### Procdure initiale 'dclare la variable a comme nombre entier long 'affecte 2 la variable a 'passe a la procdure proc_Deux 'Affiche a
-5Copyright 2010 - Maxence HUBICHE. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrts.
http://mhubiche.developpez.com/vba/fiches/syntaxes/bases/
End Sub
Et maintenant ? Que voyez-vous ? Un beau "2" ! Pourquoi ? Parce qu'en utilisant des parenthses autour d'un seul argument, sans demander de retourner le rsultat, l'interprteur a compris que vous passiez l'argument par VALEUR et non par REFERENCES (mais ceci fera l'objet d'une autre fiche) Ceci nous indique donc qu'il est prfrable de ne garder que la rgle dcrite au dmarrage : n'utiliser les parenthses que lorsqu'on souhaite obtenir un rsultat qu'on exploitera ultrieurement
On notera ici que les arguments - entre parenthses, toujours - sont facultatifs. Par contre, ici, on mettra systmatiquement les parenthses, car nous sommes en prsence d'une instruction qui appelle une autre instruction, et non pas une valeur ou un objet. Il est donc indispensable de "dlimiter" la procdure, et cette dlimitation se fera par l'usage des prenthses. En voici un exemple :
Sub proc_Un() Dim a As Long a = 2 Call proc_Deux(a) MsgBox a End Sub Sub proc_Deux(arg) arg = arg * 2 End Sub
'dclare la variable a comme nombre entier long 'affecte 2 la variable a 'transfre le contrle la procdure proc_Deux, lui passant a en argument 'Affiche a (4) '### Procdure appeles 'multiplie l'argument par 2 et modifie sa valeur
Cette fois, la bote de message affiche bien 4. L'argument n'est pas pass par VALEUR, mais par REFERENCE, car l'usage des parenthses est ncessaire pour dlimiter la liste des arguments de proc_Deux. Si on avait voulu passer a par VALEUR, il aurait fallu ajouter une deuxime srie de parenthses :
Call proc_Deux((a))
Mais vous voyez bien que le code devient vite illisible. On vitera donc d'utiliser Call si l'on souhaite respecter la rgle donne au dbut de cette partie.
-6Copyright 2010 - Maxence HUBICHE. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrts.
http://mhubiche.developpez.com/vba/fiches/syntaxes/bases/
II-B-1 - La rgle
Hormis dans les tests, le symbole = est un symbole d'affectation, suivant le schma : Ecriture = Lecture
i = i + 1
Mathmatiquement parlant, il sera extrment difficile de dmontrer cette assertion. Que se passe-t-il en fait ? Dcouvrez-le sur l'image gif ci-dessous :
-7Copyright 2010 - Maxence HUBICHE. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrts.
http://mhubiche.developpez.com/vba/fiches/syntaxes/bases/
i vaut 11
Cette ligne fait donc l'incrmentation de la variable i, d'un pas de 1, quelle qu'ait t sa valeur pralable.
-8Copyright 2010 - Maxence HUBICHE. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrts.
http://mhubiche.developpez.com/vba/fiches/syntaxes/bases/
A gauche du gal, il y a aussi des mots spars par des points. Sheets("Feuil2").Range("A1") est la dfinition de l'objet (La plage A1 DE la feuille Feuil2) Formula est la proprit de cet objet On veut donc modifier la Formule DE la plage A1 DE la feuille Feuil2 Puisque la proprit Formula dfinit ce qui est crit dans la cellule, on veut donc crire dans la cellule A1 de la feuille Feuil2 le nom de la police de la cellule B2 de la feuille Feuil1
Exemple Access
Forms("frmTest").CmdFermer.Enabled = False
Exemple Word
ActiveDocument.Bookmarks("bkmNom").Range.text= rstContacts.Fields("ctcNom").Value
On pourrait continuer comme cela encore longtemps, mais je supposerai que vous avez compris arriv ce niveau de l'explication.
-9Copyright 2010 - Maxence HUBICHE. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrts.
http://mhubiche.developpez.com/vba/fiches/syntaxes/bases/
Dans Range("B2").Select, on parle de la mthode Select qui s'applique Range("B2") Une mthode est une action qu'on excute avec, ou partir de l'objet. Techniquement parlant, il s'agit d'une sub ou d'une fonction crite dans un module de classe. Vous pouvez le voir dans l'explorateur d'objets (F2). L'exemple ci-dessous vous montre deux mthodes de la classe Collection de la bibliothque VBA. Notez que l'une est une Fonction (Function) alors que l'autre est une Instruction (Sub) :
Donc, si la mthode est une fonction, et que nous voulons en rcuprer le rsultat, nous mettrons les parenthses de la syntaxe. dans les autres cas, les parenthses ne sont pas mettre. Quant aux arguments, il y a des actions qui ncessitent une information pour tre excutes. D'autres non. C'est la raison d'tre des arguments. Illustrons par quelques exemples Exemple Excel
Range("A1:D1").BorderAround xlDouble, , 3
- 10 Copyright 2010 - Maxence HUBICHE. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrts.
http://mhubiche.developpez.com/vba/fiches/syntaxes/bases/
Les arguments : >> le premier est le style de bordure >> le deuxime est saut (facultatif) >> le troisime est la couleur de la bordure Les arguments ainsi dfinis permettent de dfinir quel genre de bordure sera appliqu sur le contour de la plage.
Exemple Access/DAO
CurrentDb.QueryDefs.Delete "qryAVirer"
Exemple Word
ActiveDocument.Paragraphs(i).Range.Select
Explication de la phrase
Une phrase avec des points, et pas de symbole =. Nous sommes en prsence d'une mthode Pas d'espaces. Il n'y a pas d'arguments La mthode : Select L'objet : La plage (range) du ime paragraphe (Paragraph) du document actif (ActiveDocument) Cette phrase sert donc slectionner toute la zone du ime paragraphe du document en cours.
- 11 Copyright 2010 - Maxence HUBICHE. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrts.
http://mhubiche.developpez.com/vba/fiches/syntaxes/bases/
Donc, tout est dit ! Pas besoin de Call Les parenthses seulement s'il s'agit d'une fonction dont on veut rcuprer le rsultat Utilisation du = si l'on souhaite affecter le rsultat quelque chose
- 12 Copyright 2010 - Maxence HUBICHE. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrts.
http://mhubiche.developpez.com/vba/fiches/syntaxes/bases/
III - Remerciements
Je tiens remercier le travail d'quipe de tous les bnvoles qui participent ce site, et, dans le cadre des observations et corrections apportes ce tutoriel, mes remerciements vont tout particulirement
Correction
Dolphy35 Arkham46 Heureux-Oli Silkyroad
Commentaires
Bidou - mais je ne sais pas si je devrais le mettre dans les remerciements ... va falloir que je me tape un tuto sur le scope maintenant ... pfff :)
- 13 Copyright 2010 - Maxence HUBICHE. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrts.
http://mhubiche.developpez.com/vba/fiches/syntaxes/bases/
- 14 Copyright 2010 - Maxence HUBICHE. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrts.
http://mhubiche.developpez.com/vba/fiches/syntaxes/bases/