Alimentation ComboBox avec plusieurs feuilles

Résolu/Fermé
Landry85 Messages postés 94 Date d'inscription mardi 5 novembre 2013 Statut Membre Dernière intervention 16 octobre 2017 - 6 oct. 2017 à 13:46
Landry85 Messages postés 94 Date d'inscription mardi 5 novembre 2013 Statut Membre Dernière intervention 16 octobre 2017 - 16 oct. 2017 à 18:27
Bonjour à tous,

j'utilise le code ci-dessous pour alimenter une série de comboBox en cascade. Pour le moment, la recherche s'effectue sur la feuille "1796". Mais comme j'ai une multitude de lignes, j'aimerai effectuer la recherche sur différente page.

J'ai essayé d'ajouter les feuilles exp :

Set ws = worksheets ("1796" , "Feuil2" , "Feuil3"....)

ou

Set ws = worksheets ("1796") And worksheets ("Feuil2") And.....

Mais ça ne fonctionne pas.

Peut être une idée?

Merci d'avance

Private Sub CommandButton3_Click() 'Bouton AJOUTER UNE DONNEE

Dim DerLig As Long

With Worksheets("CourrierAppro")
        'Recherche de la dernière ligne renseignée dans la colonne A
        DerLig = .Range("A" & .Rows.count).End(xlUp).Row
        'On remplit la cellule suivante
        .Range("C" & DerLig).Offset(1, 0) = Me.ComboBox1.Value
        .Range("D" & DerLig).Offset(1, 0) = Me.ComboBox2.Value
        .Range("E" & DerLig).Offset(1, 0) = Me.ComboBox3.Value
        .Range("F" & DerLig).Offset(1, 0) = Me.ComboBox4.Value
        .Range("B" & DerLig).Offset(1, 0) = Me.ComboBox5.Value
    End With

End Sub

Private Sub UserForm_Initialize()
    'Définit la feuille contenant les données
    Set Ws = Worksheets("1796") And Worksheets("ANACOLE")
    'Définit le nombre de lignes dans la colonne A
    NbLignes = Ws.Range("A65536").End(xlUp).Row
    
    'Remplissage du ComboBox1
    Alim_Combo 1
    
End Sub


Private Sub ComboBox1_Change()
    'Remplissage Combo2
    Alim_Combo 2, ComboBox1.Value
    
       
End Sub
Private Sub ComboBox2_Change()
    'Remplissage Combo2
    Alim_Combo 3, ComboBox2.Value
    
End Sub
Private Sub ComboBox3_Change()
    'Remplissage Combo2
    Alim_Combo 4, ComboBox3.Value
    
End Sub
Private Sub ComboBox4_Change()
    'Remplissage Combo2
    Alim_Combo 5, ComboBox4.Value
    
End Sub


Private Sub ComboBox5_Change()
Dim J As Long

    'Remplissage Combo5
    'Alim_Combo 6, ComboBox5.Value
  With Me.ComboBox6
    .Clear
    If Me.ComboBox5.ListIndex = -1 Then Exit Sub
    For J = 4 To NbLignes
      If CStr(Ws.Range("A" & J)) = Me.ComboBox1 And CStr(Ws.Range("B" & J)) = Me.ComboBox2 And CStr(Ws.Range("C" & J)) = Me.ComboBox3 And CStr(Ws.Range("D" & J)) = Me.ComboBox4 And CStr(Ws.Range("E" & J)) = Me.ComboBox5 Then
        .Value = Ws.Range("F" & J)
        If .ListIndex = -1 Then .AddItem Ws.Range("F" & J)
      End If
    Next J
    If .ListCount = 1 Then .ListIndex = 0 Else .ListIndex = -1
  End With
    
End Sub

