Mise en route avec VBA dans Excel 2010

Sommaire : Présente Visual Basic pour Applications (VBA) dans Excel 2010 à l’utilisateur d’Excel avec pouvoir qui n’est pas déjà programmeur. Cet article comprend une vue d’ensemble du langage VBA, des instructions décrivant comment accéder à VBA dans Excel 2010, l’explication détaillée d’une solution à un problème réel de programmation VBA Excel, ainsi que des conseils de programmation et de débogage.

Dernière modification : vendredi 11 décembre 2009

Icône de membre de la communauté Ben Chinowsky, SDK Bridge

Dans cet article
Pourquoi utiliser VBA dans Excel 2010 ?
Programmation VBA - Principes de base
Macros et Visual Basic Editor
Exemple concret
Modification du code enregistré
Autres possibilités de VBA
Et pour la suite ?
Ressources supplémentaires

Novembre 2009

S’applique à : Excel 2010 | Office 2010 | SharePoint Server 2010 | VBA | Visual Basic for Applications (VBA)

Contenu

  • Pourquoi utiliser VBA dans Excel 2010 ?

  • Programmation VBA - Principes de base

  • Macros et Visual Basic Editor

  • Exemple concret

  • Modification du code enregistré

  • Autres possibilités de VBA

  • Et pour la suite ?

  • Ressources supplémentaires

Pourquoi utiliser VBA dans Excel 2010 ?

Microsoft Excel 2010 est un outil extrêmement puissant qui vous permet de manipuler, d’analyser et de présenter des données. Parfois cependant, malgré la richesse de l’ensemble des fonctionnalités fournies par l’interface utilisateur standard d’Excel, vous souhaiterez trouver une méthode plus simple pour l’exécution d’une tâche banale répétitive ou pour effectuer une tâche non fournie par l’interface utilisateur. Heureusement, les applications Office comme Excel disposent de Visual Basic pour Applications (VBA), un langage de programmation qui vous donne la possibilité d’étendre ces applications.

VBA fonctionne en exécutant des macros, des procédures pas à pas écrites en Visual Basic. L’apprentissage de la programmation peut paraître difficile, mais avec un peu de patience et à l’aide d’exemples comme ceux de cet article, de nombreux utilisateurs découvrent qu’apprendre ne serait-ce qu’une petite quantité de code VBA facilite leur travail et leur offre la possibilité de faire dans Office des opérations qu’ils auraient crues impossibles. Une fois que vous aurez quelques notions de VBA, il sera plus facile d’en apprendre davantage ; les possibilités sont pour ainsi dire infinies.

La raison de loin la plus courante d’utiliser VBA dans Excel est l’automatisation des tâches répétitives. Par exemple, supposons que vous ayez quelques dizaines de classeurs, contenant chacun quelques dizaines de feuilles de calcul, et que vous deviez apporter des modifications à l’ensemble de ces feuilles. Ces modifications peuvent être aussi simples que l’application d’une nouvelle mise en forme à une certaine plage fixe de cellules, ou bien aussi complexes que la recherche de caractères statistiques des données sur chaque feuille, en choisissant le meilleur type de graphique pour afficher les données présentant ces caractères, avant de créer et mettre en forme le graphique en conséquence.

Dans les deux cas, il vaudra sans doute mieux ne pas réaliser ces tâches manuellement, sinon quelques fois tout au plus, mais plutôt les automatiser en utilisant VBA pour écrire des instructions explicites qu’Excel doit suivre.

VBA n’est pas seulement destiné aux tâches répétitives. Vous pouvez également l’utiliser pour générer de nouvelles fonctions dans Excel (par exemple, vous pouvez développer de nouveaux algorithmes pour analyser vos données, puis utiliser les fonctions graphiques d’Excel pour afficher les résultats), et pour effectuer des tâches qui intègrent Excel avec d’autres applications Office comme Microsoft Access 2010. En fait, parmi l’ensemble des applications Office, Excel est la plus utilisée d’une façon qui évoque une plateforme générale de développement. Outre pour toutes les tâches évidentes qui impliquent des listes et de la comptabilité, les développeurs utilisent Excel pour toute une gamme de tâches, depuis la visualisation des données jusqu’au maquettage logiciel.

