Pris en main avec VBA dans Office

Êtes-vous confronté à un nettoyage répétitif de 50 tableaux dans Word ? Souhaitez-vous inviter l’utilisateur saisir des données lorsqu’il ouvre un document spécifique ? Rencontrez-vous des difficultés pour déterminer comment récupérer efficacement vos contacts à partir de Microsoft Outlook dans une feuille de calcul Microsoft Excel ?

Vous pouvez effectuer ces tâches, et bien plus encore, à l’aide de Visual Basic pour Applications (VBA) pour Office, —un langage de programmation simple mais puissant que vous pouvez utiliser pour étendre des applications Office.

Cet article est destiné aux utilisateurs Office expérimentés qui souhaitent en savoir plus sur VBA et sur la manière dont la programmation peut les aider à personnaliser Office.

La suite d’applications Office inclut un ensemble complet de fonctionnalités. Il existe plusieurs façons de créer, mettre en forme et manipuler des documents, courrier, bases de données, formulaires, feuilles de calcul et présentations. La puissance de programmation VBA dans Office est que pratiquement chaque opération que vous pouvez effectuer avec une souris, clavier ou une boîte de dialogue peut également être automatisée à l’aide de VBA. De plus, si cette opération peut être effectuée une fois avec VBA, elle peut être répétée facilement une centaine de fois. (En effet, l’automatisation des tâches répétitives est une des utilisations les plus courantes de VBA dans Office.)

Au-delà de la capacité de scripter VBA pour accélérer les tâches quotidiennes, vous pouvez utiliser VBA pour ajouter de nouvelles fonctionnalités pour les applications Office ou pour inviter et interagir avec l’utilisateur de vos documents d’une manière qui est spécifique aux besoins de votre entreprise. Par exemple, vous pouvez écrire du code VBA qui affiche un message qui rappelle aux utilisateurs d’enregistrer un document sur un lecteur réseau particulier la première fois qu’ils essaient de l’enregistrer.

Cet article décrit les raisons principales de tirer parti de la puissance de programmation VBA. Il explore le langage VBA et les outils prêts à l’emploi que vous pouvez utiliser pour manipuler vos solutions. Enfin, il inclut des conseils et méthodes pour éviter certaines frustrations et erreurs de programmation courantes.

Notes

Vous voulez développer des solutions qui étendent l’expérience Office sur plusieurs plateformes ? Découvrez le nouveau modèle de compléments Office. Les compléments Office ont un encombrement réduit par rapport aux compléments et solutions VSTO. Vous pouvez les créer à l’aide de pratiquement n’importe quelle technologie de programmation web, telle que HTML5, JavaScript, CSS3 et XML.

Quand et pourquoi utiliser VBA

Il existe trois principales raisons d’utiliser la programmation VBA dans Office.

Automatisation et répétition

VBA est efficace en ce qui concerne les solutions répétitives aux problèmes de mise en forme ou correction. Par exemple, avez-vous déjà modifié le style du paragraphe en haut de chaque page dans Word ? Avez-vous déjà dû mettre en forme plusieurs tableaux collés à partir d’Excel dans un document Word ou un courrier Outlook ? Avez-vous déjà dû apporter la même modification pour plusieurs contacts Outlook ?

Si vous avez une modification que vous devez effectuer plus de dix ou vingt fois, cela peut valoir le coup de mettre en place une automatisation avec VBA. S’il s’agit d’une modification que vous avez à faire des centaines de fois, cela vaut définitivement le coup. N’importe quel changement de mise en forme ou modification que vous pouvez effectuer à la main peut être effectué dans VBA.

Extensions de l’interaction utilisateur

Il arrive parfois que l’on souhaite encourager ou forcer les utilisateurs à interagir avec l’application ou le document Office d’une manière particulière qui ne fait pas partie de l’application standard. Par exemple, vous pourriez vouloir inviter les utilisateurs à effectuer une action spécifique lorsqu’ils ouvrent, enregistrent ou impriment un document.

Interaction entre les applications Office

Vous voulez copier tous vos contacts à partir d’Outlook dans Word et mettre en forme d’une certaine manière ? Ou vous devez déplacer des données à partir d’Excel vers un ensemble de diapositives PowerPoint ? Parfois un simple copier-coller ne fait pas ce que vous souhaitez faire, ou est trop lent. Vous pouvez utiliser la programmation VBA pour interagir avec les détails de deux ou plusieurs applications Office en même temps, puis modifier le contenu dans une application en fonction du contenu dans une autre.

Procéder autrement

