combox en cascade qui ne se remplit pas

arthur83fr

XLDnaute Nouveau
bonjour,
me voici avec mes petits problèmes sur lesquels je séche
j'avoue avoir essayer plein de trucs mais je comprends pas et n'arrive pas a solutionner.

usf1 me permet saisie nom prenom ville etc

a partir de mon usf1, une fois le nom et prenom saisi, je fais un test pour savoir si plusiers occurences existent, j'arrive a alimenter le combobox1(ville) de l'usf12,

usf12 me permet choix ville et adresse si plusieurs occurences (nom et prenom) existent

j'affiche le usf12, je peux choisir la ville dans combobox1(ville) mais par contre je n'arrive pas a afficher les choix dans combobox2(adresse1) liste vide

et c'est la que je séche
si vous pouviez me donner un petit coup de main je vous en serais reconnaissant

je precise que je me suis inspiré du code de Silkyroad pour alimenter mes combobox

partie du code usf1 :

Code:
' test de remplissage automatique
 
Private Sub TextBox3Prenom_AfterUpdate()
 
Dim c As Range
Dim Lig As Long
Dim VarNomPrenomVille As String
Dim VarNomPrenom As String
Dim cDest As Range
Dim LastLig As Long
Dim DerLig As Long
Dim DerLig2 As Long
 
VarNomPrenomVille = TextBox2Nom.Value + TextBox3Prenom.Value + TextBox21Ville.Value
VarNomPrenom = TextBox2Nom.Value + TextBox3Prenom.Value
 
With Worksheets("DoublonsTemp")
    ' effacement données temporaires des données clients en doublon sur 100 lignes
    .Range("A2:P100").ClearContents
    ' cdest : la cellulle de destination : premiere cellule vide de la colonne A de la feuille "DoublonsTemp"
    Set cDest = .Cells(.Rows.Count, "A").End(xlUp)(2)
End With
 
With Worksheets("Temp2")
    ' effacement données temporaires sur 100 lignes
    .Range("A2:B100").ClearContents
End With
 
With Worksheets("Clients")
    ' on va copier dans feuille "DoublonsTemp" toute les lignes de la feuille clients
    ' dont la colonne K VarNomPrenom correspond au nom + prenom entrés dans usf1 "nouvelle vente"
 
    ' on enlève éventuel filtre automatique
    .AutoFilterMode = False
    ' LastLig  ligne de la derniere cellule remplie de la colonne K (NomPrenom) de la feuille "Clients"
    LastLig = .Cells(.Rows.Count, "K").End(xlUp).Row
    ' on fait un filtre automatique sur la colonne K de la feuille "Clients" avec comme critère VarNomPrenom
    .Range("K1:K" & LastLig).AutoFilter field:=1, Criteria1:=VarNomPrenom
    ' si au moins une ligne résultat du filtre (en plus de la ligne1 des titres)
    If .Range("K1:K" & LastLig).SpecialCells(xlCellTypeVisible).Count > 1 Then
        With .Range("K2:K" & LastLig).SpecialCells(xlCellTypeVisible).EntireRow
            ' on copie toutes les lignes visibles vers cDest (sauf la ligne des titres)
            .Copy cDest
        End With
    End If
    ' on enlève éventuel filtre automatique
    .AutoFilterMode = False
End With
 
'oooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
 
With Worksheets("DoublonsTemp")
 
' test si cellule B2 est vide alors
' sortie de la procedure de remplissage automatique
    If IsEmpty(.Range("B2")) Then
       MsgBox ("RA0")
       Exit Sub
 
' test si cellule B2 n'est pas vide et si cellule B3 est vide alors
' appel procedure RA1
    ElseIf Not IsEmpty(.Range("B2")) And IsEmpty(.Range("B3")) Then
        MsgBox ("RA1")
        Call RA1
 
