Générer la liste d'un ComboBox avec des valeurs uniques Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
M
Manu31
Membre habitué
Membre habitué
Messages : 107
Inscrit le : 14 mars 2014
Version d'Excel : 2007 FR

Message par Manu31 » 30 avril 2018, 16:01

Salut,

Je suis en train d'écrire une macro pour gérer des entrées en stock. Je voudrais que, quand l'opérateur renseigne la référence à rentrer en stock dans un ComboBox, la liste associée soit mise à jour en temps réel avec les références uniques déjà connues dans le stock.

J'ai écrit le code suivant :

Private Sub ComboBox1_Change()

Nb_item = ComboBox1.ListCount - 1 'Remise à 0 de la liste du ComboBox existante
On Error Resume Next
For i = Nb_item To 0 Step -1
ComboBox1.RemoveItem (i)
Next i

For i = 8 To Nb_Lignes + 8
Trouve = True
If ComboBox1 <> "" And InStr(1, Workbooks(Stock).Sheets("Stocks").Cells(i, 6), ComboBox1, 1) > 0 Then 'Si la saisie dans le ComboBox est comprise dans la référence
For j = 0 To ComboBox1.ListCount - 1
If Workbooks(Stock).Sheets("Stocks").Cells(i, 6) = ComboBox1.List(j) Then 'Si la référence en cours est déjà listée dans le ComboBox
Trouve = False
Exit For
End If
Next j
If Trouve = True Then ComboBox1.AddItem Workbooks(Stock).Sheets("Stocks").Cells(i, 6)
End If
Next i
Label1 = ComboBox1.ListCount 'Comptage du nombre de références présentes dans la liste du combobox

'Mettre à jour la liste déroulante ouverte (ne fonctionne pas encore)
If Trouve = True Then
ComboBox1.Enabled = False
ComboBox1.Enabled = True
ComboBox1.SetFocus
ComboBox1.DropDown
Else
ComboBox1.Enabled = False
ComboBox1.Enabled = True
ComboBox1.SetFocus
End If

End Sub


Ca marche bien pour les premières références de la liste. A partir de la 13ème référence unique (154ème ligne du stock sur un peu plus de 700), ça reporte toutes les références existantes en doublon.

Si vous avez une explication, je prends...

Merci d'avance.

Manu
U
U. Milité
Membre impliqué
Membre impliqué
Messages : 1'590
Appréciations reçues : 93
Inscrit le : 30 novembre 2016
Version d'Excel : Office 365

Message par U. Milité » 30 avril 2018, 16:28

Bonjour Manu,
Manu31 a écrit :
30 avril 2018, 16:01
Si vous avez une explication, je prends...
Et moi je répondrais: "si tu as un fichier exemple, on prend aussi!"
Tant qu'à faire, explique, au travers d'un exemple (ou deux) ce que tu veux qu'il se passe et dans quel(s) cas

PS: on n'a pas besoin des 700 références, ni du contenu des autres colonnes (en tout cas, si j'ai compris -au moins- une partie)
Avatar du membre
galopin01
Passionné d'Excel
Passionné d'Excel
Messages : 6'308
Appréciations reçues : 144
Inscrit le : 18 septembre 2008
Version d'Excel : 2016
Téléchargements : Mes applications

Message par galopin01 » 30 avril 2018, 16:37

Bonjour,
Tout cela me semble incompréhensible et bien compliqué.
La méthode générale de remplissage d'un combo sans doublon est :
ComboBox1.Clear 'remise à zéro
    For j = 1 To Range("A65536").End(xlUp).Row
        ComboBox1 = Range("A" & j) 'récupère les données de la colonne A
        '...et filtre les doublons
        If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem Range("A" & j)
    Next j
Pour une réponse adaptée à ton classeur joindre ton fichier. (même observation que U.Milité)
|k)
M
Manu31
Membre habitué
Membre habitué
Messages : 107
Inscrit le : 14 mars 2014
Version d'Excel : 2007 FR

Message par Manu31 » 30 avril 2018, 18:01

Voilà le fichier, j'ai juste reporté l'état du stock existant dans un onglet alors qu'il est sur un autre fichier normalement.

Du coup la routine de mise à jour de la liste déroulante fonctionne alors qu'elle ne fonctionne pas avec le fichier séparé.

Galopin, ta méthode ne fonctionne pas, je l'avais déjà essayée. Elle bloque Excel comme si c'était une boucle sans fin.

Manu
Classeur1.xlsm
(95.79 Kio) Téléchargé 22 fois
M
Manu31
Membre habitué
Membre habitué
Messages : 107
Inscrit le : 14 mars 2014
Version d'Excel : 2007 FR

Message par Manu31 » 30 avril 2018, 19:29

C'est bon j'ai trouvé.

Certaines références sont constitués de chiffres uniquement, d'autres de caractères alphanumériques. Quand la référence est un nombre, elles est mémorisée en tant que chaine de caractères.

Et donc quand on fait la comparaison à l'occurrence suivante, elle apparait inconnue et est ajoutée à la liste du ComboBox, en tant que texte.

J'ai juste modifié If CStr(Workbooks(Stock).Sheets("Stocks").Cells(i, 6)) = ComboBox1.List(j) et ça marche.

Manu
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message