Mise en route avec VBA dans Office 2010

Office 2010

Résumé : Présente aux utilisateurs (non programmeurs) certaines utilisations de base de la programmation Visual Basic pour Applications (VBA) pour étendre Microsoft Office 2010. Cet article contient une large vue d’ensemble du langage VBA, certains détails clés concernant le mode d’accès à VBA dans différentes applications Office 2010, des exemples de programmation simples et certaines applications exemple (13 pages imprimées)

Dernière modification : vendredi 24 avril 2015

S’applique à : Access 2010 | Excel 2010 | Office 2007 | Office 2010 | Open XML | PowerPoint 2010 | Publisher 2010 | SharePoint Server 2010 | VBA | Word 2010

Dans cet article
Programmation VBA dans Office 2010
Quand et pourquoi utiliser VBA
Programmation VBA - Principes de base
Conseils et astuces de programmation
Aller plus loin dans la programmation
Toutes mes applications Office 2010 : exemple de code
Résumé
Ressources supplémentaires

Applies to:    Microsoft Word 2010 | Microsoft Outlook 2010 | Microsoft Access 2010 | Microsoft Excel 2010 | Microsoft PowerPoint 2010 | Microsoft Publisher 2010

Date de publication :   novembre 2009

Auteur :   Tim Burnett, Kingfisher Computer Consulting

Sommaire

Faites-vous régulièrement face à des tâches répétitives de nettoyage de 50 tableaux dans Word 2010 ? Souhaitez-vous qu’un document spécifique invite l’utilisateur à fournir une entrée lors de son ouverture ? Éprouvez-vous des difficultés à importer vos contacts de Microsoft Outlook 2010 vers une feuille de calcul Microsoft Excel 2010 avec une efficacité optimale ?

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

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 2010.

La suite d’applications Office 2010 offre un ensemble très riche de fonctionnalités. Il existe de nombreuses manières d’écrire, de mettre en forme et de manipuler des documents, des messages électroniques, des bases de données, des formulaires et des présentations. L’atout majeur de la programmation VBA dans Office 2010 est que presque chaque opération que vous pouvez effectuer à l’aide d’une souris, d’un clavier ou d’une boîte de dialogue peut également s’effectuer avec VBA. En outre, si cette opération peut être effectuée une fois avec VBA, elle peut l’être cent fois. (En fait, l’automatisation des tâches répétitives est l’une des utilisations les plus courantes de VBA dans Office.)

Au-delà de l’efficacité des scripts VBA en termes d’accélération des tâches quotidiennes, vous pouvez utiliser VBA pour ajouter de nouvelles fonctionnalités aux applications Office 2010 ou pour interagir avec les utilisateurs de vos documents d’une manière spécifique à vos besoins professionnels. Par exemple, vous pourriez écrire du code VBA qui affiche un message contextuel rappelant aux utilisateurs d’enregistrer un document sur un lecteur réseau spécifique la première fois qu’ils essaient de l’enregistrer.

Cet article analyse certaines des principales raisons de tirer profit de la programmation VBA. Il explore le langage VBA et les outils prêts à l’emploi auxquels vous pouvez faire appel pour gérer vos solutions. Pour finir, il fournit quelques conseils et astuces permettant d’éviter quelques frustrations et erreurs courantes liées à la programmation.

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

Automatisation et répétition

VBA est performant lorsqu’il s’agit de solutions répétitives à des problèmes de mise en forme ou de correction. Par exemple, avez-vous déjà modifié le style du paragraphe en haut de chaque page dans Word ? Vous a-t-il déjà fallu remettre en forme plusieurs tableaux qui ont été collés à partir d’Excel dans un document Word ou un message électronique Outlook ? Vous a-t-il déjà fallu apporter la même modification dans plusieurs contacts Outlook ?

Si vous devez effectuer une même modification à dix ou vingt reprises, il peut être préférable de l’automatiser avec VBA. S’il s’agit d’une modification à effectuer plusieurs centaine de fois, le recours à VBA peut être salvateur. Presque toute opération de mise en forme ou d’édition exécutable manuellement peut être automatisée à l’aide de 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 2010 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 2010

Avez-vous besoin de copier tous vos contacts d’Outlook 2010 vers Word 2010 puis de leur affectuer une mise en forme particulière ? Ou vous faut-il déplacer des données d’Excel 2010 vers un ensemble de diapositives PowerPoint 2010 ? Parfois, une simple opération de copier-coller ne correspond pas à ce que vous souhaitez faire ou est trop lente. Vous pouvez utiliser la programmation VBA pour interagir simultanément avec plusieurs applications Office 2010 et modifier le contenu d’une application en fonction du contenu d’une autre application.

