Erreur 380 combobox sans doublon
Bonjour,
En essayant de remplir une ComboBox2 sans doublon a "l'initialize" de mon Userform, cela m'indique une erreur 380.
J'ai un evenement ComboBox2_Change() qui semble provoquer ce bug.
Pour le contourner j'ai tente de faire en sorte que l'evenement change ne se passe pas tant que l'userform intialize n'etait pas fini mais cela ne semble pas marcher.
Je vous mets le fichier en piece jointe si vous voulez le regarder. L'userform concerne devrait s'ouvrir en cliquant sur "Linienbericht lesen" si le code marchait.
merci
Salut Poulu,
Drôle de façon de gérer les doublons, pas étonnant que tu as une erreur
Voici la façon correcte de gérer les doublons
Private Sub UserForm_initialize()
Dim Cel As Range, Rng As Range, MonDico As Object
' Créer l'instance de Dictionnay
Set MonDico = CreateObject("Scripting.Dictionary")
' Avec la feuille
With Sheets("datenbank")
' Définir la zone des valeurs avec dernière cellule remplie
Set Rng = .Range("B5", .Range("B" & Rows.Count).End(xlUp))
' Pour chaque cellule
For Each Cel In Rng
' En cas d'erreur on continue
On Error Resume Next
' Ajouter la valeur au dictionaire
If Cel.Value <> "" Then MonDico.Add Cel.Value, ""
' Si pas d'erreur = ce n'est pas un doublon
If Err.Number = 0 Then
' Ajouter la valeur de la cellule à la comobox
ComboBox2.AddItem Cel.Value
End If
' Effacer toute trace d'erreur
Err.Clear
Next
End With
On Error GoTo 0
'Addiert ComboBox_schicht
With ComboBox3
.AddItem "1"
.AddItem "2"
.AddItem "3"
End With
'Speichert die Daten in tab_donnees / Enregistrement des valeurs dans le tableau
i = 0
While Sheets("datenbank").Cells(i + 5, 2).Value <> ""
For j = 0 To 80
tab_donnees(i, j) = Sheets("datenbank").Cells(i + 5, j + 2).Value
Next
i = i + 1
Wend
demarage = 1
End Sub
Je n'ai pas optimisé la suite de ton code, mais ça fonctionne
A+
Bonjour
@ BrunoM45
La méthode employée par Poulu est une méthode que j'utilise et qui fonctionne très bien mais ..... avec une ComboBox
Poulu a placé (intentionnellement ou par erreur) la propriété Style sur fmStyleDropDownList (et a "transformé" cette ComboBox en ListBox)
Et avec une ListBox cette méthode n'est pas valable
Si tu places cette propriété sur fmStyleDropDownCombo tu n'auras pas de plantage
Merci bien,
Plutot que de changer tout mon code je vais preferer supprimer la propriete "listbox" de ma combobox (que j'avais bien cree intentionnelement
Je retiens vos solutions pour la suite!
thx
Bonjour
Bien que je ne vois pas trop l'utilité de cette propriété
Pourquoi ne pas la modifier à la fin de l'initialisation de la ComboBox
Private Sub UserForm_initialize()
i = 5
While Sheets("datenbank").Cells(i, 2) <> ""
ComboBox2 = Sheets("datenbank").Cells(i, 2)
If ComboBox2.ListIndex = -1 Then ComboBox2.AddItem Sheets("datenbank").Cells(i, 2)
i = i + 1
Wend
Me.ComboBox2.style = fmStyleDropDownList
Je n'y avais pas pense thx.
Je gardais cette propriete pour que l'utilisateur ne puisse pas rentrer de valeur dans la combobox et qu'il soit bien oblige de la selectionner dans la liste (J'aurais pu choisir une Listbox mais en choisissant la combobox, j'ai pu copier coller tout un ancien code...).
Salut Banzai64
Banzai64 a écrit :La méthode employée par Poulu est une méthode que j'utilise et qui fonctionne très bien mais ..... avec une ComboBox
Poulu a placé (intentionnellement ou par erreur) la propriété Style sur fmStyleDropDownList (et a "transformé" cette ComboBox en ListBox)
Et avec une ListBox cette méthode n'est pas valable
Si tu places cette propriété sur fmStyleDropDownCombo tu n'auras pas de plantage
Je ne connaissais pas cette méthode, qui ma fois me parait logique
sauf que si tu ne connais pas la bonne propriété et bien tu es embêté
En tout cas je mets ça dans mes tablettes, plutôt que d'utiliser Dictionnary
Au plaisir