Re : débugage userform vba
Re Dranreb,
je suis justement tombé sur ton tuto d'OutIdx, et les commentaires des stars du Vba qui ton posé énormément de questions alors vu mon niveau de débutant en vba...
En fait, l'ordre du choix va se faire d'abord par pays, puis par département puis par client. Car en lisant une discussion sur le forum (avec toi et Robert notamment) j'ai justement cru comprendre que cela posait prob et qu'on ne pouvais pas faire de trie "aisément". Je continue à lire le fil de ton post sur OutIdx (petite question : tu parles d'une mise à jour, mais je ne vois pas de nvx fichier ou je me trompe peut-être, j'ai pas fini de lire le post..... de 3 pages)
Je vais essayer de m'inspirer d'un code de Robert :
Private f As Object 'déclare la variable f (onglet Fournisseurs)
Private test As Boolean 'déclare la variable test
Private Sub UserForm_Initialize()
Dim mondico As Object 'déclare la variable mondico
Dim c As Range 'déclare la variable c
Set f = Sheets("FOURNISSEURS")
Set mondico = CreateObject("Scripting.Dictionary")
For Each c In f.Range("F2:F" & f.Cells(Application.Rows.Count, 6).End(xlUp).Row)
mondico(c.Value) = ""
Next c
Me.ComboBox36.List = mondico.keys
With Sheets("fournisseurs")
ComboBox1.List = .Range("a2:a" & .Range("a65536").End(xlUp).Row).Value
TextBox4 = "contacts"
TextBox5 = "téléphone"
TextBox6 = "fax"
TextBox45 = "mail"
End With
End Sub
Private Sub ComboBox36_Change()
Dim mondico As Object
Set mondico = CreateObject("Scripting.Dictionary")
With f
.Activate
test = True 'définit la variable test
Me.ComboBox1.Clear
TextBox4 = ""
TextBox5 = ""
TextBox6 = ""
TextBox45 = ""
For Each c In f.Range("F2:F" & f.Cells(Application.Rows.Count, 6).End(xlUp).Row)
If c = Me.ComboBox36 Then Me.ComboBox1.AddItem c.Offset(0, -5)
Next c
End With
Me.ComboBox1.SetFocus 'place le curseur dans la ComboBox1
test = False 'redéfinit la variable test
End Sub
Private Sub ComboBox1_Change()
Dim r As Range 'définit la variable r (Recherche)
Dim pa As String 'définit la variable pa (Premi1ere Adresse)
Dim ent As Integer 'définit la variable ent
If test = True Then Exit Sub 'si test est vrai, sort de la procédure
Set r = f.Columns(6).Find(Me.ComboBox36.Value, , xlValues, xlWhole) 'définit la recherche r
If Not r Is Nothing Then 'condition 1 : si il existe au moins une occurrence trouvée
pa = r.Address 'définit l'adresse de la première occurrence
Do 'exécute la boucle
If r.Offset(0, -5).Value = Me.ComboBox1 Then 'condition 2 : si la cellule en colonne A de l'occurrence trouvé est égale à la valeur de la ComboBox1
ent = r.Row 'définit la variable ent
GoTo suite 'va à l'étiquette "suite" (sans rechercher les occurrences suivantes...)
End If 'fin de la condition 2
Set r = f.Columns(6).FindNext(r) 'redéfinit la recherche r (occurrence suivante)
Loop While Not r Is Nothing And r.Address <> pa 'boucle tant qu'il existe de nouvelles occurrences ailleurs qu'en pa
End If 'fin de la condition 1
suite: 'étiquette
TextBox4 = Sheets("fournisseurs").Cells(ent, 2) 'contacts'
TextBox5 = Sheets("fournisseurs").Cells(ent, 3) 'téléphone'
TextBox6 = Sheets("fournisseurs").Cells(ent, 4) 'fax'
TextBox45 = Sheets("fournisseurs").Cells(ent, 5) 'mail'
With Sheets("demande")
.Range("l13").Value = ComboBox1.Value 'fournisseurs'
.Range("q17").Value = TextBox5.Value 'telephone'
.Range("r17").Value = TextBox6.Value 'fax'
.Range("l16").Value = TextBox4.Value 'contact'
.Range("l20").Value = TextBox45.Value 'email'
.Range("l18").Value = Range("s17").Value
End With
End Sub
--------------
J'aime bien la lecture, mais quand y'a trop de code inconnu c'est pas évident