Autres liste déroulante et onglets Excel 2021

  • Initiateur de la discussion Initiateur de la discussion PIERRE02
  • 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 !

PIERRE02

XLDnaute Nouveau
Bonjour à tous
j'avais besoin d'une liste déroulante me permettant d'avoir accès aux onglets de mon classeur
j'ai trouvé sur le web un module qui permet de le faire mais je souhaiterai ne pouvoir sélectionner les onglets qu'à partir d'un onglet de référence (par ex menu)
QQ à t il la solution ?
voici le module en question
merci de votre aide

Private Sub ComboBox1_Change()
'Updateby Extendoffice
If ComboBox1.ListIndex > -1 Then Sheets(ComboBox1.Text).Select
End Sub
Private Sub ComboBox1_DropButtonClick()
Dim xSheet As Worksheet
On Error Resume Next
Application.ScreenUpdating = False
Application.EnableEvents = False
If ComboBox1.ListCount <> ThisWorkbook.Sheets.Count Then
ComboBox1.Clear
For Each xSheet In ThisWorkbook.Sheets
ComboBox1.AddItem xSheet.Name
Next xSheet
End If
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Private Sub ComboBox1_GotFocus()
If ComboBox1.ListCount <> 0 Then ComboBox1.DropDown
End Sub
 
Bonsoir Pierre,
Un essai en PJ avec deux macros événementielles.
Quand on clique sur B3 on construit la liste déroulante avec le nom des feuilles présentes :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim Chaine$, F
    If Not Application.Intersect(Target, [B3]) Is Nothing Then
        For Each F In Worksheets
            If F.Name <> "Menu" Then Chaine = Chaine & "," & F.Name
        Next F
        Chaine = Mid(Chaine, 2)
        With Range("B3").Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=Chaine
        End With
    End If
End Sub
Quand on a choisit sa feuille alors on va dessus :
Code:
Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fin: If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, [B3]) Is Nothing Then
         If Target = "" Then Exit Sub
         [B4].Select: Feuille = [B3]: Sheets(Feuille).Select
    End If
Fin:
End Sub
A adapter à votre besoin.
 

Pièces jointes

Bonsoir Pierre,
Un essai en PJ avec deux macros événementielles.
Quand on clique sur B3 on construit la liste déroulante avec le nom des feuilles présentes :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim Chaine$, F
    If Not Application.Intersect(Target, [B3]) Is Nothing Then
        For Each F In Worksheets
            If F.Name <> "Menu" Then Chaine = Chaine & "," & F.Name
        Next F
        Chaine = Mid(Chaine, 2)
        With Range("B3").Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=Chaine
        End With
    End If
End Sub
Quand on a choisit sa feuille alors on va dessus :
Code:
Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fin: If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, [B3]) Is Nothing Then
         If Target = "" Then Exit Sub
         [B4].Select: Feuille = [B3]: Sheets(Feuille).Select
    End If
Fin:
End Sub
A adapter à votre besoin.
Bonjour
j'ai testé les deux exemples
celui de Sylvavu fonctionne très bien pour les onglets existants mais nécessite une mise à jour de la liste déroulante en cas d'onglet supplémentaire
Celui de Vgendron me parait plus efficace dans la mesure ou il liste tous les onglets situés après "menu" mais j'ai beaucoup de mal a adapter la variable "Nom2toignore" pour cacher les onglets type "onglet1" "onglet2" etc
Désolé de vous solliciter à nouveau
 
Hello

euh non.. à aucun moment, mon code n'est capable de dire si l'onglet est avant ou après l'onglet menu..
ce qu'il faut
1) ton fichier...
2) la liste des onglets qu'il faut ignorer
==> Si cette liste est fixe:== facile, suffit de modifier ma ligne de code
if ws.name<>"menu" and.. and... and...
==> si la position des onglets est connue (exemple: les onglets à ignorer sont TOUS après l'onglet "Menu"
on va pouvoir jouer avec le codename: Sheets(1) = le premier onglet sheets(2).. le deuxième.... sheets(Sheets.count) = le dernier
 
Bonjour,
celui de Sylvavu fonctionne très bien pour les onglets existants mais nécessite une mise à jour de la liste déroulante en cas d'onglet supplémentaire
C'est complétement faux. Justement la macro Worksheet_SelectionChange est là pour ça :
20221006_142802.gif
 
Il faut reperer où se trouve la feuille Menu puis ne mémoriser que les feuilles suivantes.
un essai en PJ avec la modif suivante :
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim Chaine$, Position%, F
    If Not Application.Intersect(Target, [B3]) Is Nothing Then
        Position = 1    ' Repère l'index de la feuille Menu
        For Each F In Worksheets
            Position = Position + 1
            If F.Name = "Menu" Then Exit For
        Next F
        Position = Position - 1
        For Each F In Worksheets    ' Ne liste que les feuilles suivantes à Menu
            If F.Index > Position Then Chaine = Chaine & "," & F.Name
        Next F
        Chaine = Mid(Chaine, 2)
        With Range("B3").Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=Chaine
        End With
    End If
End Sub
 

Pièces jointes

Il faut reperer où se trouve la feuille Menu puis ne mémoriser que les feuilles suivantes.
un essai en PJ avec la modif suivante :
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim Chaine$, Position%, F
    If Not Application.Intersect(Target, [B3]) Is Nothing Then
        Position = 1    ' Repère l'index de la feuille Menu
        For Each F In Worksheets
            Position = Position + 1
            If F.Name = "Menu" Then Exit For
        Next F
        Position = Position - 1
        For Each F In Worksheets    ' Ne liste que les feuilles suivantes à Menu
            If F.Index > Position Then Chaine = Chaine & "," & F.Name
        Next F
        Chaine = Mid(Chaine, 2)
        With Range("B3").Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=Chaine
        End With
    End If
End Sub
C'est exactement ça
merci beaucoup
 
- 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

Discussions similaires

Réponses
10
Affichages
281
Réponses
3
Affichages
665
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
479
Retour