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

Extraire les cellules contenant un mot spécifique

Bonjour à tous,

Suite à la question de Danielle, voici une adaptation de la macro créée ici pour rapatrier les cellules contenant un mot dans une seule feuille.

Pré-requis : ce post
Objectif : rapatrier toutes les cellules contenant une chaîne de texte
Fichier final : ici

Vous pouvez trouver ici une présentation vidéo des fonctionnalités de ce fichier, puis en dessous une description détaillée du code utilisé. (note : Pour ne pas voir la barre de contrôle de la vidéo, positionnez votre curseur en dehors de la vidéo)

Et voici la description détaillée du code :

N'hésitez pas à laisser vos commentaires si besoin.

A bientôt.

Gaëtan