' test si cellule B2 n'est pas vide et si cellule B3 n'est pas vide alors
' appel procedure RA2
    ElseIf Not IsEmpty(.Range("B2")) And Not IsEmpty(.Range("B3")) Then
        MsgBox ("RA2")
        Call RA2
 
    End If
 
End With
 
End Sub
 
Private Sub RA1()
 
Dim c As Range
Dim Lig As Long
Dim VarNomPrenom As String
 
VarNomPrenom = TextBox2Nom.Value + TextBox3Prenom.Value
 
With Worksheets("Clients")
Set c = .Columns(11).Find(VarNomPrenom, LookIn:=xlValues, lookat:=xlWhole)
    If Not c Is Nothing Then
        Lig = c.Row
        Me.TextBox18Adresse1 = .Range("F" & Lig)
        Me.TextBox19Adresse2 = .Range("G" & Lig)
        Me.TextBox20CodePostal = .Range("H" & Lig)
        Me.TextBox21Ville = .Range("I" & Lig)
        Me.TextBox4TelFixe = .Range("E" & Lig)
        Me.TextBox5TelMobile = .Range("E" & Lig)
    End If
Set c = Nothing
End With
 
End Sub
 
Private Sub RA2()
 
' je remplis les label Nom et prenom de Usf12
UserForm12.Label6.Caption = UserForm1.TextBox2Nom.Value
UserForm12.Label7.Caption = UserForm1.TextBox3Prenom.Value
 
' supprime donés existantes dans les combobox 1 et 2 de usf12
    UserForm12.ComboBox1.Clear
    UserForm12.ComboBox2.Clear
 
' je determine la derniere ligne de la colonne I (ville) de la feuille "DoublonsTemp"
'With Worksheets("Doublonstemp")
    'DerLig = .Cells(.Rows.Count, "I").End(xlUp).Row
'End With
 
' copie des colonnes I Ville et F Adresse1 de la feuille "DoublonsTemp"
' dans les colonnes A Ville et B Adresse1 de la feuille "Temp2"
' pour alimenter en cascade les combobox 1 et 2 de usf12
Worksheets("DoublonsTemp").Range("I2:I100").Copy Worksheets("Temp2").Range("A2")
Worksheets("DoublonsTemp").Range("F2:F100").Copy Worksheets("Temp2").Range("B2")
 
' tri des données de la feuille "Temp2" critère Ville ascendant
With Worksheets("Temp2")
    .Range("A2:B100").Sort Key1:=.Range("A2"), Order1:=xlAscending, Key2:=.Range("B2"), Order2:=xlAscending, Header:=xlGuess
End With
 
'Définit la feuille contenant les données pour alimenter les combobox de usf12
With Worksheets("Temp2")
 
    Dim NbLignes As Integer
    Dim i As Integer
    'Dim Plage As String
    'Dim Cell As Range
    'Dim Var1 As Integer
    Dim Varcbx1 As String
    Dim j As Integer
 
    'Définit le nombre de lignes dans la colonne A
    NbLignes = .Range("A65536").End(xlUp).Row
 
    'Remplissage du ComboBox1 de usf12
    ' avec filtrage des doublons en en laissant une occurence
    ' il en découlera le remplissage de combobox2 usf12     le code dans le usf12
 
    For i = 2 To Sheets("Temp2").Range("A65536").End(xlUp).Row
    UserForm12.ComboBox1 = Sheets("Temp2").Range("A" & i)
    If UserForm12.ComboBox1.ListIndex = -1 Then UserForm12.ComboBox1.AddItem Sheets("Temp2").Range("A" & i)
    Next i
 
End With
 
' on supprime éventuel filtre auto sur la feuille "Clients"
With Worksheets("Clients")
    .AutoFilterMode = False
End With
 
'affichage de usf12
UserForm12.Show
 
End Sub


code de usf12 :

Code:
Option Explicit
 
Dim Ws As Worksheet
Dim NbLignes As Integer
 
 
Private Sub CommandButton1_Click()
 
