Bonjour à tous,
Suite à la publication de mon précédent post sur l'ajout d'un formulaire en VBA, j'ai eu plusieurs questions.
La première concerne la gestion des feuilles masquées. En effet, comment afficher les feuilles masquées, ou encore comment ne pas les faire apparaitre dans le menu.
Pour cela, en VBA, on utilise la propriété .visible lié à une feuille.
On peut l'utiliser par exemple pour ne pas lister les feuilles masquées, ou encore pour afficher des feuilles masquées.
Ne pas lister les feuilles masquées
Ainsi, le code suivant (avec wks un objet feuille) va tester si la feuille est affichée:
If wks.Visible = xlSheetVisible Then
Dans le code que l'on a généré dans le post précédent, on peut donc incorporer ce test pour décider ou non de l'ajout de la feuille dans la liste déroulante.
D'où le code final :
For Each wks In ThisWorkbook.Worksheets
If wks.Visible = xlSheetVisible Then
UF_Deplacement.CB_Feuille.AddItem wks.Name
End If
Next
Ceci nous donne ce fichier qui ne va pas afficher les feuilles masquées dans le menu déroulant.
Afficher les feuilles masquées
On va traiter ici le cas où les feuilles masquées doivent apparaître dans la liste déroulante, et une fois sélectionnée, on va les afficher.
On va donc modifier le code relié au menu déroulant de la façon suivante :
Private Sub CB_Feuille_Change()
If Worksheets(Me.CB_Feuille.Value).Visible = xlSheetHidden Then
Worksheets(Me.CB_Feuille.Value).Visible = xlSheetVisible
End If
Worksheets(Me.CB_Feuille.Value).Select
End Sub
D'où ce fichier.
Formalisation du code
Durant tout cet exercice, nous avons travaillé sur le fichier contenant le code (celui par défaut si aucun classeur n'est spécifié). Cependant, il peut être utile de spécifier le fichier sur lequel on travaille comme mentionné dans cette discussion par Dominique : https://www.facebook.com/groups/70018528227/
Nous pouvons ainsi modifier le code de façon à travailler sur
- le fichier contenant le code,
- le classeur actif ou bien
- sur un autre classeur spécifique en fonction des besoins.
On peut ainsi ajouter une variable Workbook se référant au classeur contenant la macro (ThisWorkBook) ou encore au classeur actif (ActiveWorkbook) ou tout autre classeur, puis utiliser cette variable dans le fichier.
D'où un code qui ressemblera à ceci :
Sub Afficher_formulaire_deplacement()
Dim wkb_classeur_de_travail As Workbook
Dim wks As Worksheet
Set wkb_classeur_de_travail = ThisWorkbook
For Each wks In wkb_classeur_de_travail.Worksheets
UF_Deplacement.CB_Feuille.AddItem wks.Name
Next
UF_Deplacement.Show
End Sub
Ceci est aussi utile si on veut transformer l'application en macro complémentaire, permettant d'avoir le menu de déplacement pour n'importe quel fichier.
A bientôt.
Gaetan