'Procédure pour alimenter les ComboBox
Private Sub Alim_Combo(CbxIndex As Integer, Optional Cible As Variant)
    Dim J As Integer
    Dim Obj As Control
    
    'Définit le ComboBox à remplir
    Set Obj = Me.Controls("ComboBox" & CbxIndex)
    'Supprime les anciennes données
    Obj.Clear
    
    'alimente le Combobox initial (Combobox1)
    If CbxIndex = 1 Then
        'Boucle sur les lignes de la colonne A (à partir de la 2eme ligne)
        For J = 4 To NbLignes
            Obj = Ws.Range("A" & J)
            'Remplit le ComboBox sans doublons
            If Obj.ListIndex = -1 Then Obj.AddItem Ws.Range("A" & J)
        Next J
    Else
        'Alimentation conditionnelle des autres Combobox en fonction de
        'ce qui est sélectionnée dans le contrôle précédent:
        '(La sélection du ComboBox1 définit le contenu du ComboBox2,
        'La sélection du ComboBox2 définit le contenu du ComboBox3 ?etc...)
        For J = 4 To NbLignes
            If CStr(Ws.Range("A" & J).Offset(0, CbxIndex - 2)) = Cible Then
                Obj = Ws.Range("A" & J).Offset(0, CbxIndex - 1)
                If Obj.ListIndex = -1 Then Obj.AddItem Ws.Range("A" & J).Offset(0, CbxIndex - 1)
            End If
        Next J
   End If
   
   'Enlève la sélection dans le ComboBox
   Obj.ListIndex = -1
End Sub

2 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
Modifié le 6 oct. 2017 à 14:29
Bonjour
principe pour sélectionner ta feuille de travail
Option Explicit
'----------------------------
Sub xxxx()
Dim Liste, Cptr As Byte
Liste = Array("1796", "1797", "1798")
For Cptr = 0 To Ubound(Liste)
With Sheets(Liste(Cptr))
MsgBox "nous travaillons sur la feuille " & Liste(Cptr)
'..........
End With
Next
End Sub


 Michel
0
Landry85 Messages postés 94 Date d'inscription mardi 5 novembre 2013 Statut Membre Dernière intervention 16 octobre 2017 2
11 oct. 2017 à 23:26
Bonsoir Michel et merci pour ta réponse.

Je me torture l'esprit depuis une semaine pour adapter ce principe mais je n'y arrive pas...
En fait mon but :
Quand l'USF est ouvert, on entre dans la combo1 une valeur (exp: "1796") cette valeur indique donc que les combobox2, 3, 4 et 5 seront alimentées respectivement par les colonnes A, B, C, D de la feuille "1796"

Si la valeur de la combo1 avait été "RENAULT" elles auraient été alimenté par les colonnes A,B,C,D de la feuille "RENAULT".

J'avais bien pensé à créer des listes mais je vais avoir des centaines de feuilles avec à chaque fois les mêmes colonnes A,B,C,D. donc des des centaines de listes... l'horreur :-D
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
12 oct. 2017 à 09:39
Bonjour,

Ce n'est pas du tout la m^me question...

sans ^tre péjoratif, tu sembles te perdre dans ce que tu veux faire. donc, prend une feuille et exprime ce que tu veux faire clairement et précisément, une sorte de faux cahier des charges et reviens nous voir
en attendant

petite remarque: si tu as des centaines de feuilles peut-^tre penser après ces définitions à Access

En attendant:
Mettre le classeur sans données confidentielles en pièce jointe sur « mon-partage.fr »
et faire un clic coller le raccourci dans votre message



0
Landry85 Messages postés 94 Date d'inscription mardi 5 novembre 2013 Statut Membre Dernière intervention 16 octobre 2017 2
16 oct. 2017 à 18:27
Merci Michel, je ne me suis pas perdu dans ce que je voulais faire, mais il est parfois difficile d'expliquer clairement...ou ça nous paraît clair mais ça ne l'est pas.
J'ai trouvé ma solution.
Merci de t'être interessé à ma demande :-)
0