Malgré toutes les bonnes raisons d’utiliser VBA dans Excel 2010, il est important de ne pas perdre de vue que la meilleure solution à un problème peut ne pas solliciter VBA du tout. Excel propose un tel ensemble de fonctionnalités hormis VBA, que même un utilisateur avec pouvoir ne les connaît probablement pas toutes. Avant de vous décider pour une solution VBA, explorez l’Aide et les ressources en ligne de manière approfondie pour vous assurer qu’il n’y a pas de moyen plus simple.

Programmation VBA - Principes de base

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

L’écriture de code vous semble peut-être mystérieuse ou difficile, mais les principes de base font appel au raisonnement logique et sont en fait relativement accessibles. Les applications Office 2010 sont conçues de telle manière qu’elles exposent des éléments appelés objets capables de recevoir des instructions. Vous interagissez avec les applications en envoyant des instructions à divers objets dans l’application. Ces objets sont nombreux, variés et souples, mais ils ont leurs limites. Ils peuvent faire uniquement ce pour quoi ils sont conçus, et ne font que ce que vous leur indiquez de faire.

Objets

Les objets programmables se rattachent systématiquement les uns aux autres dans une hiérarchie appelée modèle objet de l’application. Le modèle objet reflète en gros ce que vous voyez dans l’interface utilisateur ; par exemple, le modèle objet d’Excel contient les objets Application, Workbook, Sheet et Chart, parmi bien d’autres. Le modèle objet est une carte conceptuelle de l’application et de ses fonctionnalités.

Propriétés et méthodes

Vous pouvez manipuler des objets en définissant leurs propriétés et en appelant leurs méthodes. La définition d’une propriété modifie un certain caractère de l’objet. L’appel à une méthode fait effectuer à l’objet une certaine action. Par exemple, l’objet Workbook a une méthode Close qui ferme le classeur, et une propriété ActiveSheet qui représente la feuille active dans le classeur.

Collections

De nombreux objets son fournis dans deux versions, singulière et plurielle, par exemple Workbook et Workbooks, Worksheet et Worksheets, etc. Les versions plurielles sont appelées collections. Les objets collection sont utilisés pour effectuer des actions sur plusieurs éléments de la collection. Plus loin, cet article explique comment utiliser la collection Worksheets pour renommer chaque feuille de calcul d’un classeur.

Macros et Visual Basic Editor

Maintenant que vous avez quelques notions sur le modèle objet de Microsoft Excel 2010, vous êtes en mesure d’appeler des méthodes d’objet et de définir des propriétés d’objet. 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.

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 procédant comme suit :

Pour activer l’onglet Développeur

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

  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, puis activez la case à cocher Développeur.

  5. Cliquez sur OK.

Lorsque l’onglet Développeur est affiché, notez l’emplacement des boutons Visual Basic, Macros et Sécurité des macros sur celui-ci.

Figure 1. Onglet Développeur dans Excel 2010

Onglet Développeur dans Excel 2010

Aspects liés à la sécurité

Cliquez sur le bouton Sécurité des macros pour spécifier quelles macros sont autorisées à s’exécuter et à quelles conditions. Bien que le code de macros malveillantes puisse gravement endommager votre ordinateur, les conditions de sécurité qui empêchent l’exécution de macros utiles peuvent sérieusement saper votre productivité. La sécurité des macros est un sujet complexe et délicat qu’il est recommandé d’étudier et de comprendre avant de travailler avec des macros Excel.

Dans le cadre de cet article, sachez que si la barre Avertissement de sécurité : Les macros ont été désactivées apparaît entre le ruban et la feuille de calcul lorsque vous ouvrez un classeur contenant une macro, vous pouvez cliquer sur le bouton Activer le contenu pour activer les macros.

Par ailleurs, une autre mesure de sécurité vous empêche d’enregistrer une macro dans le format de fichier Excel par défaut (.xlsx) ; vous devez enregistrer la macro dans un fichier ayant une extension spéciale, .xlsm.

Visual Basic Editor

La procédure suivante vous montre comment créer un classeur vierge dans lequel stocker vos macros. Vous pouvez ensuite enregistrer ce classeur au format .xlsm.

Pour créer un classeur vierge

  1. Cliquez sur le bouton Macros sur l’onglet Développeur.

  2. Dans la boîte de dialogue Macro qui s’affiche, tapez Hello sous Nom de la macro.

  3. Cliquez sur le bouton Créer pour ouvrir Visual Basic Editor avec les lignes générales d’une macro déjà affichées.