La programmation VBA est une solution puissante, mais n’est pas toujours une approche optimale. Parfois, il vaut mieux utiliser d’autres méthodes pour atteindre vos objectifs.

La question critique à se poser est s’il existe une méthode plus facile. Avant de commencer un projet VBA, tenez compte des outils intégrés et des fonctionnalités standard. Par exemple, si vous avez une modification qui prend du temps ou une tâche de mise en page, vous pouvez utiliser des styles ou des touches d’accès rapide pour résoudre le problème. Pouvez-vous effectuer une fois la tâche, puis utilisez CTRL + Y (Rétablir) pour la répéter ? Pouvez-vous créer un nouveau document avec le bon modèle ou au bon format puis copier le contenu dans ce nouveau document ?

Les applications Office sont puissantes ; la solution dont vous avez besoin existe déjà peut-être. Prenez le temps d’en savoir plus sur Office avant de vous lancer dans la programmation.

Avant de commencer un projet VBA, assurez-vous que vous avez le temps de travailler avec VBA. La programmation nécessite de la concentration et peut être imprévisible. En particulier en tant que débutant, ne vous tournez pas vers la programmation, sauf si vous disposez de temps pour l’utiliser avec soin. Essayez d’écrire un « script rapide » pour résoudre un problème lorsqu’une date d’échéance approche peut entraîner une situation très stressante. Si vous êtes pressé, vous devriez utiliser des méthodes conventionnelles, même si elles sont monotones et répétitives.

Programmation VBA 101

Utilisation de code pour faire exécuter des tâches par des applications

Vous pourriez penser que l’écriture de code est abstraite ou difficile, mais les principes de base s’inspirent du raisonnement utilisé pour accomplir vos tâches quotidiennes et sont tout à fait accessibles. Les applications Microsoft Office permettent de montrer des éléments, appelés objets, qui peuvent recevoir des instructions. Ces éléments peuvent être comparés aux touches d’un téléphone grâce auxquelles vous pouvez interagir avec l’appareil. Lorsque vous appuyez sur un bouton, le téléphone reconnaît l’instruction et inclut le numéro correspondant dans l’ordre que vous composez. En programmation, vous interagissez avec l’application en envoyant des instructions vers les différents objets de l’application. Ces objets sont vastes, mais ont leurs limites. Ils peuvent uniquement faire ce pour quoi ils sont conçus, et feront seulement ce que vous leur apprenez à faire.

Par exemple, imaginez l’utilisateur qui ouvre un document dans Word, effectue quelques modifications, enregistre le document et le ferme. Dans le monde de programmation VBA, Word expose un objet Document. En utilisant le code VBA, vous pouvez demander à l’objet Document d’effectuer des actions telles qu’Ouvrir, Enregistrer, ou Fermer.

La section suivante traite de la manière dont les objets sont organisés et décrits.

Le modèle objet

Les développeurs organisent les objets de programmation selon une hiérarchie, qui est appelée modèle objet de l’application. Word, par exemple, comporte un objet Application de niveau supérieur qui contient un objet Document. L’objet Document contient des objets Paragraphe et ainsi de suite. Les modèles objet reflètent à peu près ce que vous voyez dans l’interface utilisateur. Il s’agit d’une carte conceptuelle de l’application et de ses capacités.

La définition d’un objet est appelée une classe, ce qui explique que vous verrez peut-être ces deux expressions utilisées indifféremment. D’un point de vue technique, une classe est la description ou le modèle utilisé pour créer, ou instancier, un objet.

Une fois qu’un objet existe, vous pouvez le manipuler en définissant ses propriétés et en dénommant ses méthodes. Si vous pensez à l’objet sous la forme d’un nom, les propriétés sont alors les adjectifs décrivant le nom, et les méthodes sont les verbes qui animent le nom. La modification d’une propriété altère la qualité de l’apparence ou le comportement de l’objet. L’appel à l’une des méthodes d’objet conduit l’objet à effectuer une action.

Le code VBA dans cet article s’exécute par rapport à une application Office ouverte où bon nombre d’objets que le code manipule sont déjà opérationnels ; par exemple, l’Application elle-même, la feuille de calcul dans Excel, le Document dans Word, la Présentation dans PowerPoint, l’Explorateur et les Objets de Dossier dans Outlook. Une fois que vous connaissez la disposition du modèle d’objet de base et les propriétés principales de l’Application qui donnent accès à son état actuel, vous pouvez commencer à étendre et manipuler cette application Office avec VBA dans Office.

Méthodes

