Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
voila je cherche a faire une macro de recherche des différents onglets de mon fichier.
Ce que je voudrais arriver a faire c'est une liste déroulante où l'on trouverai tout les onglets nommés "demande PAC 200X" (2008 2009 2010...), y compris ceux qui ne sont pas encore créés. Une fois avoir sélectionné l'onglet voulu dans la liste, cela nous amènerai directement dessus (ou alors sélectionner l'onglet dans la liste puis click sur un bouton "Go")
Tu trouveras en pièce jointe un fichier qui, je l'espère, répondra à ta demande.
Bonne soirée
Kotov
Pour info :
Un classeur comprenant une feuille "Interface" contenant la liste déroulante
Plusieurs onglets nommés "demande PAC 2008" ... à "demande PAC 2010"
Les 4 macros suivantes :
Code:
Private Sub Workbook_Open()
With Sheets("Interface").ComboBox1
For i = 8 To 9
.AddItem "demande PAC 200" & i
Next i
For i = 10 To 20
.AddItem "demande PAC 20" & i
Next i
End With
End Sub
Private Sub ComboBox1_Change()
Dim S$, i&
S = ComboBox1.Value
For i = 1 To Sheets.Count
If Sheets(i).Name = S Then Sheets(S).Activate
Next i
End Sub
Private Sub ComboBox1_Click()
Dim S$, i&
S = ComboBox1.Value
For i = 1 To Sheets.Count
If Sheets(i).Name = S Then Sheets(S).Activate
Next i
End Sub
c'est pil poil ce que je voulais, merci pour le fichier !
Par contre j'ai deux soucis pour le reproduire, je n'arrive pas a créer une liste et a y affecter ta macro, et j'ai un problème dans les nom que la liste me propose, j'ai des valeur du genre 2010 au début puis 20020 a la fin.
Ne serait il pas possible de s'arrêter par exemple a 2050 et ne rien mettre après?
Pour créer la liste déroulante, j'ai procédé de la manière suivante :
1. Dans la feuille "Interface", j'ai inséré, via la boite à outils de VBE, une combobox nommée "ComboBox1"
2. Pour incrémenter cette ComboBox1, j'ai choisi de la charger à chaque ouverture du classeur via la macro suivante :
Code:
Private Sub Workbook_Open()
With Sheets("Interface").ComboBox1
For i = 8 To 9
.AddItem "demande PAC 200" & i
Next i
For i = 10 To 20
.AddItem "demande PAC 20" & i
Next i
End With
End Sub
Que fait cette macro ?
Ligne 1 : sélectionne la ComboBox1 de la feuille Interface
Ligne 2 : une boucle pour les années 2008 et 2009
Ligne 3 : Ajoute les unités 8 et 9 au nom de ta feuille pour "millésimer" ton année
Ligne 4 : fin de la boucle
Ligne 5 : une boucle pour les années à partir de 2010 (note bien que si j'avais fait une seule boucle de 8 à 20, j'aurais obtenu les années 2008,2009, 20010, 20011...). J'ai donc supprimé un zéro : "demande PAC 20"
Ligne 6 : Ajoute les 10 à 20 au nom de ta feuille pour "millésimer" ton année (indique 50 et tu auras une liste jusqu'en 2050)
Ligne 7 : fin de la boucle
--------------------
Et maintenant pour sélectionner la feuille souhaitée, 2 macros qui font la même chose, l'une sur le changement de valeur de la ComboBox, l'autre sur un simple clic sur la valeur affichée :
Code:
Private Sub ComboBox1_Change()
Dim S$, i&
S = ComboBox1.Value
For i = 1 To Sheets.Count
If Sheets(i).Name = S Then Sheets(S).Activate
Next i
End Sub
Private Sub ComboBox1_Click()
Dim S$, i&
S = ComboBox1.Value
For i = 1 To Sheets.Count
If Sheets(i).Name = S Then Sheets(S).Activate
Next i
End Sub
Explications :
Ligne 1 : déclaration des variables S ($ = chaîne de caractères) et i (nombre entier pour la boucle passant en revue chaque feuille)
Ligne 2 : S = nom de la feuille choisie = valeur de la ComboBox1
Ligne 3 : Boucle qui passe en revue toutes les feuilles jusqu'à la dernière (Sheets.Count = nombre total de feuilles)
Ligne 4 : si le nom de la feuille sélectionnée = nom de la feuille souhaitée alors sélection de la feuille désirée. (dans le cas contraire, on reste sur l'interface, pour éviter un bug)
Ligne 5 : fin de la boucle
A noter que j'efface la 4ème macro qui ne m'a servi qu'à faire un test et qui t'a induit en erreur pour l'incrémentation des millésimes.
SI j'enlève la 4ième macro la liste ne m'affiche plus rien, et quand je la laisse ca marche mais a chaque fois que je crée un onglet il duplique la liste (la liste va de 2008=>2050 puis a nouveau de 2008=>2050)
Merci beaucoup pour ton aide et ta patience, tes traductions m'aide beaucoup en plus, c'est tres sympa
Je met excellent pour la discussion 😉 merci a toi.
Ne tiens pas compte de cette 4ème macro qui n'a pas d'utilité réelle. Je m'en suis servi comme ébauche, et j'aurais logiquement dû la supprimer avant de joindre mon fichier.
L'initialisation de la liste déroulante, une seule et unique fois, se programme dans ThisWorkbook (dans Visual Basic Editor, accessible via Alt+F11).
Dans ce module ThisWorkbook, insère la macro suivante :
Code:
Private Sub Workbook_Open()
With Sheets("Interface").ComboBox1
For i = 8 To 9
.AddItem "demande PAC 200" & i
Next i
For i = 10 To 20
.AddItem "demande PAC 20" & i
Next i
End With
End Sub
Pré requis : avoir un onglet nommé "Interface" dans lequel tu insères une ComboBox nommée "ComboBox1"
C'est cette macro qui chargera une seule fois la liste à chaque ouverture de ton classeur.
Dans le module "Interface", insères les macros suivantes :
Code:
Private Sub ComboBox1_Change()
Dim S$, i&
S = ComboBox1.Value
For i = 1 To Sheets.Count
If Sheets(i).Name = S Then Sheets(S).Activate
Next i
End Sub
Private Sub ComboBox1_Click()
Dim S$, i&
S = ComboBox1.Value
For i = 1 To Sheets.Count
If Sheets(i).Name = S Then Sheets(S).Activate
Next i
End Sub
Le fichier en pièce jointe fonctionne avec ces 3 macros.
Attention à les copier dans les modules ad hoc.
Si tu es de nouveau confronté à un problème, envoies un exemple du fichier que tu cherches à réaliser. Enlèves toutefois toutes les données confidentielles.
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.