L'une des qualités les plus remarquables de Visual Basic est qu'il s'agit d'un Achevée environnement de développement. Quoi que vous vouliez faire, il y a une «saveur» de Visual Basic pour vous aider à faire le travail! Vous pouvez utiliser Visual Basic pour le bureau et le développement mobile et à distance (VB.NET), les scripts (VBScript) et le développement Office (VBA !) Si vous avez essayé VBA et que vous souhaitez en savoir plus sur son utilisation, c'est le tutoriel pour toi. (Ce cours est basé sur la version de VBA trouvée dans Microsoft Office 2010.)
Si vous recherchez un cours dans Microsoft Visual Basic .NET, vous avez également trouvé le bon endroit. Consultez: Visual Basic .NET 2010 Express - Un didacticiel «à partir de zéro»
VBA en tant que concept général sera traité dans cet article. Il y a plus à VBA que vous ne le pensez! Vous pouvez également trouver des articles sur les sœurs Office VBA:
Il existe essentiellement deux façons de développer des programmes pouvant fonctionner avec des applications Office: VBA et VSTO. En octobre 2003, Microsoft a introduit une amélioration de l'environnement de programmation professionnel Visual Studio .NET appelée Visual Studio Tools for Office - VSTO. Mais même si VSTO tire parti des avantages considérables de .NET dans Office, VBA reste plus populaire que VSTO. VSTO nécessite l'utilisation de la version professionnelle ou supérieure de Visual Studio - qui vous coûtera probablement plus cher que l'application Office que vous utilisez - en plus de l'application Office. Mais comme VBA est intégré à l'application Office hôte, vous n'avez besoin de rien d'autre.
VBA est principalement utilisé par les experts Office qui souhaitent rendre leur travail plus rapide et plus facile. Vous voyez rarement de grands systèmes écrits en VBA. VSTO, d'autre part, est utilisé par les programmeurs professionnels dans les grandes organisations pour créer des compléments qui peuvent être assez sophistiqués. Une application d'un tiers, comme une société de papier pour Word ou un cabinet comptable pour Excel, est plus susceptible d'être écrite à l'aide de VSTO.
Dans leur documentation, Microsoft note qu'il existe essentiellement trois raisons d'utiliser VBA:
-> Automatisation et répétition - Les ordinateurs peuvent faire la même chose encore et encore mieux et plus rapidement que les gens.
-> Extensions de l'interaction avec l'utilisateur - Voulez-vous suggérer exactement comment quelqu'un doit formater un document ou enregistrer un fichier? VBA peut le faire. Voulez-vous valider ce que quelqu'un entre? VBA peut aussi le faire.
-> Interaction entre les applications Office 2010 - Un article ultérieur de cette série est intitulé Word et Excel travaillant ensemble. Mais si c'est ce dont vous avez besoin, vous voudrez peut-être envisager Bureautique, c'est-à-dire, écrire le système à l'aide de VB.NET puis utiliser les fonctions d'une application Office comme Word ou Excel selon les besoins.
Microsoft a déclaré qu'il continuerait à prendre en charge VBA et il figure en bonne place dans le Officiel Feuille de route pour le développement de Microsoft Office 2010. Vous avez donc autant d’assurance que Microsoft ne l’a jamais fourni pour que votre investissement dans le développement VBA ne soit pas obsolète dans un avenir proche.
D'un autre côté, VBA est le dernier produit Microsoft restant qui dépend de la technologie VB6 "COM". Il a plus de vingt ans maintenant! Dans les années humaines, cela le rendrait plus âgé que Lestat le vampire. Vous pourriez voir cela comme "éprouvé, testé et vrai" ou vous pourriez le considérer comme "ancien, usé et obsolète". J'ai tendance à privilégier la première description mais vous devez être conscient des faits.
La première chose à comprendre est la relation entre VBA et les applications Office comme Word et Excel. L'application Office est un hôte pour VBA. Un programme VBA ne peut jamais être exécuté seul. VBA est développé dans l'environnement hôte (en utilisant Développeur dans le ruban de l'application Office) et il doit être exécuté dans le cadre d'un document Word, d'un classeur Excel, d'une base de données Access ou d'un autre hôte Office.
La façon dont VBA est réellement utilisé est également différente. Dans une application comme Word, VBA est principalement utilisé comme moyen d'accéder aux objets de l'environnement hôte, comme accéder aux paragraphes d'un document avec l'objet Word.Document.Paragraphs de Word. Chaque environnement hôte apporte des objets uniques qui ne sont pas disponibles dans les autres environnements hôtes. (Par exemple, il n'y a pas de «classeur» dans un document Word. Un classeur est unique à Excel.) Le code Visual Basic est principalement là pour permettre d'utiliser des objets personnalisés pour chaque application hôte Office.
La fusion entre VBA et le code spécifique à l'hôte peut être vue dans cet exemple de code (extrait de la base de données exemple Microsoft Northwind) où le code purement VBA est affiché en rouge et le code spécifique à Access est affiché en bleu. Le code rouge serait le même dans Excel ou Word mais le code bleu est unique à cette application Access.
VBA lui-même est presque le même que depuis des années. La façon dont il s'intègre à l'application Office hôte et au système d'aide a été améliorée plus.
La version 2010 d'Office n'affiche pas l'onglet Développeur par défaut. L'onglet Développeur vous emmène dans la partie de l'application où vous pouvez créer des programmes VBA, donc la première chose que vous devez faire est de modifier cette option. Accédez simplement à l'onglet Fichier, Options, Personnaliser le ruban et cliquez sur la case Développeur dans les onglets principaux.
Le système d'aide fonctionne beaucoup plus facilement que dans les versions précédentes. Vous pouvez obtenir de l'aide pour vos questions VBA soit hors ligne, à partir d'un système installé avec votre application Office, ou en ligne auprès de Microsoft sur Internet. Les deux interfaces sont conçues pour se ressembler beaucoup:
--------
Cliquez ici pour afficher l'illustration
--------
Si votre connexion Internet est rapide, l'aide en ligne vous fournira des informations plus nombreuses et de meilleure qualité. Mais la version installée localement sera probablement plus rapide et dans la plupart des cas, elle est tout aussi bonne. Vous souhaiterez peut-être faire de l'aide locale la valeur par défaut, puis utiliser l'aide en ligne si la version locale ne vous donne pas ce que vous voulez. Le moyen le plus rapide de se connecter en ligne consiste à sélectionner simplement "Tout Word" (ou "Tout Excel" ou une autre application) dans la liste déroulante Rechercher de l'aide. Cela se mettra immédiatement en ligne et effectuera la même recherche, mais cela ne réinitialisera pas votre sélection par défaut.
--------
Cliquez ici pour afficher l'illustration
--------
Sur la page suivante, nous commençons à créer un programme VBA.
Lorsque VBA est "hébergé" par une application comme Word ou Excel, le programme "vit" dans le fichier de document utilisé par l'hôte. Par exemple, dans Word, vous pouvez enregistrer votre «macro Word» (c'est ne pas une «macro», mais nous ne discuterons pas de la terminologie pour le moment) dans un document Word ou un modèle Word.
Supposons maintenant que ce programme VBA est créé dans Word (ce programme simple change simplement la police en gras pour une ligne sélectionnée) et est enregistré dans un document Word:
Sub AboutMacro () "AboutMacro Macro 'Macro enregistré le 9/9/9999 par Dan Mabbutt' Selection.HomeKey Unit: = wdStory Selection.EndKey Unit: = wdLine, Extend: = wdExtend Selection.Font.Bold = wdToggle Selection.EndKey Unit: = wdStory End Sub
Dans les versions antérieures d'Office, vous pouviez clairement voir le code VBA stocké en tant que partie du fichier de document dans le document Word enregistré en le visualisant dans le Bloc-notes où tout le document Word peut être vu. Cette illustration a été produite avec une version précédente de Word car Microsoft a modifié le format du document dans la version actuelle et le code du programme VBA n'apparaît plus clairement en texte brut. Mais le principe est le même. De même, si vous créez une feuille de calcul Excel avec une "macro Excel", elle sera enregistrée dans le cadre d'un fichier .xlsm.
--------
Cliquez ici pour afficher l'illustration
--------
VBA et sécurité
L'une des astuces les plus efficaces contre les virus informatiques dans le passé a été d'insérer du code VBA malveillant dans un document Office. Avec les versions précédentes d'Office, lorsqu'un document était ouvert, le virus pouvait s'exécuter automatiquement et créer des ravages sur votre ordinateur. Cette faille de sécurité ouverte dans Office commençait à avoir un impact sur les ventes d'Office et cela a vraiment attiré l'attention de Microsoft. Avec la génération actuelle d'Office 2010, Microsoft a complètement bouché le trou. En plus des améliorations mentionnées ici, Microsoft a amélioré la sécurité d'Office d'une manière que vous ne remarquerez peut-être même pas jusqu'au niveau matériel. Si vous hésitez à utiliser VBA parce que vous avez entendu dire que ce n'était pas sûr, soyez assuré que Microsoft a fait un effort supplémentaire pour changer cela maintenant.
Le changement le plus important a été de créer un type de document spécial uniquement pour les documents Office qui incluent des programmes VBA. Dans Word, par exemple, MyWordDoc.docx ne peut pas contenir un programme VBA car Word n'autorisera pas les programmes dans un fichier enregistré avec une extension de fichier "docx". Le fichier doit être enregistré en tant que "MyWordDoc.docm" pour que la programmation VBA soit autorisée dans le cadre du fichier. Dans Excel, l'extension de fichier est ".xlsm".
Pour accompagner ce type de document amélioré, Microsoft a créé un nouveau sous-système de sécurité dans Office appelé Trust Center. Essentiellement, vous pouvez personnaliser en détail la façon dont votre application Office traite les documents contenant du code VBA. Vous ouvrez le Centre de gestion de la confidentialité à partir de l'onglet Développeur de votre application Office en cliquant sur Sécurité des macros dans la section Code du ruban.
--------
Cliquez ici pour afficher l'illustration
--------
Certaines options sont conçues pour «durcir» vos applications Office afin que le code malveillant ne s'exécute pas et d'autres sont conçues pour faciliter l'utilisation de VBA par les développeurs et les utilisateurs sans que la sécurité ne ralentisse inutilement les choses. Comme vous pouvez le voir, il existe de nombreuses façons de personnaliser la sécurité et les parcourir toutes dépasse largement le cadre de cet article. Heureusement, le site de Microsoft contient une documentation complète sur ce sujet. Et il est également heureux que les paramètres de sécurité par défaut conviennent à la plupart des exigences..
Puisque VBA est lié à l'application Office hôte, vous devez l'exécuter là-bas. Ce sujet est couvert à partir de la page suivante.
Comment exécuter une application VBA
C'est en fait une très bonne question car c'est la première que les utilisateurs de votre application vont poser. Il existe essentiellement deux façons:
-> Si vous décidez de ne pas utiliser un contrôle, comme un bouton, pour démarrer le programme, vous devez utiliser la commande Macros sur le ruban (onglet Développeur, groupe Code). Sélectionnez le programme VBA et cliquez sur Exécuter. Mais cela peut sembler un peu trop à certains de vos utilisateurs. Par exemple, vous ne souhaiterez peut-être même pas que l'onglet Développeur leur soit accessible. Dans ce cas…
-> Vous devez ajouter quelque chose sur lequel l'utilisateur peut cliquer ou taper pour démarrer l'application. Dans cet article, nous allons examiner le contrôle Button. Mais il peut s'agir d'un clic sur un raccourci, une icône sur une barre d'outils ou même l'acte de saisie de données. Ils sont appelés événements et ce que nous écrirons dans cet article et dans les suivants code d'événement - code de programme qui s'exécute automatiquement lorsqu'un événement spécifique - comme cliquer sur un contrôle Button - se produit.
Formulaires utilisateur, contrôles de formulaire et contrôles ActiveX
Si vous ne sélectionnez pas seulement une macro, la façon la plus courante d'exécuter un programme VBA est de cliquer sur un bouton. Ce bouton peut être soit un contrôle de formulaire ou un Contrôle ActiveX. Dans une certaine mesure, vos choix dépendent de l'application Office que vous utilisez. Excel propose des choix légèrement différents de Word, par exemple. Mais ces types de contrôles fondamentaux sont les mêmes.
Parce qu'il offre le plus de flexibilité, regardons ce que vous pouvez faire avec Excel 2010. Un simple message texte sera inséré dans une cellule lorsque plusieurs boutons différents sont cliqués juste pour rendre les différences plus claires.
Pour commencer, créez un nouveau classeur Excel et sélectionnez l'onglet Développeur. (Si vous avez une autre application Office, une variation de ces instructions devrait fonctionner.)
Cliquez sur l'icône Insérer. Nous allons d'abord travailler avec le bouton Form Controls.
Les contrôles de formulaire sont l'ancienne technologie. Dans Excel, ils ont été introduits pour la première fois dans la version 5.0 en 1993. Nous travaillerons ensuite avec les formulaires utilisateur VBA, mais les contrôles de formulaire ne peuvent pas être utilisés avec eux. Ils ne sont pas non plus compatibles avec le Web. Les contrôles de formulaire sont placés directement sur la surface de la feuille de calcul. En revanche, certains contrôles ActiveX - que nous considérons ensuite - ne peuvent pas être utilisés directement sur des feuilles de calcul.
Les contrôles de formulaire sont utilisés avec une technique "cliquer et dessiner". Cliquez sur le contrôle de formulaire Button. Le pointeur de la souris se transforme en signe plus. Dessinez le contrôle en le faisant glisser sur la surface. Lorsque vous relâchez le bouton de la souris, une boîte de dialogue apparaît pour demander une macro-commande pour se connecter avec le bouton.
--------
Cliquez ici pour afficher l'illustration
--------
Surtout lorsque vous créez un contrôle pour la première fois, vous n'aurez pas de macro VBA en attente de connexion avec le bouton, donc cliquez sur Nouveau et l'éditeur VBA s'ouvrira avec le nom suggéré déjà rempli dans le shell d'un événement sous-programme.
--------
Cliquez ici pour afficher l'illustration
--------
Pour terminer cette application très simple, tapez simplement cette déclaration de code VBA dans le Sub:
Cellules (2, 2) .Value = "Bouton du formulaire cliqué"
Un bouton ActiveX est presque exactement le même. Une différence est que VBA place ce code dans la feuille de calcul, pas dans un module séparé. Voici le code d'événement complet.
Private Sub CommandButton1_Click () Cells (4, 2) .Value = "ActiveX Button Clicked" End Sub
En plus de placer ces contrôles directement sur la feuille de calcul, vous pouvez également ajouter un UserForm au projet et placez des contrôles sur cela à la place. Les formulaires utilisateur - à peu près la même chose que les formulaires Windows - ont de nombreux avantages à pouvoir gérer vos contrôles plus comme une application Visual Basic normale. Ajoutez un formulaire utilisateur au projet dans l'éditeur Visual Basic. Utilisez le menu Affichage ou cliquez avec le bouton droit dans l'Explorateur de projets.
--------
Cliquez ici pour afficher l'illustration
--------
La valeur par défaut pour un UserForm est de ne pas afficher le formulaire. Donc, pour le rendre visible (et rendre les contrôles disponibles pour l'utilisateur), exécutez la méthode Show du formulaire. J'ai ajouté un autre bouton de formulaire juste pour cela.
Sub Button2_Click () UserForm1.Show End Sub
Vous remarquerez que l'UserForm est modal par défaut. Cela signifie que lorsque le formulaire est actif, tout le reste de l'application est inactif. (Cliquer sur les autres boutons ne fait rien, par exemple.) Vous pouvez changer cela en modifiant la propriété ShowModal de l'UserForm sur False. Mais cela nous approfondit dans la programmation. Les prochains articles de cette série en expliqueront plus.
Le code de l'UserForm est placé dans l'objet UserForm. Si vous sélectionnez Afficher le code pour tous les objets dans l'Explorateur de projets, vous verrez qu'il existe trois sous-routines d'événements Click distinctes contenues dans trois objets différents. Mais ils sont tous disponibles dans le même classeur.
--------
Cliquez ici pour afficher l'illustration
--------
En plus de forcer un événement en cliquant sur un bouton, VBA est également utilisé pour réagir aux événements dans les objets de l'application d'hébergement. Par exemple, vous pouvez détecter quand une feuille de calcul change dans Excel. Ou vous pouvez détecter lorsqu'une ligne est ajoutée à une base de données dans Access et écrire un programme pour gérer cet événement.
En plus des boutons de commande, des zones de texte et des autres composants que vous voyez constamment dans les programmes, vous pouvez ajouter des composants qui font réellement partie de votre feuille de calcul Excel dans votre document Word. Ou faites l'inverse. Cela va bien au-delà du "copier-coller". Par exemple, vous pouvez afficher une feuille de calcul Excel dans un document Word.
VBA vous permet d'utiliser toute la puissance d'une application Office dans une autre. Par exemple, Word a une capacité de calcul relativement simple intégrée. Mais Excel - eh bien - "excelle" au calcul. Supposons que vous vouliez utiliser le logarithme naturel de la fonction Gamma (un calcul mathématique relativement sophistiqué) dans votre document Word? Avec VBA, vous pouvez transmettre des valeurs à cette fonction dans Excel et obtenir la réponse dans votre document Word.
Et vous pouvez utiliser bien plus que les applications Office! Si vous cliquez sur l'icône "Plus de contrôles", vous pouvez voir une liste considérable de choses qui sont installées sur votre ordinateur. Tout cela ne fonctionne pas «prêt à l'emploi» et vous devriez avoir la documentation pour chacun d'eux disponible, mais cela vous donne une idée de l'étendue du support pour VBA.
De toutes les fonctionnalités de VBA, il y en a une qui est clairement plus utile que toute autre. Découvrez ce que c'est sur la page suivante.
J'ai gardé le meilleur pour la fin! Voici une technique qui s'applique à toutes les applications Office. Vous vous en servirez beaucoup, nous le couvrons ici dans l'introduction.
Lorsque vous commencez à coder des programmes VBA plus sophistiqués, l'un des premiers problèmes que vous rencontrerez est de savoir comment connaître les méthodes et les propriétés des objets Office. Si vous écrivez un programme VB.NET, vous rechercherez souvent des exemples de code et des exemples pour résoudre ce problème. Mais lorsque vous considérez toutes les différentes applications d'hébergement et le fait que chacune d'entre elles a des centaines de nouveaux objets, vous ne pouvez généralement pas trouver quelque chose qui correspond exactement à ce que vous devez faire.
La réponse est le "Record Macro…"
L'idée de base est d'activer "Enregistrer la macro", de passer par les étapes d'un processus similaire à ce que vous voulez que votre programme accomplisse, puis de vérifier le programme VBA résultant pour le code et les idées.
Beaucoup de gens font l'erreur de penser que vous devez être en mesure d'enregistrer exactement le programme dont vous avez besoin. Mais il n'est pas du tout nécessaire d'être aussi exact. Il est généralement suffisant d'enregistrer un programme VBA qui est juste "proche" de ce que vous voulez, puis d'ajouter les modifications de code pour lui permettre de faire le travail avec précision. C'est tellement facile et utile que j'enregistre parfois une douzaine de programmes avec de légères différences juste pour voir quelles sont les différences de code dans le résultat. N'oubliez pas de supprimer toutes les expériences lorsque vous avez fini de les regarder!
Par exemple, j'ai cliqué sur Enregistrer la macro dans l'éditeur Visual Basic Word et j'ai tapé plusieurs lignes de texte. Voici le résultat. (Des prolongements de ligne ont été ajoutés pour les raccourcir.)
Sub Macro1 () "Macro1 Macro" Selection.TypeText Text: = _ "Ce sont les moments où" Selection.TypeText Text: = _ "essaie les âmes des hommes. Le" Selection.TypeText Text: = _ "soldat d'été" Selection.TypeText Texte: = _ "et le patriote du soleil" Selection.TypeText Texte: = _ ", en ces temps, se rétrécira de" Selection.TypeText Texte: = _ "le service de leur pays." Selection.MoveUp Unit: = wdLine, Count: = 1 Selection.HomeKey Unit: = wdLine Selection.MoveRight Unit: = wdCharacter, _ Count: = 5, Extend: = wdExtend Selection.Font.Bold = wdToggle End Sub
Personne n'étudie VBA juste pour lui-même. Vous l'utilisez toujours avec une application Office spécifique. Donc, pour continuer à apprendre, il y a des articles ici qui montrent VBA utilisé avec Word et Excel:
-> Prise en main de VBA: le partenaire de travail Word
-> Prise en main de VBA: le partenaire de travail Excel