Dans Word, par exemple, vous pouvez modifier les propriétés et les méthodes du document en cours d’appel à l’aide de la propriété ActiveDocument de l’objet Application. Cette propriété ActiveDocument renvoie une référence à l’objet Document qui est actuellement actif dans l’application Word. « Renvoie une référence à » signifie « vous donne accès à. »

Le code suivant effectue exactement ce qu’il dit ; c’est-à-dire enregistre le document actif dans l’application.

Application.ActiveDocument.Save

Lire le code de gauche à droite, « Dans cette Application, avec le Document référencé par ActiveDocument, appelez la méthode Enregistrer. » N’oubliez pas que la méthode la plus simple est Enregistrer. Cela ne nécessite aucune instruction détaillée de votre part. Vous donnez l’instruction à un objet Document d’Enregistrer, aucune autre entrée n’étant requise de votre part.

Si une méthode requiert plus d’informations, celles-ci sont appelées paramètres. Le code suivant exécute la méthode SaveAs, ce qui nécessite un nouveau nom de fichier.

Application.ActiveDocument.SaveAs ("New Document Name.docx")

Les valeurs figurant entre parenthèses après un nom de méthode sont les paramètres. Dans ce cas, le nouveau nom de fichier est un paramètre pour la méthode SaveAs.

Propriétés

On utilise la même syntaxe pour définir une propriété et pour la lire. Le code suivant exécute une méthode pour sélectionner la cellule A1 dans Excel, puis pour définir une propriété afin de placer quelque chose dans cette cellule.

    Application.ActiveSheet.Range("A1").Select
    Application.Selection.Value = "Hello World"

Le premier défi de programmation VBA consiste à obtenir un ressenti pour le modèle d’objet de chaque application Office et à lire la syntaxe de la propriété, objet et méthode. Les modèles d’objet sont similaires dans toutes les applications Office, mais chacun est spécifique au type de documents et objets qu’elles manipulent.

À la première ligne de l’extrait de code figure l’objet Application, sous Excel cette fois-ci, puis ActiveSheet, permettant d’accéder à la feuille de calcul active. Vient ensuite un terme moins familier, Plage, qui signifie « définir une plage de cellules de cette façon. » Le code demande à l’élément Plage de se créer avec simplement A1 comme étant son ensemble défini de cellules. En d’autres termes, la première ligne de code définit un objet, la Plage, et exécute une méthode sur celui-ci pour le sélectionner. Le résultat est automatiquement archivé dans une autre propriété de l’ Application appelée Sélection.

La deuxième ligne de code affecte la propriété Valeur de Selection au texte « Hello World » et cette valeur apparaît dans la cellule A1.

Le code VBA le plus simple pourrait simplement obtenir l’accès à des objets dans l’application Office dans laquelle vous travaillez, et définir des propriétés. Par exemple, vous pourriez accéder aux lignes d’un tableau dans Word et modifier leur mise en forme dans votre script VBA.

Cela semble simple, mais cela peut être très utile ; une fois que vous pouvez écrire ce code, vous pouvez exploiter toute la puissance de programmation pour apporter les mêmes modifications dans plusieurs tableaux ou documents, ou les accorder selon une certaine logique ou condition. Pour un ordinateur, apporter 1000 modifications revient au même que d’en apporter 10, il y a donc une économie d’échelle avec des documents plus grands et des problèmes, et c’est là où VBA peut vous faire gagner du temps.

Macros et Visual Basic Editor

Maintenant que vous en savez plus sur la manière dont les applications Office exposent leurs modèles d’objet, vous avez probablement hâte d’essayer d’appeler des méthodes de l’objet, définir des propriétés de l’objet et répondre aux événements d’un objet. Pour ce faire, vous devez écrire votre code dans un emplacement et d’une manière qu’Office peut comprendre ; en règle générale, à l’aide de Visual Basic Editor. Même s’il est installé par défaut, certains utilisateurs ne savent pas qu’il est disponible jusqu'à ce qu’il soit activé dans le ruban.

Toutes les applications Office utilisent le ruban. L’un des onglets du ruban est l’onglet Développeur, qui vous permet d’accéder à Visual Basic Editor et aux autres outils du développeur. Office n’affichant pas l’onglet Développeur par défaut, vous devez l’activer via la procédure suivante :

