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 de usf12 :
merci d'avance pour votre aide
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