VBA est un langage de programmation complet doté d’un environnement de programmation complet correspondant. Cet article étudie uniquement les outils qui vous aident à démarrer la programmation, ce qui exclut la plupart des outils de Visual Basic Editor. Avec cette mise en garde, fermez la fenêtre Propriétés à gauche de Visual Basic Editor et ignorez les deux listes déroulantes apparaissant au-dessus du code.

Figure 2. Visual Basic Editor

Visual Basic Editor

Visual Basic Editor contient le code suivant.

Sub Hello()

End Sub

Sub signifie Subroutine, que vous pouvez définir pour le moment comme macro. L’exécution de la macro Hello exécute le code situé entre Sub Hello() et End Sub.

Éditez maintenant la macro de façon similaire au code suivant.

Sub Hello()
   MsgBox ("Hello, world!")
End Sub

Retournez à l’onglet Développeur dans Excel et cliquez à nouveau sur le bouton Macros.

Sélectionnez la macro Hello dans la liste qui s’affiche, puis cliquez sur Exécuter. Une petite boîte de message qui contient le texte « Hello, world! » apparaît.

Vous venez de créer et implémenter du code VBA personnalisé dans Excel. Cliquez sur OK dans la boîte de message pour la fermer et terminer l’exécution de la macro.

Si la boîte de message n’apparaît pas, vérifiez vos paramètres de sécurité des macros et redémarrez Excel.

Rendre les macros accessibles

Vous pouvez également accéder à la boîte de dialogue Macros à partir de l’onglet Affichage, mais si vous utilisez fréquemment une macro, vous pouvez trouver plus commode d’y accéder par un raccourci clavier ou par un bouton Barre d’outils Accès rapide.

Pour créer un bouton pour la macro Hello sur la Barre d’outils Accès rapide, utilisez la procédure suivante.

La procédure suivante décrit comment créer un bouton pour une macro sur la barre d’outils Accès rapide :

Pour créer un bouton de macro sur la Barre d’outils Accès rapide

  1. Cliquez sur l’onglet Fichier.

  2. Cliquez sur Options pour ouvrir la boîte de dialogue Options Excel, puis cliquez sur Barre d’outils Accès rapide.

  3. Dans la liste sous Choisir les commandes dans les catégories suivantes :, choisissez Macros. Recherchez un texte similaire à Classeur1!Hello dans la liste affichée et sélectionnez ce texte.

  4. Cliquez sur le bouton Ajouter >> pour ajouter la macro à la liste de droite, puis cliquez sur le bouton Modifier… pour sélectionner une image de bouton à associer à la macro.

  5. Cliquez sur OK. Vous devez maintenant voir votre nouveau bouton sur la Barre d’outils Accès rapide au-dessus de l’onglet Fichier.

Vous pouvez désormais exécuter rapidement cette macro à tout moment sans passer par l’onglet Développeur : faites un essai.

Exemple concret

Supposons que vous ayez un classeur qui contient des listes sur un grand nombre de feuilles de calcul et que vous souhaitiez renommer chaque feuille selon le titre de la liste qu’elle contient. Toutes les feuilles ne contiennent pas forcément une liste, mais lorsqu’une liste y figure, le titre se trouve dans la cellule B1, sinon cette cellule est vide. Les noms des feuilles de calcul sans liste doivent rester inchangés.

D’ordinaire, cette tâche pourrait s’avérer complexe car elle implique de rechercher sur chaque feuille si une liste y figure, de copier le nom si c’est le cas, de cliquer sur l’onglet de la feuille de calcul et d’y coller le nouveau nom. Au lieu de procéder à toutes ces étapes manuellement, utilisez VBA Excel pour renommer automatiquement les feuilles.

Se familiariser avec les objets

Pour résoudre un problème de programmation VBA, vous devez d’abord trouver quels objets le code devra manipuler. Pour rechercher ces informations, il existe un outil fondamental, la Référence du modèle objet Excel qui fait partie de la Référence pour développeurs Excel 2007 sur MSDN (Microsoft Developer Network).

Cette documentation de référence va être mise à jour pour Excel 2010 lorsque celui-ci sera diffusé commercialement, mais la Référence pour développeurs Excel 2007 est suffisante pour la plupart des usages Excel 2010.

Figure 3. Référence du modèle objet Excel sur MSDN