Procéder autrement

La programmation VBA est une solution puissante, mais il ne s’agit pas toujours de l’approche la plus adaptée. Il est parfois plus logique d’adopter une autre solution pour atteindre vos objectifs.

La question essentielle à poser est la suivante : existe-t-il une approche plus simple ? Avant de commencer un projet VBA, évaluez les outils intégrés et les fonctionnalités standard. Par exemple, si vous avez une tâche de modification ou de mise en page, peut-être pourriez-vous utiliser des styles ou des touches d’accès rapide pour résoudre le problème. Pouvez-vous effectuer la tâche une fois, puis utiliser la combinaison de touches Ctrl+Y (Rétablir) pour la répéter ? Pouvez-vous créer un document avec le modèle ou la mise en forme correct(e), puis copier le contenu dans ce nouveau document ?

Les applications Office 2010 sont puissantes ; la solution qu’il vous faut existe peut-être déjà. Prenez le temps de vous familiariser avec Office 2010 avant de vous lancer dans la programmation.

Avant de commencer un projet VBA, assurez-vous de disposer du temps nécessaire. La programmation requiert implication et dévouement, et peut être imprévisible. Ne vous lancez pas dans la programmation si vous ne disposez pas de suffisamment de temps pour vous y consacrer sérieusement, en particulier si vous débutez. Tenter de rédiger un « script vite fait » pour résoudre un problème sous la contrainte d’une échéance proche peut vous placer dans une situation très stressante. Si vous êtes pressé, il peut être préférable de faire appel à des méthodes conventionnelles, même si elles sont monotones et répétitives.

Utilisation de code pour faire en sorte que des applications effectuent des tâches

Vous estimez peut-être que l’écriture de code est mystérieuse et difficile, mais les principes de base font appel à un raisonnement logique et sont en fait relativement accessibles. Les applications Office 2010 sont exposées de telle manière qu’elles exposent des éléments nommés objets capables de recevoir des instructions, un peu comme un téléphone est conçu avec des boutons dont vous vous servez pour interagir avec le téléphone. Lorsque vous appuyez sur un bouton, le téléphone reconnaît l’instruction et inclut le numéro correspondant dans la séquence que vous composez. En programmation, on interagit avec l’application en envoyant des instructions à divers objets dans l’application. Ces objets sont étendus, mais ils ont leurs limites. Ils peuvent faire uniquement ce pour quoi ils sont conçus, et ne font que ce que vous leur demandez de faire.

Prenez par exemple un utilisateur qui ouvre un document dans Word 2010, apporte quelques modifications, enregistre le document, puis le ferme. Selon la terminologie de programmation VBA, on dit que Word 2010 expose un objet Document. En utilisant du code VBA, vous pouvez faire en sorte que l’objet Document effectue 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 en une hiérarchie qui porte le nom de modèle objet de l’application. Word, par exemple, a un objet Application de niveau supérieur qui contient un objet Document. L’objet Document contient un objet Paragraph, et ainsi de suite. Les modèles objet reflètent en gros ce que vous voyez dans l’interface utilisateur. Ils représentent un plan conceptuel de l’application et de ses fonctionnalités.

La définition d’un objet porte le nom de classe ; ces deux termes s’utilisent donc souvent de manière interchangeable. Techniquement, une classe est la description ou le modèle utilisé(e) 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 appelant ses méthodes. Si l’on apparente l’objet à un nom, alors les propriétés sont les adjectifs qui décrivent le nom et les méthodes sont les verbes qui animent le nom. Le fait de modifier une propriété modifie un aspect de l’apparence ou du comportement de l’objet. Le fait d’appeler l’une des méthodes de l’objet fait en sorte que celui-ci effectue une certaine action.

Le code VBA fourni dans cet article s’exécute sur une application Office 2010 ouverte où une grande partie des objets manipulés par le code sont déjà opérationnels : par exemple, l’Application proprement dite, l’objet Worksheet dans Excel 2010, l’objet Document dans Word 2010, l’objet Presentation dans PowerPoint 2010, les objets Explorer et Folder dans Outlook 2010. Une fois que vous connaissez la disposition de base du modèle objet et certaines propriétés clés de l’Application qui permettent d’accéder à son état actuel, vous pouvez commencer à étendre et manipuler cette application Office 2010 avec VBA dans Office.

