Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

recherche d'onglet

  • Initiateur de la discussion Initiateur de la discussion vincentS
  • Date de début Date de début

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 !

V

vincentS

Guest
Bonjours,

j'ai besoin d'aide !

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")

Merci a vous pour votre aide.
 
Re : recherche d'onglet

Bonsoir VincentS, bienvenue sur ce forum,

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
 

Pièces jointes

Dernière édition:
Re : recherche d'onglet

Merci beaucoup Kotov !

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?
 
Re : recherche d'onglet

Bonsoir Vincent,

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.


J'espère avoir été assez clair.

Bonne soirée
Kotov
 
Dernière édition:
Re : recherche d'onglet

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.
 
Dernière modification par un modérateur:
Re : recherche d'onglet

Bonsoir Vincent,

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.

A +
Kotov
 

Pièces jointes

Re : recherche d'onglet

Oui pour le double post, je pensais qu'il fallait en faire un par macro !

Enfin bref au total j'ai fini cette macro elle marche parfaitement !

par contre pour l'autre il y a un problème, donc on en parle sur l'autre sujet du coup 😉

Encore merci à toi.
 
- 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.

Discussions similaires

K
Réponses
38
Affichages
10 K
kinders59
K
H
Réponses
7
Affichages
1 K
Hugo_CAN
H
C
Réponses
3
Affichages
2 K
claivier_58
C
C
Réponses
1
Affichages
2 K
claivier_58
C
C
Réponses
5
Affichages
2 K
CestPasMoi
C
B
Réponses
5
Affichages
2 K
B
D
Réponses
5
Affichages
7 K
J
Réponses
6
Affichages
6 K
JULIOOOO
J
J
Réponses
5
Affichages
2 K
journeydo
J
K
Réponses
2
Affichages
2 K
kikinette
K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…