Référence du modèle objet Excel sur MSDN

La première étape consiste à découvrir comment manipuler les objets particuliers dont vous avez besoin pour accomplir votre tâche ; par exemple, des feuilles de calcul, des noms de feuille de calcul, des cellules et des contenus de cellules. Dans Excel, il existe au moins deux façons d’aborder le problème :

  • Accédez directement à la documentation Référence du modèle objet.

  • Enregistrez certaines actions que vous voulez automatiser, observez comment le code enregistré manipule les objets, puis accédez à la documentation Référence du modèle objet pour vous informer davantage.

Les opinions varient quant à l’approche préférable, mais pour l’instant, commencez par utiliser l’enregistreur de macros.

Utilisation de l’enregistreur de macros

Parfois, une simple macro enregistrée est tout ce dont vous avez besoin ; dans ce cas, vous n’avez même pas à regarder le code. Souvent, l’enregistrement seul ne suffit pas, mais il constitue un point de départ dans le processus suivant.

Pour utiliser l’enregistreur de macros comme point de départ de votre solution

  1. Enregistrez les actions que vous souhaitez coder.

  2. Examinez le code et recherchez les lignes qui exécutent ces actions.

  3. Supprimez le reste du code.

  4. Modifiez le code enregistré.

  5. Ajoutez les variables, les structures de contrôle et le code que l’enregistreur de macros ne peut pas enregistrer.

Commencez votre investigation en enregistrant une macro qui renomme une feuille de calcul Nouveau nom. Vous pouvez ensuite utiliser la macro enregistrée pour développer votre propre macro qui renomme plusieurs feuilles de calcul en fonction de leur contenu.

Pour enregistrer une macro qui renomme une feuille de calcul

  1. Cliquez sur Enregistrer une macro sur l’onglet Développeur.

  2. Nommez la macro RenameWorksheets, renommez Feuil1 Nouveau nom, puis cliquez sur Arrêter l’enregistrement.

  3. Accédez à l’onglet Développeur ou Affichage, cliquez sur le bouton Macros, puis choisissez Modifier pour ouvrir Visual Basic Editor.

Le code dans Visual Basic Editor doit ressembler à l’extrait suivant.

Sub RenameWorksheets()
'
' RenameWorksheets Macro
'
'
    Sheets("Sheet1").Select
    Sheets("Sheet1").Name = "New Name"
End Sub

Les quatre premières lignes après la ligne Sub sont des commentaires. Toute ligne débutant par une apostrophe est un commentaire qui n’a pas d’effet sur l’exécution de la macro. Les principaux usages des commentaires sont les suivants :

  • Faciliter la compréhension du code, pas simplement pour vous, mais pour quiconque ayant besoin de modifier le code par la suite.

  • Pour désactiver temporairement une ligne de code (la mettre en commentaire).

Les quatre commentaires de cette macro enregistrée ne servent à rien, effacez-les donc.

La ligne suivante utilise la méthode Select pour sélectionner le membre Sheet1 de l’objet de la collection Sheets. Dans le code VBA, il n’est généralement pas nécessaire de sélectionner les objets pour les manipuler, bien que l’enregistreur de macros procède ainsi. En d’autres termes, cette ligne de code est redondante, vous pouvez donc la supprimer aussi.

La dernière ligne de la macro enregistrée modifie la propriété Name du membre Sheet1 de la collection Sheets. Cette ligne doit être conservée.

Après vos modifications, le code enregistré doit ressembler à l’extrait suivant.

Sub RenameWorksheets()
    Sheets("Sheet1").Name = "New Name"
End Sub

Renommez manuellement la feuille appelée Nouveau nom par son nom initial, Feuil1, puis exécutez la macro. Le nom redevient Nouveau nom.

Modification du code enregistré

Il est temps maintenant de faire une recherche sur la collection Sheets que l’enregistreur de macros a utilisée. La rubrique Feuilles dans la Référence du modèle objet donne l’explication ci-après.

La collection Sheets peut contenir des objets Chart ou Worksheet. Si vous ne devez travailler qu’avec des feuilles d’un seul type, consultez la rubrique associé à ce type-là.

Vous ne travaillez qu’avec des Feuilles de calcul, modifiez donc le code de la manière suivante.

Sub RenameWorksheets()
    Worksheets("Sheet1").Name = "New Name"
End Sub

Boucles

