Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Pb avec combobox

  • Initiateur de la discussion Initiateur de la discussion fabien.wen
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

F

fabien.wen

Guest
Bonjour a tous, je sais que la question a été posée plusieur fois, mais les réponses que j'ai trouvé n'on pas totalement marché pour moi.

Donc voilà ma demande.

sur une feuille excel ("LIQUIDE") j'ai 3 colonne
j'ouvre un userform avec 2 combo et un txtbox
Je voudrais que dans le combo1 il me liste les item de la colonne A sauf la cell A1 et qu'il ne m'affiche pas les doublons (mais il doivent rester sur la feuille)

Je vous joint mon fichier

merci d'avance
 

Pièces jointes

Re : Pb avec combobox

Bonjour fabien.wen,

Voici ton fichier modifié.

Ce n'est sûrement pas une solution optimisée, mais elle fonctionne parfaitement. Il existe des solutions sur le web pour éliminer les doublons dans les listes déroulantes, mais je n'ai pas eu le courage de les chercher.

Ton fichier comportait une erreur : la feuille "LIQUIDE" n'existait pas, j'ai donc renommé la feuille 1.

Espérant avoir répondu.

Cordialement.

Edit : bonjour CHALET53

Bonne utilisation de dictionnaire VBA, c'est la solution que j'évoquais plus haut mais que j'avais "zappée". Bravo à toi.

Cordialement.
 

Pièces jointes

Dernière édition:
Re : Pb avec combobox

Bonjour à tous

Ci dessous un code avec une collection

Code:
Private Sub UserForm_Initialize()
Dim col As New Collection
Dim c As Range, sh As Worksheet
Dim Listdata() As String
Dim i As Long
With Worksheets("Feuil1")
On Error Resume Next
For Each c In .Range("a2:a" & .Range("A" & .Rows.Count).End(xlUp).Row)
    col.Add c, CStr(c)
Next c
    ReDim Listdata(col.Count - 1)
For i = 0 To col.Count - 1
    Listdata(i) = col(i + 1)
Next i
Me.ComboBox1.List = Listdata
End With
On Error GoTo 0
End Sub

En rajoutant une procédure de tri on obtient un combobox avec une liste classée alphabétiquement.

A tester

JP
 
Dernière édition:
Re : Pb avec combobox

Bonjour
La solution avec mes fameuses poupées russes sans doublon
Cordialement

P.S. Vérifiez s'il n'y a pas de référence manquante à décocher.
Étoffez un peu la sécurité du dispositif à l'aide des propriétés Enabled des contrôles.
 

Pièces jointes

Dernière édition:
Re : Pb avec combobox

Merci a tous, je vais regarder ça tres vite.

bebere, je sais que le sujet a été traité plusieur fois, mais impossible de le faire marcher chez moi, je veux dire que souvent et la c aussi le cas avec le code de "jp14" le tri et la suppression de doublon marche, mais lorsque je met une nouvelle entrée dans la colonne "a" cela n'est pas desuite incrementé dans le combo. pourquoi??? je ne sais pas 🙂
 
Re : Pb avec combobox

lorsque je met une nouvelle entrée dans la colonne "a" cela n'est pas desuite incrementé dans le combo
C'est pour ça que dans ma version j'ai remplacé les Me.Hide par Unload Me
Faute de quoi l'UserForm_Initialize n'est pas exécuté lors d'un Show ultérieur de l'UF
À +
 
Re : Pb avec combobox

Bonjour

Ci dessous un code pour
Remplir un combobox ou listbox avec des données sans doublons et triées
Le combobox est mis à jour après l'enregistrement des données si nécessaire.

Code:
Private Sub CommandButton2_Click()
Dim c As Range, sh As Worksheet
........................................................
' remplir les listbox ou combobox après enregistrement
if me.ComboBox1.ListIndex=-1 then RempListCombo Me.ComboBox1, "Feuil1", "a"
...........................................................


Private Sub UserForm_Initialize()
RempListCombo Me.ComboBox1, "Feuil1", "a"
RempListCombo Me.ComboBox2, "Feuil1", "b"
End Sub


Private Sub RempListCombo(Controlebox As MSForms.Control, Feuil As String, Cola As String)
Dim Col As New Collection
Dim c As Range, sh As Worksheet
Dim Listdata() As String
Dim i As Long
Dim M As Long
Dim N As Long
Dim Temp As String

With Worksheets(Feuil)
On Error Resume Next
For Each c In .Range(Cola & "2:" & Cola & .Range(Cola & .Rows.Count).End(xlUp).Row)
    Col.Add c, CStr(c)
Next c
    ReDim Listdata(Col.Count - 1)
For i = 0 To Col.Count - 1
    Listdata(i) = Col(i + 1)
Next i