Pour activer l’onglet Développeur

  1. Sous l’onglet Fichier, sélectionnez Options pour ouvrir la boîte de dialogue Options.

  2. Cliquez sur Personnaliser le ruban sur le côté gauche de la boîte de dialogue.

  3. Sous Choisir les commandes de sur le côté gauche de la boîte de dialogue, sélectionnez Commandes courantes.

  4. Sous Personnaliser le Ruban sur le côté droit de la boîte de dialogue, sélectionnez Onglets principaux dans la zone de liste déroulante, puis activez la case à cocher Développeur.

  5. Sélectionnez OK.

Notes

Dans Office 2007, pour afficher l’onglet Développeur, il fallait cliquer sur le bouton Office, cliquer sur Options, puis activer la case à cocher Afficher l’onglet Développeur dans le ruban dans la catégorie Populaire de la boîte de dialogue Options.

Une fois l’onglet Développeur activé, il est facile de trouver les boutons Visual Basic et Macros.

Figure 1. Boutons de l’onglet Développeur

Boutons de l’onglet Développeur

Problèmes de sécurité

Pour protéger les utilisateurs d’Office contre les virus et les code macros dangereux, vous ne pouvez pas enregistrer le code macro dans un document Office standard qui utilise une extension de fichier standard. Au lieu de cela, vous devez enregistrer le code dans un fichier avec une extension spéciale. Par exemple, vous ne pouvez pas enregistrer les macros dans un document Word standard avec une extension .docx ; au lieu de cela, vous devez utiliser un Document Word spécial prenant en charge les macros avec une extension .docm.

Lorsque vous ouvrez un fichier .docm, la sécurité Office peut empêcher les macros de s’exécuter dans le document, avec ou sans notification. Examiner les paramètres et les options dans le centre de gestion de la confidentialité sur toutes les applications Office. Le paramètre par défaut désactive l’exécution de macros, mais vous avertit que macros ont été désactivées et vous offre la possibilité de les réactiver pour ce document.

Vous pouvez désigner des dossiers spécifiques dans lesquels les macros peuvent s’exécuter en créant des emplacements approuvés, des documents approuvés ou des éditeurs approuvés. L’option la plus portable consiste à utiliser des Éditeurs approuvés, ce qui fonctionne avec les documents signés numériquement que vous distribuez. Pour plus d’informations sur les paramètres de sécurité dans une application Office spécifique, ouvrez la boîte de dialogue Options, cliquez sur Centre de gestion de la confidentialité, puis cliquez sur Paramètres du centre de gestion de la confidentialité.

Notes

Certaines applications Office, comme Outlook, enregistrent des macros par défaut dans un modèle de base sur votre ordinateur local. Bien que cette stratégie permette de réduire les problèmes de sécurité local sur votre ordinateur lorsque vous exécutez vos propres macros, cela nécessite une stratégie de déploiement si vous souhaitez distribuer votre macro.

Enregistrement d’une macro

Lorsque vous cliquez sur le bouton Macro situé dans l’onglet Développeur, cela ouvre la boîte de dialogue Macros, ce qui vous donne accès à des sous-routines ou à des macros VBA depuis un document ou une application en particulier. Le bouton Visual Basic ouvre Visual Basic Editor, dans lequel vous créez et modifiez le code VBA.

Un autre bouton de l’onglet Développeur dans Word et Excel, dénommé Enregistrer une Macro, génère automatiquement un code VBA reproduisant les actions que vous exécutez dans l’application. Le bouton Enregistrer une Macro est un outil formidable que vous pouvez utiliser pour en savoir plus sur VBA. La lecture du code généré peut vous permettre d’en savoir plus sur VBA, fournissant une passerelle entre vos connaissances sur Microsoft Office en tant qu’utilisateur et vos connaissances en tant que programmeur. Le seul inconvénient est que le code généré peut être source de confusion, car l’éditeur de la macro doit émettre des hypothèses sur vos intentions qui ne sont pas nécessairement précises.

Pour enregistrer une macro

  1. Ouvrez Excel dans un nouveau classeur et cliquez sur l’onglet Développeur dans le ruban. Cliquez sur Enregistrer une Macro et acceptez tous les paramètres par défaut dans la boîte de dialogue Enregistrer une macro, en incluant Macro1 comme nom de la macro et Ce Classeur en tant qu’emplacement.

  2. Cliquez sur OK pour commencer l’enregistrement de la macro. Le texte du bouton devient le suivant : Arrêter l’enregistrement. Cliquez sur ce bouton dès que vous avez terminé les actions que vous souhaitez enregistrer.

  3. Sélectionnez la cellule B1 et entrez la première chaîne classique du programmeur : Hello World. Arrêtez la saisie et examinez le bouton Arrêter l’enregistrement; il est grisé car Excel attend que vous ayez fini d’entrer la valeur dans la cellule.

  4. Cliquez sur la cellule B2 pour terminer l’action dans la cellule B1, puis cliquez sur Arrêter l’enregistrement.

  5. Cliquez sur Macros sous l’onglet Développeur, sélectionnez Macro1 si ce n’est déjà fait, puis cliquez sur Modifier pour afficher le code de Macro1 dans Visual Basic Editor.