La limitation du code au stade actuel est qu’il effectue un changement sur une seule feuille de calcul. Vous pouvez ajouter une autre ligne pour chaque feuille de calcul que vous souhaitez renommer, mais comment procéder si vous ne connaissez pas le nombre de feuilles de calcul, ou si vous ne connaissez pas leur nom actuel ? Il vous faut un moyen d’appliquer une certaine règle à chaque feuille du classeur.

VBA propose une construction appelée boucle For Each qui est idéale. La boucle For Each examine chaque élément dans un objet collection tel que Worksheets et peut être utilisée pour effectuer une action (par exemple, renommer) sur certains éléments ou sur tous.

Pour plus d’informations sur la boucle For Each, voir Référence du langage VBA. Cliquez sur « Rubriques conceptuelles Visual Basic », puis sur « Utilisation des instructions For Each...Next ». Sachez que la Référence du langage VBA, tout comme la Référence du modèle objet, récompensera amplement le temps que vous y passerez ; c’est une excellente ressource pour trouver des idées si vous êtes bloqué pendant le développement du code.

À l’aide du troisième exemple de la rubrique « Utilisation des instructions For Each...Next », modifiez la macro afin qu’elle ressemble au code ci-dessous.

Sub RenameWorksheets()
For Each myWorksheet In Worksheets
    myWorksheet.Name = "New Name"
Next
End Sub

myWorksheet est une variable, autrement dit, que ce qu’elle représente varie. Dans ce cas, la variable myWorksheet représente successivement chaque feuille de calcul de la collection Worksheets. Vous n’êtes pas obligé d’utiliser myWorksheet ; vous pourriez utiliser « x », « ws », « WorksheetToRenameAfterTheContentsOfCellB1 » ou presque n’importe quel nom à votre convenance (avec quelques restrictions). Il est recommandé d’utiliser des noms de variable suffisamment longs pour vous rappeler ce que la variable représente, sans être trop longs pour ne pas encombrer le code.

Si vous exécutez la macro dans son état actuel, elle produit une erreur car Excel requiert que chaque feuille de calcul d’un classeur ait un nom unique, alors que la ligne suivante indique à Excel de nommer chaque feuille de calcul de la même façon.

    myWorksheet.Name = "New Name"

Pour corriger la ligne de manière à vérifier que la boucle For Each fonctionne, modifiez-la de la manière suivante.

    myWorksheet.Name = myWorksheet.Name & "-changed"

Au lieu de nommer chaque feuille de calcul de la même façon, cette ligne remplace le nom actuel de chacune(myWorksheet.Name) par ce nom suivi du suffixe « -changed ».

Renommer de façon efficace

La macro se rapproche de la solution du problème. Il vous faut maintenant un moyen de récupérer des informations provenant des feuilles de calcul, précisément de la cellule B1 de chaque feuille, et de placer ces informations dans les noms des feuilles.

Cette fois, au lieu d’utiliser l’enregistreur de macros pour trouver comment faire référence à une cellule, essayez de deviner et voyez si l’utilisation de l’objet Cell fonctionne. Bonne idée, mais si vous accédez à la Référence du modèle objet et recherchez l’objet Cell, vous découvrirez que cet objet n’existe pas ! Pourtant, il existe un objet CellFormat (éventuellement en anglais).

La rubrique sur l’objet CellFormat comprend le code suivant dans son premier exemple.

    ' Set the interior of cell A1 to yellow.
    Range("A1").Select

En fait, vous utilisez Range pour spécifier une plage de cellules ou seulement une cellule particulière. Mais, vous n’avez pas besoin de la portion .Select, et vous devez trouver comment faire référence au contenu de l’objet Range, par opposition à l’objet Range lui-même. Si vous consultez la rubrique de l’objet Range, vous pouvez y lire que Range possède des Methods et des Properties. Le contenu d’un objet Range est une chose, pas une action, donc il s’agit probablement d’une Property. Si vous parcourez la liste, vous trouvez la propriété Value. Essayez donc le code suivant.

Sub RenameWorksheets()
For Each myWorksheet In Worksheets
    myWorksheet.Name = myWorksheet.Range("B1").Value
Next
End Sub

