|
|
|
Tout
d'abord bonjour. Dans cette série d'articles, nous apprendrons à programmer en VBA (Visual Basic for Application) sous Excel (version 5.0, 7.0 et 8.0). Les premiers articles seront consacrés à l'initiation et au principes de base de VBA (et de Visual Basic en général) puis la difficulté ira en grandissant (passage de paramètres, macros complémentaires, apples à l'API Win32, ...). Pour bien comprendre ces articles il faut maîtriser Excel, pas la peine d'être un " dieu " mais il faut quand même bien savoir d'en servir. I-
Introduction Nous
allons donc découvrir les possibilités de ce langage dans cette série d'articles (Tout les exemples sont dans le fichier exemples.xls, téléchargeable ici). II- Les bases 1.1- Généralités VBA est très simple, sa syntaxe est claire et son apprentissage aisé, ces trois choses en font un langage parfait pour le débutant. VBA possède un assez grand nombre de mot réservé, ces mots sont inutilisables pour des noms variables, ou de procédure car ils désignes une fonction ou une méthode d'accès à un objet. Toutes les procédures commencent par le mot-clé "Sub" suivit du nom de la procédure et se terminent par End Sub (si vous êtes débutant, vous affolez pas, j'expliquerait ça plus tard). Les règles à respecter :
Appelez de préférence les procédures, les variables et les fonctions pas des noms évocateur de leur rôle dans le programme (Une petite astuce : quand vous déclarez une variable, utiliser les majuscules et quand vous l'utiliserez écrivez la en minuscules car si son nom est correctement écris, VB mettra correctement les majuscules et ça évite pas mal d'erreur bêtes ; cette astuces est valable aussi pour les fonction intégrées à VBA). Eclaircissez le code le plus possible en sautant des lignes dès que c'est nécéssaire ; ça facilite la relecture quand le programme atteint une taille importante Rédiger toujours des algorithmes sur papier avant de les coder 1.2- Accès aux objets et appel de propriétés Dans VBA, on désigne par objet tout les choses que l'on manipule.Un objet est "une chose" dont la structure même ne change pas, seule les caractéristique changent. Par exemple, une cellule peut avoir un fond vert et du texte rouge, une autre peut avoir un fond blanc et du texte noir ; pourtant, ces deux cellules sont bien un même objet, elles ont juste des caractéristiques différentes. Ainsi, un classeur, une feuille, une cellule, une boite de dialogue, ... sont des objet. A l'inverse, les procédures ne sont pas des objet (bah non puisque c'est des procédures !!) car on peut changer leur structure et elle n'ont pas de propriétés propres, d'ailleurs ont ne peut les modifier qu'en modifiant leur structure. L'autre grande différence entre les procédures et les objets est que les objet communique avec l'extérieur grâce à une interface (c'est elle qui autorise les changements de caractéristiques) alors que la procédure n'en a pas, elle communique avec l'extérieur grâce à des variable globales qui sont accessible par toutes les procédures. Par exemple, pour modifier la variable "valeur" de l'objet "cellule", je fait : cellule.valeur = "25", la variable est "dans" l'objet, alors que si je veux modifier la variable "valeur" (il faut que la variable valeur soit déclarée comme public, ou globale au début de la page de code) dont se sert la procédure "cellule", je fait : valeur = "25". C'est la un grand paradoxe de VBA : on programme par procédure mais on accède à des objet ! On dit que VBA est un lange semi-objet. Cette petite tentative d'explication de la différence entre un objet et une procédure est valable pour tout les language. Je sais pas si j'ai été très clair alors si vous avez rien compris, faites le moi savoir par mail, j'essayerais de vous expliquer plus clairement). Sinon, si vous voulez avoir plus de détails sur la programmation objet, il y a plein de livres la dessus dans toutes les bonnes crèmeries :) L'accès à un objet se fait un nommant le nom du classeur (facultatif si l'on travaille sur le classeur actif), puis le nom de la feuille et enfin le nom de l'objet. Par
exemple pour désigner la valeur de la cellule "A1" dans la feuille "Test", elle même dans le classeur "Demo" on procède ainsi :
Pour écrire la valeur "4" dans la cellule "B2" on fait comme ça :
Et pour définir Arial comme police pour la plage "A1:B6" comme ça :
Voilà quelques exemples d'appel de propriétés des cellules ; pour en avoir d'autre lancez l'aide sur "Range" et cliquez sur propriétés. 3- Désignation d'une cellule et déplacements dans une feuille 3.1- Désigner des cellules Pour désigner une cellule, il y a deux "grandes" méthode : Pour désigne une plage de cellules on utilise les même méthodes. Comme paramètres, il faut indiquer la cellule en haut à gauche en celle en bas à droite de la plage : 3.2- Se déplacer dans une feuille par rapport à d'autres cellules Pouvoir nommer une cellule par rapport à une autre est très utile. Pour cela, on utilise la méthode "Offset" sur l'objet range (ou activecell). L'exemple suivant selectionne la cellule C4 en partant de A2 Range ("A2").select 'sélectionne A2 Activecell.offset(3,
2).select 'selectione C5 (2 déplacement vers le bas et 3 vers la droite) 4- Les "boucles" indispensables Pour exécuter une série de commande un certain nombre de fois ou jusqu'à ce qu'une condition soit remplie, ou pour tester la valeur d'une variable, on utilise des boucles. 4.1- Les boucles de test avec IF...THEN...ELSE... Se traduit par Si...Alors...Sinon... Ce type de boucle sert à tester une variable. Par exemple n veut que si A1 est inférieure à 10, elle soit mise à 15 et sinon qu'elle soit mise à 0 : 1ère forme, détaillée (conseillée) : Sub Test_avec_If() 2ère forme, compacte (déconseillée) : Sub Test_avec_If2() 4.2- Les boucles avec SELECT...CASE C'est en fait un "If" amélioré car ce type de boucle permet de choisir entre plusieurs cas possible : Sub Test_avec_Select_Case() 4.3- Les boucles avec FOR...NEXT Ce types de boucle est très simple : il permet d'exécuter une boucle un certain nombre de fois. Il a besoin du nom de la variable-compteur, de sa valeur de début, de fin et du nombre d'unités qu'il doit ajouter à la variable à chaque boucle (si ce paramètre est omis, la valeur pas défaut est +1). Exemple : Comment remplir les cellules A1 à F6 en "diagonale" par des nombres allant entre 1 et 6 : Sub Remplir_en_diagonale() 4.4- Les boucles avec DO...LOOP C'est la boucle que j'utilise le plus souvent, elle a 3 variantes mais pour l'instant, nous allons en utiliser qu'une seule et c'est bien suffisant car elle englobe les 2 autres. Cette boucle permet d'effectuer une instruction jusqu'à ce qu'on lui dise d'arrêter. Voici l'exemple de FOR réécrit avec DO : Sub Remplir_en_diagonale2() III- Exercice Pour appliquer ce que vous avez appris, rien de tel qu'un petit exercice (utilisez la tableau de la feuille exercice dans le fichier d'exemple) : Rédigez une procédure qui rempli les colonnes "Nb de vendus" et "Nb de volés" et une autre qui change la couleur de la cellule affichant le gain ou la perte pour chaque fruit suivant que le bilan est un gain ou une perte (et faite pareil pour le total). J'ai déjà mis les formules. Envoyez moi un mail quand vous avez réussi. J'espère
que cette première partie vous a plu. Si vous trouvez une erreur (bah oui, j'en fait aussi des fois... :-) ), si quelque chose n'est pas clair, ou si vous avez un problème en VBA, envoyez moi un petit mail, j'essayerais de le résoudre. A
bientôt ZeZeBaR |
|
Page Web: http://www.mygale.org/07/bill/ |