Figure 2. Code de macro dans Visual Basic Editor

Code de macro dans Visual Basic Editor

Consultation du code

La macro que vous avez créée doit ressembler au code suivant.

Sub Macro1()
'
' Macro1 Macro
'
'
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "Hello World"
    Range("B2").Select
End Sub

Gardez à l’esprit les similitudes à l’extrait de code antérieur qui a sélectionné le texte dans la cellule A1, et les différences. Dans ce code, la cellule B1 est sélectionnée et la chaîne «Hello World» est ensuite appliquée à la cellule qui a été activée. Les guillemets autour du texte spécifient une valeur de chaîne par opposition à une valeur numérique.

Vous souvenez-vous de la façon dont vous avez sélectionné la cellule B2 pour afficher à nouveau le bouton Arrêter l’enregistrement ? Cette action s’affiche également sous la forme d’une ligne de code. L’enregistreur de macro sauvegarde chaque combinaison de touches.

Les lignes de code qui commencent par une apostrophe et la couleur vert par l’éditeur sont des commentaires qui donnent des explications sur le code ou vous rappelle ainsi qu’autres programmeurs l’objectif du code. VBA ignore toute ligne ou partie d’une ligne qui commence par un guillemet simple. Écrire des commentaires clairs et appropriés dans votre code est important, mais cette discussion est en dehors de l’étendue de cet article. Les références à ce code dans l’article n’incluent pas ces quatre lignes de commentaire.

Lorsque l’enregistreur de macro génère le code, un algorithme complexe est utilisé pour déterminer les méthodes et les propriétés que vous avez choisies. Si vous ne connaissez pas une propriété donnée, il existe de nombreuses ressources disponibles pour vous aider. Par exemple, dans la macro que vous avez enregistrée, l’enregistreur de macro a généré du code qui fait référence à la propriété FormulaR1C1. Vous n’êtes pas certain de ce que cela signifie ?

Notes

Sachez que l’objet Application est sous-entendu dans toutes les macros VBA. Le code que vous avez enregistré fonctionne avec Application. au début de chaque ligne.

Utilisation de l’Aide au développement

Sélectionnez FormulaR1C1 dans la macro enregistrée, puis appuyez sur F1. Le système d’aide exécute une recherche rapide, détermine que les sujets appropriés se trouvent dans la section Développeur Excel de l’Aide pour Excel, puis affiche la liste des propriétés FormulaR1C1. Vous pouvez cliquer sur le lien pour en savoir plus sur la propriété, mais auparavant, sachez que le lien Référence du modèle objet Excel se trouve dans la partie inférieure de la fenêtre. Cliquez sur le lien pour afficher une longue liste d’objets utilisés par Excel dans son modèle d’objet pour décrire les Feuilles de calcul et leurs composants.

Cliquez sur l’une d'entre elles pour afficher les propriétés et les méthodes qui s’appliquent à cet objet particulier, avec des références croisées à différentes options associées. De nombreuses entrées d’Aide comportent également de brefs exemples de code qui peuvent vous aider. Par exemple, vous pouvez suivre les liens dans l’objet Bordures pour savoir comment définir une bordure en langage VBA.

Worksheets(1).Range("A1").Borders.LineStyle = xlDouble

Modification du code

Le code de Bordures est différent de la macro enregistrée. Une des choses qui peuvent prêter à confusion avec un modèle objet est le fait qu’il existe plusieurs manières d’adresser un objet donné, dans notre exemple, la cellule A1.

Parfois la meilleure façon de découvrir la programmation consiste à apporter des modifications mineures à un code fonctionnant et d’observer le résultat. Essayez maintenant. Ouvrir Macro1 dans Visual Basic Editor et modifier le code de la manière suivante.

Sub Macro1()
    Worksheets(1).Range("A1").Value = "Wow!"
    Worksheets(1).Range("A1").Borders.LineStyle = xlDouble
End Sub

Conseil

Utilisez dans la mesure du possible les opérations Copier et Coller lorsque vous travaillez sur du code, afin d’éviter toute erreur de frappe.

