Lister les barres d'outils et contrôles d'Excel
Auteur(s) : KiWin
Première publication le : 22/08/05
Dernière modification le : 05/09/05
Fichier associé : command_bars.zip
Testé et réalisé sous Excel 2002 Elements abordés : CommandBars / Controls / NameLocal / Visible / CountIl est possible via des macros de modifier l'interface d'Excel, c'est à dire agir sur les menus et barres d'outils d'Excel. Nous allons ici nous contenter d'établir une liste des barre d'outils d'Excel et des contrôles qu'elle contiennent.
Avant de songer à modifier, ajouter, interagir avec les barres d'outils et les contrôles, il est nécessaire de savoir comment retrouver la barre d'outils ou le contrôle qui nous intéresse, indiquer quel élément modifier après avoir effectué les vérifications nécessaires.
C'est ce que nous allons apprendre ici.
Nous devons pour celà procéder par étapes :
1) Etablir une liste des barres d'outils.
2) Pour chaque barre d'outils, récupérer les propriétés le concernant qui nous intéresse.
3) Pour chaque barre d'outils, établir une liste des contrôles qu'elle contient.
4) Pour chaque contrôle, récupérer les propriétés qui nous intéressent et le concernant.
Sans oublier de reporter sur une feuille Excel les données ainsi obtenues.
La macro commence ainsi :
| Code: |
Dim Ligne As Integer, Colonne As Integer Ligne = 3 Colonne = 1 |
Voir cours sur les types de données
- On récupère le nombre de barres d'outils contenues dans Excel :
| Code: |
Dim Nb_Barres As Byte Nb_Barres = CommandBars.Count |
CommandBars désigne l'ensemble des barre d'outils et Count le nombre d'éléments que contient cet ensemble.
- On créé deux variables qui vont servir à récupérer le nom de chaque barre ainsi que son état visible ou non :
| Code: |
Dim Nom_Barre As String Dim Vue_Barre As Boolean |
Voir cours sur les types de données
- On créé aussi une variable qui va prendre le nombre de contrôles que contient une barre :
| Code: |
Dim Nb_Controles_Barre As Byte |
- On créé de même une variable qui va recevoir le nombre total de contrôles toutes barres confondues :
| Code: |
Dim Nb_Controles As Integer |
- On créé un compteur qui va augmenter par la suite pour pouvoir changer de barre :
| Code: |
Dim Num_Barre As Byte Num_Barre = 1 |
- On créé une boucle basée sur le nombre de barres pour pouvoir analyser toutes les barres une par une :
| Code: |
For Num_Barre = 1 To Nb_Barres |
Une boucle commence par For et se termine par Next, qui se trouve à la fin des instructions devant être réalisées durant la boucle.
- On récupère le nom et l'état visible ou non de la barre :
| Code: |
Nom_Barre = CommandBars(Num_Barre).NameLocal Vue_Barre = CommandBars(Num_Barre).Visible |
CommandBars(Num_Barre) désigne la barre dont le numéro est contenu dans Num_Barre.
NameLocal est le nom de la barre. Il existe aussi Name qui est le nom d'origine de la barre, c'est-à-dire en anglais.
Visible est une proprité qui permet de savoir si un élément est visible ou non.
- On récupère aussi le nombre de contrôles contenus dans la barre :
| Code: |
Nb_Controles_Barre = CommandBars(Num_Barre).Controls.Count |
- On ajoute ce nombre de contrôles au total de contrôles :
| Code: |
Nb_Controles = Nb_Controles + Nb_Controles_Barre |
- Convertion de la valeur de Vue_Barre en texte :
| Code: |
Dim Etat_Barre As String If Vue_Barre = True Then Etat_Barre = "Visible" Else Etat_Barre = "Cachée" End If |
En fait on traduit l'état visible de la barre par un mot clairement lisible, à savoir "Visible" ou "Caché".
- On écrit dans la feuille de calcul les données de cette barre d'outils :
par exemple : Barre d'outils n° X : Unetelle (Visible) - X contrôles
| Code: |
Worksheets(2).Cells(Ligne, Colonne).Value = "Barre d'outils n° " _ & Num_Barre & " : " & Nom_Barre & " (" & Etat_Barre & ") - " _ & Nb_Controles_Barre & " contrôles" |
(Je ne donne pas ici de détails quant à l'écriture de texte dans une cellule, il faut juste savoir que l'on créer une phrase complète en utilisant les valeurs récupérées ci-dessus.)
- Changement de cellule cible (pas de détails) :
| Code: |
Ligne = Ligne + 1 Colonne = Colonne + 1 |
On va maintenant s'occuper des contrôles contenus dans cette barre d'outils en suivant le même principe que ci-dessus.
- On créé deux variables qui vont servir à récupérer le nom de chaque contrôle ainsi que son état visible ou non :
| Code: |
Dim Nom_Controle As String Dim Vue_Controle As Boolean |
- On créé un compteur qui va augmenter par la suite pour pouvoir changer de contrôle :
| Code: |
Dim Num_Controle As Byte Num_Controle = 1 |
- On créé une boucle basée sur le nombre de contrôles pour pouvoir analyser tous les contrôles un par un :
| Code: |
For Num_Controle = 1 To Nb_Controles_Barre |
- On récupère le nom et l'état visible ou non du contrôle :
| Code: |
Nom_Controle = CommandBars(Num_Barre).Controls(Num_Controle).Caption Vue_Controle = CommandBars(Num_Barre).Controls(Num_Controle).Visible |
Ici comme nom on utilise la propriété Caption qui est le texte affiché par un contrôle, quand celui-ci doit l'afficher.
- Convertion de la valeur de Vue_Controle en texte :
| Code: |
Dim Etat_Controle As String If Vue_Controle = True Then Etat_Controle = "Visible" Else Etat_Controle = "Caché" End If |
- On écrit dans la feuille de calcul les données de ce contrôle :
par exemple : Contrôle n° X : Untel (Visible)
| Code: |
Worksheets(2).Cells(Ligne, Colonne).Value = "Contrôle n° " _ & Num_Controle & " : " & Nom_Controle & " (" & Etat_Controle & ")" |
- Changement de cellule cible (pas de détails) :
- Le traitement du contrôle étant terminé, on passe au suivant :
- Changement de cellule cible (pas de détails) :
| Code: |
Ligne = Ligne + 1 Colonne = Colonne - 1 |
- Une fois que tous les contrôles ont été analysés, on change de barre d'outils :
- Pour terminer, on écrit sur la feuille le nombre de barres trouvées ainsi que le total de contrôles :
| Code: |
Worksheets(2).Cells(1, 1).Value = Nb_Barres & _ " barres d'outils ont été recensées pour un total de " _ & Nb_Controles & " contrôles." |