Méthodes

Dans Word, par exemple, vous pouvez modifier les propriétés et appeler les méthodes du document Word actuel à l’aide de la propriété ActiveDocument de l’objet Application. Cette propriété ActiveDocument retourne une référence à l’objet Document qui est actuellement actif dans l’application Word. « Retourner une référence à » signifie « Fournir l’accès à ».

Le code suivant enregistre le document actif dans l’application.

Application.ActiveDocument.Save

Lisez le code de gauche à droite : « Dans cette Application, avec le Document référencé par ActiveDocument, appeler la méthode Save ». Sachez que Save est la forme de méthode la plus simple ; elle ne requiert aucune instruction détaillée de votre part. Vous faites en sorte qu’un objet Document effectue un enregistrement (Save) et aucune autre entrée n’est requise de votre part.

Si une méthode requiert davantage d’informations, ces détails portent le nom de paramètres. Le code suivant exécute la méthode SaveAs, qui requiert un nouveau nom pour le fichier.

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

Les valeurs fournies entre parenthèses après un nom de méthode sont les paramètres. Ici, le nouveau nom du 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 2010 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 en programmation VBA consiste à appréhender le modèle objet de chaque application Office 2010 et de lire la syntaxe d’objet, de méthode et de propriété. Les modèles objet sont semblables dans toutes les applications Office 2010, mais chacun est spécifique au genre de document et d’objet qu’il manipule.

Sur la première ligne de l’extrait de code figure l’objet Application, Excel 2010 cette fois-ci, puis l’objet ActiveSheet, qui fournit l’accès à la feuille de calcul active. Après cela vient un terme qui n’est pas aussi familier, Range, qui signifie « définir une plage de cellules de cette manière ». Le code fait en sorte que Range se crée avec uniquement A1 comme ensemble de cellules défini. Autrement dit, la première ligne de code définit un objet, Range, et exécute une méthode contre lui afin de le sélectionner. Le résultat est stocké automatiquement dans une autre propriété de l’Application nommée Selection.

La deuxième ligne de code affecte à la propriété Value de Selection le 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 peut se révéler extrêmement utile ; une fois que vous savez écrire ce code, vous êtes en mesure d’exploiter toute la puissance de la programmation pour apporter ces mêmes modifications dans plusieurs tableaux ou documents, ou en fonction d’une certaine logique ou condition. Pour un ordinateur, effectuer 1000 modifications n’est pas plus compliqué qu’en effectuer 10 ; il y a donc une économie d’échelle avec les documents volumineux, et c’est là que VBA peut démontrer toute sa puissance et vous faire gagner du temps.

Macros et Visual Basic Editor

Maintenant que vous savez comment les applications Office 2010 exposent leurs modèles objet, vous êtes probablement impatient d’essayer d’appeler des méthodes d’objets, de définir des propriétés d’objets et de répondre à des événements d’objets. Pour cela, vous devez écrire du code à un endroit et d’une manière compréhensible par Office ; on utilise généralement pour cela Visual Basic Editor. Bien qu’il soit installé par défaut, de nombreux utilisateurs ignorent même son existence tant qu’il n’a pas été activé sur le Ruban.

Ouverture de l’onglet Développeur

Toutes les applications Office 2010 utilisent le Ruban. Celui-ci contient plusieurs onglets, dont l’un nommé Développeur à partir duquel vous pouvez accéder à Visual Basic Editor et d’autres outils de développement. Office 2010 n’affichant pas l’onglet Développeur par défaut, vous devez l’activer en appliquant 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 dans les catégories suivantes 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. Cliquez sur OK.

Remarque Remarque

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 Standard 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 du Ruban Développeur

Boutons du Ruban Développeur

Aspects liés à la sécurité

Afin de protéger les utilisateurs d’Office 2010 des virus et du code de macro dangereux, il est impossible d’enregistrer du code de macro dans un document Office 2010 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 de macros dans un document Word 2010 standard avec une extension .docx ; au lieu de cela, vous devez utiliser un Document Word 2010 prenant en charge les macros avec une extension .docm.