Vous obtenez une erreur si vous exécutez ce code sur un classeur qui contient des feuilles de calcul où la cellule B1 est vide, parce que dans un objet Range vide, la propriété Value est une chaîne de texte vide (""), ce qui n’est pas un nom autorisé pour une feuille de calcul. Il est temps de créer des données d’exemple de toute façon. Configurez les trois feuilles du classeur comme dans la figure ci-dessous, puis exécutez la macro.

Figure 4. Exemple de données pour la macro RenameWorksheets

Exemple de données pour la macro RenameWorksheets

 

Exemple de données pour la macro RenameWorksheets

 

Exemple de données pour la macro RenameWorksheets

 

Les noms des feuilles de calcul devraient être modifiés en conséquence.

Vérification de la présence de cellules vides

Comme indiqué plus haut, la macro échoue si des cellules B1 dans le classeur sont vides. Au lieu de vérifier manuellement chaque feuille de calcul, vous pouvez coder la macro pour qu’elle effectue cette vérification. Avant la ligne myWorksheet.Name, ajoutez la ligne de code suivante.

If myWorksheet.Range("B1").Value <> "" Then

Et, après la ligne myWorksheet.Name, ajoutez le texte ci-après.

End If

Il s’agit d’une instruction If…Then, qui indique à Excel d’exécuter les lignes comprises entre la ligne If et la ligne End If, mais uniquement si la condition donnée dans la ligne If est remplie. Dans cet exemple, la ligne ci-après spécifie la condition à satisfaire.

myWorksheet.Range("B1").Value <> ""

<> signifie « n’est pas égal à », et les guillemets sans rien entre représentent une chaîne de texte vide, c’est-à-dire, pas de texte du tout. Par conséquent, les lignes de code situées entre If et End If seront exécutées uniquement si la valeur dans B1 n’est pas vide, c’est-à-dire, si la cellule B1 contient du texte.

Pour plus d’informations sur l’instruction If…Then, consultez la Référence du langage VBA (son nom complet est « instruction If…Then…Else », où Else est un composant facultatif).

Déclarations de variable

Une autre amélioration que vous pouvez apporter à la macro est de déclarer la variable myWorksheet au début de la macro.

Dim myWorksheet As Worksheet

Dim est l’abréviation de Dimension et Worksheet est le type de cette variable particulière. Cette instruction indique à VBA le type d’entité que myWorksheet représente. Notez qu’après avoir tapé As, Visual Basic Editor affiche une fenêtre contextuelle avec la liste de tous les types de variable disponibles. C’est un exemple de la technologie IntelliSense : Visual Basic Editor interprète votre tentative de codage et répond par la liste des options appropriées. Vous pouvez choisir une option dans la liste ou continuer simplement à taper.

Bien que les déclarations de variable ne soient pas obligatoires dans VBA, elles sont vivement recommandées car elles facilitent le suivi des variables et la localisation des bogues dans le code. Sachez par ailleurs que si vous déclarez une variable avec un type d’objet (tel que Worksheet), IntelliSense affiche le liste appropriée des propriétés et méthodes associées à cet objet lorsque vous utilisez cette variable d’objet ultérieurement dans la macro.

Commentaires

La macro est maintenant suffisamment complexe pour inclure certains commentaires qui vous rappellent les opérations que le code exécute. La quantité de commentaires à utiliser est en partie une question de style personnel, mais en général, il vaut mieux trop de commentaires que pas assez. Le code nécessite généralement des modifications et des mises à jour avec le temps. Sans commentaires, il peut être difficile de comprendre ce qui se passe dans le code, surtout si la personne qui modifie le code n’en est pas l’auteur. L’ajout de commentaires pour la condition If et pour la ligne qui renomme les feuilles de calcul produit le code suivant.

Sub RenameWorksheets()
Dim myWorksheet As Worksheet
For Each myWorksheet In Worksheets
    'make sure that cell B1 is not empty
    If myWorksheet.Range("B1").Value <> "" Then
        'rename the worksheet to the contents of cell B1
        myWorksheet.Name = myWorksheet.Range("B1").Value
    End If
Next
End Sub

Pour tester la macro, renommez les feuilles de calcul Feuil1, Feuil2 et Feuil3 et supprimez le contenu de la cellule B1 sur une ou plusieurs feuilles. Exécutez la macro pour vérifier qu’elle renomme les feuilles de calcul ayant du texte dans la cellule B1 et ne touche pas aux autres feuilles. La macro fonctionne quel que soit le nombre de feuilles et quelle que soit la combinaison de cellules B1 remplies et vides.