Vous n’avez pas besoin d’enregistrer le code pour faire un essai, alors revenez au document Excel, cliquez sur Macros dans l’onglet Développeur, cliquez sur Macro1, puis cliquez sur Exécuter. La cellule A1 contient désormais le texte Wow ! avec une bordure de ligne double.

Figure 3. Résultats de votre première macro

Résultats de votre première macro

Vous venez de combiner l’enregistrement de macro, la lecture de la documentation du modèle objet et la programmation simple pour créer un programme VBA qui effectue une action. Félicitations !

Cela n’a pas fonctionné ? Lisez la suite pour en savoir plus sur le débogage dans VBA.

Conseils et astuces de programmation

Commencer par des exemples

La Communauté VBA est très importante ; une recherche sur le Web résulte presque toujours en un exemple de code VBA qui effectue une opération semblable à ce que vous voulez faire. Si vous ne trouvez pas de bon exemple, essayez de diviser la tâche en unités plus petites et effectuez une recherche pour chacun d’entre elles, ou essayez de penser à un problème plus courant, mais similaire. Commencer par un exemple peut vous faire gagner des heures.

Cela ne signifie pas que du code gratuit et bien pensé est disponible sur le Web, n’attendant que vous. En fait, certains exemples de code que vous trouverez peuvent comporter des erreurs ou bugs. L’idée est que les exemples que vous trouvez en ligne ou dans la documentation VBA peuvent vous donner une longueur d’avance. N’oubliez pas que l’apprentissage de la programmation nécessite du temps et de la réflexion. Avant de vous précipiter pour utiliser une autre solution pour résoudre votre problème, demandez-vous si VBA est le bon choix pour ce problème.

Simplifier le problème

Programmation peut devenir rapidement complexe. Il est essentiel, en particulier en tant que débutant, de diviser le problème en unités logiques les plus petites possibles, puis écrire et tester chaque partie séparément. Si vous avez trop de code sous les yeux, et que vous êtes confus, arrêtez et mettez le problème de côté. Lorsque vous revenez au problème, copiez une petite partie du problème dans un nouveau module, résolvez cette portion, faites en sorte que le code fonctionne et testez-le pour vous assurer qu’il fonctionne. Puis passez à l’étape suivante.

Bogues et débogage

Il existe deux principaux types d’erreurs de programmation : les erreurs de syntaxe, qui enfreignent les règles grammaticales du langage de programmation, et les erreurs de runtime, où le code semble correcte du point de vue syntaxique mais échoue lorsque VBA tente de l’exécuter.

Bien qu’elles puissent être frustrantes à résoudre, les erreurs de syntaxe sont faciles à repérer ; Visual Basic Editor fait bip et clignote si vous tapez une erreur de syntaxe dans votre code.

Par exemple, les valeurs de chaîne doivent être entourées par des guillemets doubles dans VBA. Pour savoir ce qui se passe lorsque vous utilisez des guillemets simples à la place, retournez dans l’éditeur Visual Basic et remplacez la chaîne « Wow ! » dans l’exemple de code par 'Wow!' (autrement dit, le mot Wow placé entre des guillemets simples). Si vous cliquez sur la ligne suivante, Visual Basic Editor réagit. L’erreur « Erreur de compilation : Prévu : expression » n’est pas vraiment utile, mais la ligne qui génère l’erreur devient rouge pour indiquer que vous avez une erreur de syntaxe dans cette ligne et que ce programme ne fonctionnera donc pas.

Cliquez sur OK et retapez le texte correct « Wow ! ».

Les erreurs d’exécution sont plus difficiles à identifier car la syntaxe de programmation semble correcte, mais le code échoue lorsque VBA tente de l’exécuter.

Par exemple, ouvrez Visual Basic Editor et remplacez le nom de la propriété Value par ValueX dans votre Macro afin d’introduire délibérément une erreur de runtime (l’objet Range n’ayant pas de propriété nommée ValueX). Retournez dans le document Excel, ouvrez la boîte de dialogue Macros et exécutez Macro1 à nouveau. Vous devriez voir un message de Visual Basic qui décrit l’erreur au moment de l’exécution avec le texte « Objet ne prenant pas en charge cette propriété de méthode. » Bien que ce texte soit clair, cliquez sur Déboguer pour en savoir plus.

Lorsque vous rebasculez vers Visual Basic Editor, il est dans un mode débogage spécial qui utilise la surbrillance en jaune pour identifier la ligne de code ayant échoué. Comme prévu, la ligne qui contient la propriété ValueX est mise en surbrillance.