End Sub
 
Private Sub CommandButton1Valider_Click()
 
' on rempli les textbox de usf1 par les valeurs de combobox de usf12
UserForm1.TextBox21Ville.Value = UserForm12.ComboBox1.Value
UserForm1.TextBox18Adresse1.Value = UserForm12.ComboBox2.Value
 
' on supprime éventuel filtre sur feuille "Clients"
Worksheets("Clients").AutoFilterMode = False
 
' on ferme le usf12
UserForm12.Hide
 
End Sub
 
Private Sub UserForm_Initialize()
    'Définit la feuille contenant les données
    Set Ws = Worksheets("Temp2")
    '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 Combo3
    'Alim_Combo 3, ComboBox2.Value
'End Sub
 
 
'Private Sub ComboBox3_Change()
 
 
    'Remplissage Combo4
    'Alim_Combo 4, ComboBox3.Value
'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 = 2 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 = 2 To NbLignes
            If 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

merci d'avance pour votre aide
 

arthur83fr

XLDnaute Nouveau
Re : combox en cascade qui ne se remplit pas

bonjour,

alors voila si j'ai mis ces bouts de code qui je l'admet sont longs c'est pour vous situer le pb
si j'avais juste posé la question sans support, nombre d'entre vous auraient réclamé ce code
maintenant je peux poster le fichier complet pour ceux qui auraient envie de me donner un petit coup de main


fichier sur demande
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : combox en cascade qui ne se remplit pas

Re,

Strictement aucune explication (ni mode d'emploi) sur le fichier qui est du genre usine à gaz.

Comme vous ne faites aucun effort pour nous aider le moins du monde, basta.

XLD n'est pas un supermarché.

A+
 

arthur83fr

XLDnaute Nouveau
Re : combox en cascade qui ne se remplit pas

bonjour,

je suis désolé si je n'ai pas dévellopé la ligne conductrice de mon programme.
pour ce qui est de l'usine à gaz, je concois que mon code pourrait certainement être plus clair et concis
mais je fais mes débuts en vba
d'autre part je ne suis pas hyper calé en vba sinon ce n'est pas moi qui poserais les questions mais j'y répondrais.

Explications

mon probleme actuel se situe au niveau d'un test de remplissage automatique a partir de l'usf1 "Nouvelle Vente" bouton sur feuille Acceuil


ecran de demarrage sur onglet Acceuil
clic sur bouton "Nouvelle vente" (ouverture usf1)
saisie du nom et prénom
test si la variable nom+prenom existe dans la feuille "Clients"
-si pas occurence trouvée on continue la saisie ville, cp,adresse, etc
-si une occurence trouvée appel procedure RA1 qui effectue remplissage auto des champs de usf1 a partir des données de la feuille "Clients"
-si plusieurs occurences trouvées, recopie des données correspondantes a la variable nom+prenom de la feuille "Clients dans la feuille "DoublonsTemp", appel procedure RA2
recopie des données ville et adresse1 de la feuille "DoublonsTemp" dans la feuille "Temp2" ce afin de pouvoir alimenter la combobox2 de usf12
le combobox1 de usf12 est alimenté a partir de la procedure RA2
le code de usf12 est censé alimenter la combobox2 "Adresse1" a partir des données de la feuille "Temp2" en fonction de la valeur de la combobox1 "Ville"

donc si plusieurs MARTIN Jacques habitent plusieurs villes, la usf12 combobox1 "Ville" me donne le choix de celle ci
et si dans cette meme ville plusieurs Martin Jacques, la usf12 combobox 2 "Adresse1" doit me donner le choix de l'adresse

c'est cette derniere qui me pose problème car elle ne m'affiche qu'un seul champ vide alors qu'il devrait avoir plusieurs choix possible

voila, j'espère avoir été assez explicatif
un petit coup de main merci d'avance
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 897
Membres
101 833
dernier inscrit
sandra25