Combobox et ouverture de feuilles

Résolu/Fermé
metek18 Messages postés 10 Date d'inscription jeudi 9 juillet 2015 Statut Membre Dernière intervention 26 avril 2016 - 10 juil. 2015 à 15:56
metek18 Messages postés 10 Date d'inscription jeudi 9 juillet 2015 Statut Membre Dernière intervention 26 avril 2016 - 23 juil. 2015 à 14:15
Bonjour,

J'ai créé un formulaire récupérant les données d'une feuille. Dans ce formulaire, 4 combobox récupérant un numéro, un nom, une année, un mois et un bouton rechercher.

J'ai des feuilles "ventes janvier", "ventes février", ... qui contiennent en B1, un numéro, en B3, un nom, en J1, une année et en J2 un mois.

Je voudrais que si le contenu de chaque combobox correspond au contenu de chaque case(B1, B3, J1, J2) d'une ou plusieurs feuilles de mon classeur alors on active ces feuilles.

J'ai voulu procéder comme suit sans succès :
- Comparer le contenu de la première combo avec le contenu de toutes les cellules B1 de mon classeur.
- Comparer le contenu de la deuxième combo avec le contenu de toutes les cellules B3 de mon classeur etc
- Si chaque case correspond à la bonne combobox alors on affiche la feuille en question.

Merci de votre aide !
A voir également:

3 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
10 juil. 2015 à 16:23
Bonjour,

Ce que je ferais :
Utiliser les événement _Click() des 4 comboboxes, comme ceci :
1- ComboBox1_Click()
=> Remplit une variable tableau des noms de feuilles ou on trouve le contenu de ComboBox1 en B1
=> Vide ComboBox2
=> Remplit ComboBox2 avec les noms situés en B3 des feuilles référencées dans la variable tableau

2- ComboBox2_Click()
=> remplit une variable tableau (à partir de la première variable tableau) des noms de feuilles ou on trouve le nom choisi en B3
======> on a donc ici le nom des feuilles valides pour B1 et B3
=> vide ComboBox3
=> Remplit ComboBox3 avec les années situés en J1 des feuilles référencées dans la variable tableau

3- ComboBox3_Click()
=> remplit une variable tableau (à partir de la seconde variable tableau) des noms de feuilles ou on trouve l'année choisie en J1
======> on a donc ici le nom des feuilles valides pour B1 et B3 et J1
=> vide ComboBox4
=> Remplit ComboBox avec les mois situés en J2 des feuilles référencées dans la variable tableau

4- ComboBox4_Click()
=> Cherche, dans la variable tableau précédente, les feuilles correspondante au mois choisi.


Si tu veux une maquette, il faudra nous fournir un exemple de fichier anonymisé.
0
metek18 Messages postés 10 Date d'inscription jeudi 9 juillet 2015 Statut Membre Dernière intervention 26 avril 2016
Modifié par metek18 le 10/07/2015 à 17:32
Comment poster un fichier sur le forum ?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
11 juil. 2015 à 09:18
Bonjour,

Essaie ceci :

en entête du module de l'userform, avant toute procédure ou fonction, déclare :
'En entête de module
Private Tab1(), Tab2(), Tab3(), Tab4()


Ensuite, dans le code, copie-colle ceci (adapte les noms des comboboxes) :
Private Sub ComboBox1_Click()

Erase Tab1: ComboBox2.Clear

Dim Ws As Worksheet, cpt As Integer

For Each Ws In ThisWorkbook.Worksheets
    With Ws
        If CStr(.Range("B1")) = ComboBox1 Then
            ReDim Preserve Tab1(cpt)
            Tab1(cpt) = .Name
            cpt = cpt + 1
            Me.ComboBox2.Value = .Range("B3")
            If Me.ComboBox2.ListIndex = -1 Then Me.ComboBox2.AddItem .Range("B3")
        End If
    End With
Next
End Sub

Private Sub ComboBox2_Click()
Erase Tab2: ComboBox3.Clear

Dim Ws As Worksheet, cpt As Integer

For Each Ws In ThisWorkbook.Worksheets(Tab1)
    With Ws
        If CStr(.Range("B3")) = ComboBox2 Then
            ReDim Preserve Tab2(cpt)
            Tab2(cpt) = .Name
            cpt = cpt + 1
            Me.ComboBox3.Value = .Range("J1")
            If Me.ComboBox3.ListIndex = -1 Then Me.ComboBox3.AddItem .Range("J1")
        End If
    End With
Next
End Sub

Private Sub ComboBox3_Click()
Erase Tab3: ComboBox4.Clear

Dim Ws As Worksheet, cpt As Integer

For Each Ws In ThisWorkbook.Worksheets(Tab2)
    With Ws
        If CStr(.Range("J1")) = ComboBox3 Then
            ReDim Preserve Tab3(cpt)
            Tab3(cpt) = .Name
            cpt = cpt + 1
            Me.ComboBox4.Value = .Range("J2")
            If Me.ComboBox4.ListIndex = -1 Then Me.ComboBox4.AddItem .Range("J2")
        End If
    End With
Next
End Sub


Private Sub ComboBox4_Click()
Erase Tab4

Dim Ws As Worksheet, cpt As Integer

For Each Ws In ThisWorkbook.Worksheets(Tab3)
    With Ws
        If CStr(.Range("J2")) = ComboBox4 Then
            ReDim Preserve Tab4(cpt)
            Tab4(cpt) = .Name
            cpt = cpt + 1
        End If
    End With
Next
'ICI, la variable Tab4 contient les noms des feuilles ou on trouve les 4 valeurs
For cpt = LBound(Tab4) To UBound(Tab4)
    MsgBox Tab4(cpt)
Next cpt
End Sub


Je ne serais pas de retour ici avant mercredi!
Bon week end
0
metek18 Messages postés 10 Date d'inscription jeudi 9 juillet 2015 Statut Membre Dernière intervention 26 avril 2016
23 juil. 2015 à 14:15
Bonjour et désolé pour la réponse tardive. J'ai adapaté ce code à mon projet à ça fonctionne nickel merci !
0