Autres possibilités de VBA

Cette section aborde quelques autres possibilités offertes par VBA dans Excel 2010. Les exemples de cette section sont destinés à vous donner un aperçu de ces possibilités plutôt que traiter des scénarios réels particuliers. Cela peut vous être utile de consulter dans la Référence du modèle objet les informations sur les objets à chaque étape lors de votre travail à partir des exemples.

Démarche d’apprentissage

Une bonne façon d’apprendre la programmation en général, et VBA Excel en particulier, est une approche où vous essayez quelque chose, que vous faites ensuite fonctionner, puis vous vous posez des questions comme :

  • Que puis-je essayer ensuite ?

  • Que dois-je apprendre d’abord étant donnée l’utilisation de VBA qui m’intéresse ?

  • Qu’est-ce qui serait intéressant ou simplement amusant à connaître ?

  • Que suis-je curieux de savoir ?

Vous êtes vivement encouragé à étudier toutes les voies qui s’offrent à vous sur le chemin de la connaissance.

Graphiques

La création d’un graphique basé sur une plage de cellules est une tâche courante dans Excel. Créez une macro appelée AssortedTasks et tapez le texte suivant dans Visual Basic Editor.

Dim myChart As ChartObject

Ajoutez une ligne pour créer l’objet graphique et affectez-lui la variable myChart.

Set myChart = ActiveSheet.ChartObjects.Add(100, 50, 200, 200)

Les nombres entre les parenthèses déterminent la position et la taille du graphique. Les deux premiers nombres sont les coordonnées du coin supérieur gauche et les deux suivants indiquent la largeur et la hauteur.

Créez une nouvelle feuille de calcul vierge et exécutez la macro. Le graphique qu’elle crée est inutile puisqu’il ne dispose d’aucune donnée. Supprimez le graphique que vous venez de créer et ajoutez les lignes suivantes à la fin de la macro.

With myChart
    .Chart.SetSourceData Source:=Selection
End With

C’est un modèle courant de programmation VBA. Vous créez d’abord un objet, vous l’affectez à une variable, puis vous utilisez la construction With…End With pour effectuer des opérations avec cet objet. L’exemple de code indique au graphique d’utiliser la sélection actuelle comme données (Selection est une valeur pour le paramètre Source de la méthode SetSourceData et non une valeur de propriété d’objet, la syntaxe VBA requiert donc d’utiliser le signe := au lieu du signe = pour affecter la valeur).

Tapez des nombres dans les cellules A1:A5, sélectionnez ces cellules, puis exécutez la macro. Le graphique s’affiche dans le type par défaut, un graphique à barres.

Figure 5. Graphique à barres créé avec VBA

Graphique à barres créé avec VBA

Si vous ne souhaitez pas un graphique à barres, vous pouvez le remplacez par un autre type de graphique en utilisant un code similaire à l’exemple suivant.

With myChart
    .Chart.SetSourceData Source:=Selection
    .Chart.ChartType = xlPie
End With

xlPie est un exemple de constante intégrée, appelée constante énumérée. Excel contient de nombreuses constantes intégrées, qui sont documentées de façon exhaustive. Pour plus d’informations sur les constantes intégrées, voir la section Énumérations dans la Référence du modèle objet. Par exemple, les constantes des types de graphique sont répertoriées sous « Énumération XlChartType ».

Vous pouvez modifier les données. Par exemple, ajoutez la ligne suivante de suite après la déclaration de variable.

Application.ActiveSheet.Range("a4").Value = 8

Vous pouvez récupérer une entrée de l’utilisateur que vous utilisez pour modifier les données.

myInput = InputBox("Please type a number:")
Application.ActiveSheet.Range("a5").Value = myInput

Finalement, ajoutez les lignes suivantes à la fin de la macro.

ActiveWorkbook.Save
ActiveWorkbook.Close

La macro complète doit maintenant ressembler au code suivant.

Sub AssortedTasks()
Dim myChart As ChartObject
Application.ActiveSheet.Range("a4").Value = 8
myInput = InputBox("Please type a number:")
Application.ActiveSheet.Range("a5").Value = myInput
Set myChart = ActiveSheet.ChartObjects.Add(100, 50, 200, 200)
With myChart
    .Chart.SetSourceData Source:=Selection
    .Chart.ChartType = xlPie
