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) :
- Code:
-
Ligne = Ligne + 1
- Le traitement du contrôle étant terminé, on passe au suivant :
- Code:
-
Next Num_Controle
- 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 :
- Code:
-
Next Num_Barre
- 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."