VBA -Ajouter un menu de déplacement, options supplémentaires

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

Excel, comparer deux listes pour trouver les doublons

Shopping_list_chiseled_on_a_rock[1]Avez vous des listes à comparer, pour trouver les doublons?

Voici une vidéo qui propose une solution possible, utilisant une mise en forme conditionnelle et la formule suivante :

=NON(ESTNA(EQUIV(A2;E:E;0)))

[EDIT] ATTENTION : Cette méthode ne fonctionne que pour des cellules de moins de 255 caractères.
Une solution alternative (a priori plus lente) serait d'utiliser une formule matricielle à base de MAX et LIGNE :
=MAX((A2=$E$2:$E$7)*(LIGNE($E$2:$E$7)))
A valider par CTRL+MAJ+ENTREE pour ajouter les accolades et la transformer en formule matricielle.
{=MAX((A2=$E$2:$E$7)*(LIGNE($E$2:$E$7)))}

A bientôt

Gaetan

VBA - Ajouter un formulaire de déplacement avec liste déroulante

Voici une petite vidéo qui explique comment ajouter un formulaire à un fichier Excel pour gérer une liste de feuilles et permettre de se positionner sur la feuille désirée. deplacement

Vous pouvez télécharger le fichier ici.

Vous y découvrirez les notions suivantes : For Each... In ... Next ; propriété showmodal ; ThisWorkbook.Worksheets : .Show ; .Name ; Worksheets()

Retrouvez d'autres vidéos sur VBA dans mes CD sur ce sujet :

A bientôt.

Gaetan