Lorsque vous ouvrez un fichier .docm, les fonctionnalités de sécurité d’Office 2010 peuvent tout de même empêcher l’exécution des macros contenues dans le document, éventuellement en vous avertissant. Examinez les paramètres et options du Centre de gestion de la confidentialité dans toutes les applications Office 2010. Le paramètre par défaut désactive l’exécution des macros, mais vous avertit que les macros ont été désactivées et vous offre la possibilité de les réactiver pour ce document.

Il est possible de 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 à choisir Éditeurs approuvés, qui fonctionne avec les documents signés numériquement que vous distribuez. Pour plus d’informationd sur les paramètres de sécurité d’une application Office 2010 spécifique, ouvrez la boîte de dialogue Options, cliquez sur Centre de gestion de la confidentialité, puis sur Paramètres du Centre de gestion de la confidentialité.

Remarque Remarque

Certaines applications Office 2010, telles qu’Outlook 2010, enregistrent par défaut les macros dans un modèle principal sur votre ordinateur local. Bien que cette stratégie réduise les problèmes de sécurité locale sur votre propre ordinateur lors de l’exécution de vos propres macros, elle nécessite une stratégie de déploiement si vous souhaitez distribuer vos macros.

Enregistrement d’une macro

Lorsque vous cliquez sur le bouton Macro sous l’onglet Développeur, la boîte de dialogue Macros s’ouvre et vous donne accès aux macros ou sous-routines VBA auxquelles vous pouvez accéder depuis un document ou une application particulière. Le bouton Visual Basic ouvre Visual Basic Editor, où vous créez et modifiez le code VBA.

Sous l’onglet Développeur dans Word 2010 et Excel 2010 figure également le bouton Enregistrer une macro, qui génère automatiquement du code VBA capable de reproduire les actions que vous effectuez dans l’application. Enregistrer une macro est un excellent outil pour en savoir plus sur VBA. La lecture du code généré vous permet d’observer comment fonctionne VBA et peut constituer une bonne passerelle entre votre connaissance d’Office 2010 en tant qu’utilisateur et votre connaissance en tant que programmeur. Le seul inconvénient est que le code généré peut paraître un peu confus car l’éditeur de macro doit effectuer certaines suppositions quant à vos intentions, et ces suppositions ne sont pas forcément exactes.

Pour enregistrer une macro

  1. Ouvrez Excel 2010 dans un nouveau classeur et cliquez sur l’onglet Développeur sur 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, y compris Macro1 comme nom de la macro et Ce classeur comme emplacement.

  2. Cliquez sur OK pour commencer à enregistrer la macro. Notez que le texte du bouton prend la valeur Arrêter l’enregistrement. Cliquez sur ce bouton une fois que vous avez terminé les actions à enregistrer.

  3. Cliquez dans la cellule B1 et tapez cette chaîne bien connue de tous les programmeurs : Hello World. Arrêtez de taper et observez le bouton Arrêter l’enregistrement ; il est grisé car Excel 2010 attend que vous ayez fini de taper la valeur dans la cellule.

  4. Cliquez dans 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

Notez les ressemblances et différences avec l’extrait de code précédent qui sélectionnait le texte de la cellule A1. Dans ce code, la cellule B1 est sélectionnée, puis la chaîne « Hello World » est appliquée à la cellule active. Les guillemets autour du texte indiquent qu’il s’agit d’une valeur de chaîne, par opposition à une valeur numérique.

Vous vous souvenez quand vous avez cliqué sur la cellule B2 pour afficher le bouton Arrêter l’enregistrement ? Cette action est également représentée par une ligne de code. L’enregistreur de macro enregistre chaque touche.

Les lignes de code qui commencent par une apostrophe et qui sont colorées en vert par l’éditeur sont des commentaires destinés à expliquer ou à vous rappeler (à vous-même et aux autres programmeurs) la fonction du code. VBA ignore toute ligne, ou partie de ligne, qui commence par un guillemet simple. La rédaction de commentaires clairs et pertinents est un aspect important de la programmation, mais cette discussion n’est pas dans la portée de cet article. Les références ultérieures à ce code dans l’article n’incluent pas ces quatre lignes de commentaires.

Lorsque l’enregistreur de macro génère le code, il utilise un algorithme complexe afin de déterminer les méthodes et propriétés pertinentes. Si vous ne reconnaissez pas une propriété donnée, de nombreuses ressources sont à votre disposition. 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é ForumulaR1C1. Vous avez quelques doutes concernant la signification ?

ConseilConseil