Puisqu’il est possible de modifier un code VBA en cours d’exécution, remplacez ValueX par Valeur et cliquez sur le petit bouton de lecture vert sous le menu Déboguer. Le programme doit maintenant s’exécuter normalement.

Il est judicieux d’apprendre à utiliser le débogueur plus délibérément pour les programmes plus longs et plus complexes. Au minimum, apprenez à définir des seuils pour arrêter l’exécution lorsque vous souhaitez examiner le code, à ajouter des moniteurs pour voir les valeurs de variables différentes et de propriétés en tant que l’exécution de code, et à parcourir le code ligne par ligne. Ces options sont disponibles dans le menu Déboguer et les utilisateurs sérieux du débogueur mémorisent généralement les raccourcis clavier d’accompagnement.

Utiliser la documentation de référence à bon escient

Pour ouvrir la Référence développeur intégrée à l’Aide dans Office, ouvrez la référence de l’Aide à partir de n’importe quelle application Office, en cliquant sur le point d’interrogation dans le ruban ou en appuyant sur F1. Ensuite, à droite du bouton Recherche, cliquez sur la flèche déroulante pour filtrer le contenu. Sélectionnez Référence du développeur. Si vous ne voyez pas la table des matières dans le volet gauche, cliquez sur la petite icône de carnet pour l’ouvrir, puis développez la Référence du modèle objet à partir de là.

Figure 5. Le filtrage de l’Aide du développeur s’applique à toutes les applications Office

Le filtrage de l’Aide du développeur s’applique à toutes les applications Office

Le temps passé à parcourir la référence de modèle objet finira par payer. Une fois que vous aurez compris les notions de base de la syntaxe VBA et le modèle objet de l’application Office sur laquelle vous travaillez, vous progresserez vers une programmation plus méthodique.

Bien entendu, le Centre pour développeurs Microsoft Office est un excellent portail contenant de nombreux articles, conseils et informations communautaires.

Recherche dans les forums et les groupes de discussion

Tous les développeurs se retrouvent inévitablement coincés, un jour ou l’autre, même après avoir lu tous les articles de référence disponibles et avoir perdu des heures de sommeil à réfléchir à différentes manières de résoudre le problème. Fort heureusement, Internet a donné naissance à une communauté de développeurs qui s’entraident à résoudre leurs problèmes de programmation.

Toute recherche sur le Web pour « forum office développeur » révèlera plusieurs groupes de discussion. Vous pouvez rechercher « développement office » ou une description de votre problème pour découvrir des forums, des billets de blog et également des articles.

Si vous avez effectué tout que vous pouvez pour résoudre un problème, n’hésitez pas à publier votre question sur un forum dédié aux développeurs. Ces forums accueillent avec plaisir des questions de programmeurs amateurs et les développeurs expérimentés seront heureux de vous aider.

Voici quelques règles de savoir-vivre à respecter lors de la publication d’un message sur un forum de développeurs :

  • Avant de publier, rechercher sur le site s’il existe un forum aux questions ou des instructions que les membres souhaitent que vous suiviez. Vérifiez que vous publiez du contenu qui est cohérent avec ces recommandations et dans la section correcte du forum.

  • Incluez un exemple de code clair et complet, et modifiez éventuellement votre code afin de le clarifier, s’il fait partie d’une section de code plus longue.

  • Décrivez votre problème de manière claire et concise et synthétisez les étapes que vous avez effectuées pour résoudre le problème. Prenez le temps de rédiger votre billet aussi bien que vous pouvez, en particulier si vous êtes énervé ou pressé. Présentez la situation d’une manière qui aura un sens pour les lecteurs la première fois qu’ils lisent l’énoncé du problème.

  • Soyez poli et faites part de votre reconnaissance.

Aller plus loin dans la programmation

Même si cet article est relativement court et n’aborde pas de manière approfondie VBA et la programmation, nous espérons qu’il fournit suffisamment d’informations pour une bonne prise en main.

Cette section traite brièvement de quelques autres sujets d’importance.

Variables

Dans les exemples simples de cet article , vous avez manipulé des objets que l’application avait déjà créés. Vous souhaitez peut-être créer vos propres objets pour stocker des valeurs ou des références à d’autres objets pour un usage temporaire dans votre application. Ils sont appelés des variables.

Pour utiliser une variable dans VBA, il faut indiquer à VBA le type d’objet représenté par la variable, à l’aide de la déclaration Dim. Ensuite, définissez sa valeur et utilisez-la pour définir d’autres variables ou propriétés.

    Dim MyStringVariable As String
    MyStringVariable = "Wow!"
    Worksheets(1).Range("A1").Value = MyStringVariable