End With
ActiveWorkbook.Save
ActiveWorkbook.Close
End Sub

Vérifiez que les cellules A1:A5 sont toujours sélectionnées, exécutez la macro, tapez un nombre dans la zone de saisie, puis cliquez sur OK. Le code enregistre et ferme le classeur. Rouvrez le classeur et observez les changements sur le graphique à secteurs.

Formulaires utilisateur

La section précédente expliquait comment utiliser une simple zone de saisie pour récupérer une entrée de l’utilisateur. En plus de la boîte de message correspondante qui affiche les informations, VBA offre des fonctionnalités étendues permettant de créer des boîtes de dialogue personnalisées, de coder des contrôles qui sont placés directement sur des feuilles de calcul , ou de manipuler les boîtes de dialogue intégrées d’Excel. Pour plus d’informations sur ces fonctionnalités, voir Contrôles, boîtes de dialogue et formulaires dans la Référence pour développeurs Excel 2007.

Cette section complète cette introduction à VBA Excel par un aperçu rapide des formulaires utilisateur.

Sur l’onglet Développeur, cliquez sur le bouton Visual Basic pour ouvrir Visual Basic Editor, puis accédez au menu Insertion et choisissez UserForm pour accéder au mode création de UserForm.

Deux fenêtres sont affichées. L’une représente le formulaire utilisateur que vous créez et l’autre, la Boîte à outils, affiche les divers contrôles que vous pouvez ajouter à votre formulaire, par exemple, des boutons de commande, des cases d’option, des cases à cocher, etc. Vous pouvez déplacer la souris sur un contrôle Boîte à outils pour voir le type de contrôle qu’il crée.

Créez un formulaire utilisateur très simple ayant un seul bouton qui exécute la macro Hello citée plus haut dans cet article. Dans la Boîte à outils, appuyez sur le contrôle CommandButton et faites-le glisser sur votre formulaire pour créer un bouton de commande. Cliquez avec le bouton droit sur le bouton de commande et choisissez Afficher le code.

Le code Sub qui apparaît est le squelette d’une procédure événementielle qui s’exécute lorsqu’un événement particulier se produit. Dans ce cas, comme le nom de Sub l’indique, l’événement qui exécute le code est un Click sur CommandButton1. Ajoutez la ligne suivante à la procédure événementielle.

Run("Hello")

Le code dans Visual Basic Editor doit ressembler à l’exemple suivant.

Figure 6. Procédure événementielle CommandButton1_Click

Procédure événementielle CommandButton1_Click

Enregistrez le classeur, accédez au menu Fenêtre, choisissez UserForm1 (UserForm) pour réafficher le formulaire. Cliquez sur la flèche verte dans la barre d’outils pour exécuter le formulaire. Lorsque la boîte de dialogue apparaît, cliquez sur le bouton de commande pour exécuter la macro Hello, qui affiche la boîte de message « Hello, world! ». Fermez la boîte de message pour revenir au formulaire qui s’exécute, puis fermez ce dernier pour revenir au mode création.

Et pour la suite ?

Les informations fournies par cet article, combinées avec des expérimentations et l’étude de la Référence du modèle objet et de la Référence du langage VBA, peuvent s’avérer suffisantes pour accomplir la tâche qui vous a motivé à vous lancer dans l’apprentissage de VBA. Auquel cas, tant mieux, mais si vous les trouvez insuffisantes, la prochaine étape recommandée est d’élargir votre vision par une compréhension générale de VBA.

Une façon d’apprendre davantage VBA est d’étudier du code opérationnel. En plus des exemples donnés dans la Référence du modèle objet et la Référence du langage VBA, il existe une quantité formidable de code VBA Excel disponible à partir de diverses sources en ligne, y compris des articles sur MSDN, des sites Web maintenus par des MVP (Microsoft Most Valuable Professionals) spécialisés sur Excel, et d’autres ressources accessibles par une recherche rapide sur le Web.

Le code proposé sur ces ressources peut vous aider à résoudre vos problèmes de codage immédiats et vous donner des idées pour vos projets auxquelles vous n’aviez pas pensé.

Si vous préférez poursuivre une étude plus systématique de VBA, il existe quelques bons livres sur VBA ; quelques bonnes critiques de ces livres accessibles sur le Web peuvent vous aider à choisir les meilleurs pour votre style d’apprentissage.

Ressources supplémentaires