Remarque : 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 ForumulaR1C1 dans la macro enregistrée et appuyez sur F1. Le système d’aide effectue une recherche rapide, détermine que les rubriques appropriées figurent dans la section Développement Excel 2010 de l’Aide sur Excel 2010, et répertorie la propriété FormulaR1C1. Vous pouvez cliquer sur le lien pour en savoir plus sur la propriété, mais avant cela, observez le lien Référence de modèle objet Excel près du bas de la fenêtre. Cliquez sur ce lien pour afficher une longue liste d’objets utilisés par Excel 2010 dans son modèle objet pour décrire les feuilles de calcul et leurs composants. Cliquez sur l’un de ces objets pour afficher les propriétés et méthodes qui s’appliquent à l’objet en question, ainsi que des références croisées vers différentes options associées. De nombreuses sections d’aide offrent également de brefs exemples de code susceptibles de vous aider. Vous pouvez par exemple suivre les liens de l’objet Borders pour découvrir comment définir une bordure dans VBA.

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

Modification du code

Le code Borders diffère de la macro enregistrée. L’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, le meilleur moyen de progresser en programmation consiste à apporter de petites modifications à du code opérationnel et à observer ce qui se produit. Essayez donc. Ouvrez Macro1 dans Visual Basic Editor et modifiez le code comme suit.

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

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

Il n’est pas nécessaire d’enregistrer le code pour l’essayer. Retournez dans le document Excel 2010, cliquez sur Macros sous l’onglet Développeur, cliquez sur Macro1, puis sur Exécuter. La cellule A1 contient maitnenant le texte Wow! et est entourée d’une double bordure.

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 de la programmation simple pour créer un programme VBA qui effectue une action. Bravo !

Le programme ne focntionne pas ? Lisez la suite de l’article pour en savoir plus sur le débogage dans VBA.

Commencer par des exemples

La communauté VBA est très étendue ; une recherche sur le Web retourne presque toujours un exemple de code VBA qui fait quelque chose de semblable à ce que vous souhaitez obtenir. Si vous ne trouvez pas de bon exemple, essayez de diviser la tâche en plus petites unités et effectuez une recherche sur chacune de ces unités, ou essayez de réfléchir à un problème plus courant mais similaire au vôtre. Partir d’un exemple peut vous faire gagner des heures de travail.

Cela ne veut pas dire que du code gratuit et bien conçu vous tend les bras sur le Web. En fait, il se peut fort qu’une partie du code que vous trouverez contienne des bogues ou des erreurs. Les exemples disponibles sur le Web ou dans la documentation VBA sont là principalement pour vous aider à partir du bon pied. N’oubliez pas que l’apprentissage de la programmation demande du temps et de la réflexion. Avant de vous presser et d’utiliser une autre solution pour résoudre votre problème, demandez-vous si VBA est réellement le bon choix.

Simplifier le problème

La programmation peut rapidement devenir très complexe. Il est essentiel, surtout en tant que débutant, que vous divisiez le problème en unités logiques les plus petites possibles, puis que vous écriviez et testiez chauqe partie de manière isolée. Si la quantité de code en face de vous est trop grande et que vous vous sentez perplexe ou perdu, arrêtez et laissez le problème de coté. Lorsque vous y revenez, copiez une petite partie du problème dans un nouveau module, résolvez cette partie du problème, faites en sorte que le code fonctionne et testez-le afin de vérifier qu’il est opérationnel. Ensuite, passez à la partie 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 placées entre guillemets doubles dans VBA. Pour découvrir ce qui se produit lorsque vous utilisez des guillemets simples, retournez dans Visual Basic Editor et remplacez la chaîne "Wow!" dans le code par 'Wow!' (autrement dit, placez le mot Wow entre guillemets simples). Si vous cliquez sur la ligne suivante, Visual Basic Editor réagit. Le message d’erreur « Erreur de compilation : Attendu : expression » n’est peut-être pas très utile, mais la ligne ayant généré cette erreur devient rouge pour vous signaler qu’il existe une erreur de syntaxe sur cette ligne et que, en conséquence, le programme ne peut s’exécuter.

Cliquez sur OK et retapez le texte correct, "Wow!".

Les erreurs de runtime 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). Revenez au document Excel 2010, ouvrez la boîte de dialogue Macros et réexécutez Macro1. Vous devriez recevoir une boîte de message Visual Basic décrivant l’erreur de runtime avec le texte « L’objet ne prend pas en charge cette propriété ou méthode ». Bien que ce texte soit assez 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.