For N = 0 To UBound(Listdata)
 For M = 0 To UBound(Listdata)
    If Listdata(M) > Listdata(N) Then
       Temp = Listdata(N)
       Listdata(N) = Listdata(M)
       Listdata(M) = Temp
    End If
 Next M
Next N
Controlebox.clear
Controlebox.List = Listdata
End With
On Error GoTo 0
End Sub


A tester

JP
 
Dernière édition:
Re : Pb avec combobox

Je tiens à préciser que ma fonction PaquetSsDbl restera très rapide même pour quelques dizaines de milliers de lignes, et qu'elle garde trace des numéros de lignes relatifs où les valeurs ont été trouvées, ce qui permet d'éviter d'avoir à les ré-chercher après choix.
À+
 
Re : Pb avec combobox

Bonjour

Ci dessous une procédure pour mettre à jour le combobox2 en fonction du combobox1.
Si c'est une nouvelle "saveur" il n'y a pas de recherche, on peut donc l'associer avec une "marque" existante.

Code:
Private Sub ComboBox1_Change()
Dim coll As New Collection
Dim C As Range, sh As Worksheet
Dim Listdata() As String
Dim i As Long
Dim M As Long
Dim N As Long
Dim Temp As String
Dim FirstAddress As String
If ComboBox1.ListIndex = -1 Then Exit Sub


With Sheets("Feuil1")
On Error Resume Next
    With .Range("a1:a" & .Range("a" & .Rows.Count).End(xlUp).Row)
        Set C = .Find(ComboBox1, LookIn:=xlValues, LookAt:=xlWhole)
        If Not C Is Nothing Then
            FirstAddress = C.Address
            Do
                coll.Add C.Offset(0, 1), CStr(C.Offset(0, 1))
                Set C = .FindNext(C)
            Loop While Not C Is Nothing And C.Address <> FirstAddress
        End If
    End With
End With

ReDim Listdata(coll.Count - 1)
For i = 0 To coll.Count - 1
    If coll(i + 1) <> "" Then Listdata(i) = coll(i + 1)
Next i
For N = 0 To UBound(Listdata)
    For M = 0 To UBound(Listdata)
       If Listdata(M) > Listdata(N) Then
          Temp = Listdata(N)
          Listdata(N) = Listdata(M)
          Listdata(M) = Temp
       End If
    Next M
Next N
With Me.ComboBox2
    .Clear
    .List = Listdata
End With


On Error GoTo 0


End Sub

JP
 
Dernière édition:
Re : Pb avec combobox

Je vous remercie tous pour votre rapidité et votre indulgence.

Vous m'avez donné la solution à mon problème.
Encore merci et je reviendrais surement vers vous pour autre chose.

Si un modo peut afficher résolu a la fin de mon sujet c kool... "and the gang"😛

Merci
Fabien
 
Re : Pb avec combobox

J'ai une autre question concernant ce userform.
En fait comme vous avez pu le voir le CB1 affiche et tri les donnée saveur, le CB2 me donne la correspondance celon le resultat du cb1.
La txtbox me sert à donner une note (ca pas de problème), mais je voudrais que si il y a déjà une note sur la feuille la txtbox me l'affiche et c'est là que j'ai un souci, cela marche un peux, mais si je sélectionne en cb1 menthol (qui me renvoie 2 choix en cb2), je sélectionne ensuite un cb2, il ne m'affiche la note que du premier choix, impossible de faire afficher celle du second???

J’espère avoir été assé clair et précis dans ma question
 
Re : Pb avec combobox

Bonjour.
Avec la solution que je vous ai proposée ça marche ?

Questions subsidiaires:
l'UF ne doit il jamais permettre l'ajout de nouvelles lignes ?
La saveur est-elle toujours choisie avant la marque ?
Si c'est le cas et s'il n'y a qu'une marque elle pourrait être proposée d'office ? Voire proposer toujours la 1ère trouvée ?
Avez vous pu sécuriser le tout pour que la note et le bouton valider ne soient utilisables que si les 2 éléments ont été choisis ?
Sinon voulez vous que je vous propose ces ajustements comme je les vois ?

À +
 
Dernière édition:
Re : Pb avec combobox

Bonjour Dranreb et merci, je viens de regarder et lorsque j'utilise ta solution avec ton fichier y a pas de souci.
Par contre si je veux l'integrer dans mon classeur qui contient plusieur feuille, et que je lance la macro, il me liste des élément qui sont sur la premiere page et non sur la page liquide.

* La seule chose c'est que le txtbox doit pouvoir remplir la cellule en colonne c qui correspont au selection de cb1 et cb2.
*Le choix sera toujours saveur -- marque--- note
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
3
Affichages
1 K
Réponses
22
Affichages
2 K
L
Réponses
4
Affichages
2 K
LeDébutantt
L
C
Réponses
4
Affichages
2 K
Compte Supprimé 979
C
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…