Branches et boucles

Les programmes simples dans cet article exécutent une ligne à la fois, du haut vers le bas. La réelle puissance de la programmation vient des options dont vous disposez pour déterminer les lignes de code à exécuter, basées sur une ou plusieurs conditions que vous spécifiez. Vous pouvez étendre ces fonctionnalités lorsque vous pouvez répéter une opération plusieurs fois. Par exemple, le code suivant étend Macro1.

Sub Macro1()
    If Worksheets(1).Range("A1").Value = "Yes!" Then
        Dim i As Integer
        For i = 2 To 10
            Worksheets(1).Range("A" & i).Value = "OK! " & i
        Next i
    Else
        MsgBox "Put Yes! in cell A1"
    End If
End Sub

Saisissez ou collez le code dans Visual Basic Editor, puis exécutez-le. Suivez les instructions fournies dans la messagerie qui s’affiche et modifiez le texte dans la cellule A1 en remplaçant Wow ! par Oui ! puis exécutez à nouveau pour voir la puissance de bouclage. Cet extrait de code montre les variables, l’arborescence et le bouclage. Lisez-le attentivement après l’avoir vu en action, et essayez de déterminer ce qui se produit à mesure que chaque ligne s’exécute.

Toutes mes applications Office : exemple de code

Voici quelques exemples de scripts ; chacun résout un problème Office tiré du monde réel.

Créer un message électronique dans Outlook

Sub MakeMessage()
    Dim OutlookMessage As Outlook.MailItem
    Set OutlookMessage = Application.CreateItem(olMailItem)
    OutlookMessage.Subject = "Hello World!"
    OutlookMessage.Display
    Set OutlookMessage = Nothing
End Sub

Il existe des situations dans lesquelles il peut être nécessaire d’automatiser le courrier électronique dans Outlook ; vous pouvez également utiliser des modèles.

Supprimer des lignes vides dans une feuille de calcul Excel

Sub DeleteEmptyRows()
    SelectedRange = Selection.Rows.Count
    ActiveCell.Offset(0, 0).Select
    For i = 1 To SelectedRange
        If ActiveCell.Value = "" Then
            Selection.EntireRow.Delete
        Else
            ActiveCell.Offset(1, 0).Select
        End If
    Next i
End Sub

Il est possible de sélectionner une colonne de cellules et d’exécuter cette macro pour supprimer toutes les lignes de la colonne sélectionnée contenant une cellule vide.

Supprimer des zones de texte vides dans PowerPoint

Sub RemoveEmptyTextBoxes()
    Dim SlideObj As Slide
    Dim ShapeObj As Shape
    Dim ShapeIndex As Integer
    For Each SlideObj In ActivePresentation.Slides
        For ShapeIndex = SlideObj.Shapes.Count To 1 Step -1
            Set ShapeObj = SlideObj.Shapes(ShapeIndex)
            If ShapeObj.Type = msoTextBox Then
                If Trim(ShapeObj.TextFrame.TextRange.Text) = "" Then
                    ShapeObj.Delete
                End If
            End If
        Next ShapeIndex
    Next SlideObj
End Sub

Ce code parcourt en boucle toutes les diapositives et supprime toutes les zones de texte qui ne contiennent aucun texte. La variable de décompte décrémente au lieu d’incrémenter car chaque fois que le code supprime un objet, il le supprime de la collection, ce qui réduit le nombre.

Copie d’un contact Outlook vers Word

Sub CopyCurrentContact()
   Dim OutlookObj As Object
   Dim InspectorObj As Object
   Dim ItemObj As Object
   Set OutlookObj = CreateObject("Outlook.Application")
   Set InspectorObj = OutlookObj.ActiveInspector
   Set ItemObj = InspectorObj.CurrentItem
   Application.ActiveDocument.Range.InsertAfter (ItemObj.FullName & " from " & ItemObj.CompanyName)
End Sub

Ce code copie le contact ouvert dans Outlook dans le document Word ouvert. Ce code ne fonctionne que si un contact est actuellement ouvert pour inspection dans Outlook.

Assistance et commentaires

Avez-vous des questions ou des commentaires sur Office VBA ou sur cette documentation ? Consultez la rubrique concernant l’assistance pour Office VBA et l’envoi de commentaires afin d’obtenir des instructions pour recevoir une assistance et envoyer vos commentaires.