Figure 4. Débogueur Visual Basic en action

Débogueur Visual Basic en action

 

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

Il est conseillé d’apprendre à utiliser le débogueur pour des programmes plus longs et plus complexes. Au minimum, apprenez à définir des points d’arrêt afin d’arrêter l’exécution à un point donné où vous souhaitez examiner le code, à ajouter des observateurs d’événements pour voir les valeurs de différentes variables et propriétés durant l’exécution du code, et à exécuter le code pas à pas (ligne par ligne). Ces options sont toutes disponibles dans le menu Déboguer, et les débogueurs expérimentés mémorisent en général les raccourcis clavier associés.

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

Pour ouvrir la Référence du développeur intégrée à l’Aide d’Office 2010, ouvrez la référence d’Aide à partir de n’importe quelle application Office 2010 en cliquant sur le point d’interrogation dans le Ruban ou en appuyant sur la touche F1. Ensuite, à droite du bouton Rechercher, cliquez sur la flèche déroulante afin de filtrer le contenu. Cliquez sur Référence du développeur. Si le sommaire ne s’affiche pas dans le volet gauche, cliquez sur la petit icône de livre pour l’ouvrir et développez la Référence de modèle objet.

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

Filtrage sur l’aide aux développeurs

 

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 2010 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 avec les mots « forum pour développeurs office » donnent accès à plusieurs groupes de discussion. Vous pouvez également faire une recherche avec les mots « développement office » ou avec une description de votre problème pour accéder à des forums, messages de blogs et articles pertinents.

Si vous avez fait tout ce que vous pouviez pour tenter de résoudre un problème, n’ayez pas peur de publier votre question sur un forum de développeurs. Ces forums accueillent avec plaisir les messages de programmeurs débutants et de nombreux programmeurs expérimentés ne demandent qu’à 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 votre question, recherchez sur le site s’il existe un FAQ ou des instructions à suivre. Assurez-vous que le contenu de votre message est conforme à ces directives et placé dans la bonne section 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 façon claire et précise et résumez les étapes que vous avez suivies pour tenter de le résoudre. Prenez le temps d’écrire votre message, en particulier si vous êtes pressé ou énervé. Présentez la situation d’une manière qui paraîtra logique à vos collègues développeurs lorsqu’ils liront pour la première fois l’exposé de votre problème.

  • Soyez poli et faites part de votre reconnaissance.

Même si cet article est relativement court et ne fait que gratter à la surface de VBA et de la programmation, j’espère qu’il fournit suffisamment d’informations pour une bonne mise en route.

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 souhaiterez peut-être créer vos propres objets pour stocker des valeurs ou des références à d’autres objets pour une utilisation temporaire dans votre application. Ces objets portent le nom de variables.

Pour utiliser une variable dans VBA, vous devez indiquer à VBA le type d’objet représenté par la variable à l’aide de l’instruction Dim. Ensuite, vous définissez sa valeur et vous l’utilisez 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 de cet article exécutent une ligne à la fois, de haut en bas. La vraie puissance de la programmation vient des options qui sont à votre disposition pour déterminer les lignes de code à exécuter, en fonction d’une ou plusieurs conditions que vous spécifiez. Vous pouvez étendre encore dévantage ces fonctionnalités lorsque vous pouvez répéter une opération à de nombreuses reprises. 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

Tapez ou collez le code dans Visual Basic Editor, puis exécutez-le. Suivez les instructions fournies dans la boîte de message qui s’affiche et remplacez le texte de la cellule A1 (Wow!) par Yes!, puis réexécutez le code afin de découvrir la puissance du bouclage. Cet extrait de code illustre l’utilisation des variables, des branches et des boucles. Lisez-le soigneusement après l’avoir vu en action et essayez de déterminer ce qui se produit à mesure que chaque ligne s’exécute.

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

Créer un message électronique dans Outlook 2010

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 2010 ; vous pouvez également utiliser des modèles.

Supprimer des lignes vides dans une feuille de calcul Excel 2010

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 iEnd 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 2010

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 d’Outlook 2010 vers Word 2010

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 actuellement ouvert dans Outlook 2010 dans le document Word 2010 ouvert. Il fonctionne uniquement si un contact est actuellement ouvert pour l’inspection dans Outlook.

Cet article a fourni un aperçu de la puissance de Visual Basic pour Applications (VBA) dans Office 2010 et de la façon dont VBA peut automatiser les tâches répétitives.

Afficher: