Supprimer les doublons dans un Combobox VBA
Bonjour à tous et bonne année !
Dans mon fichier Excel, j'ai un tableau avec des numéros de ticket. Certains apparaissent en double pour de bonnes raisons.
Cependant, je souhaiterais qu'il n'apparaisse qu'une seule fois la référence dans la liste déroulante de mon COmbobox.
EN revanche, dans mon fichier, le code semble ne pas sappliquer aux objets. Quelqu'un qui en sait plus que moi sur le sujet pourrait-il me donner une piste afin que je puisse éclaircir ceci au plus vite ?
Mon code :
Private Sub UserForm_Initialize()
Dim D As Integer
For D = 5 To Range("I10").End(xlUp).Row
Me.Cbx_ticket = Range("I" & D)
If Me.Cbx_ticket.ListIndex = -1 Then Me.Cbx_ticket.AddItem Range("I" & D)
Next D
End SubMerci à tous pour votre aide.
Bonjour,
Je ne voudrai pas être désagréable : On a tous débuté un jour bien sur, mais c'est assez bordélique hein ?
Cette ligne est en cause :
For D = 5 To Range("I10").End(xlUp).Row
'remplacer par :
For D = 5 To .Range("I" & .Rows.Count).End(xlUp).RowTon fichier restructuré (un peu...)
Le tableau structuré à été renommé TData... Le combo aussi...
Pitié : plus de underscore !
Bonjour galopin,
Désolé pour ma réponse tardive, j'ai pris un peu de temps pour regarder comment tu avais restructuré les choses afin d'apprendre.
Je te remercie pour ta solution qui marche super bien (c'est noté pour les underscore
Maintenant, ce que j'avais essayé de faire en supprimant les doublons était une solution de rechange à l'idée que j'avais au départ.
Si tu as encore un peu de temps, ton avis/conseil m'aiderait à avancer.
Mon objectif était qu'à partir du formulaire du second bouton, celui concerné par ton dernier code, on puisse sélectionner les données d'une ligne en rouge et indiquer dans la case "used", yes/no, avec enfin l'inscription automatique de la date du jour dans "Date of return". J'avais trouvé un code qui fonctionnait bien pour une ligne avec un numéro de ticket unique. A la fin, la ligne était remplie et devenait verte.
Maintenant, si, sur un même bon de retour tu as plusieurs éléments (autant de doublons que d'éléments par bon de retour), mon code ne remplit qu'une seule des lignes. J'ai par conséquent penser à créer une zone de liste comme pour le bon de sortie (CommandButton1). On choisirait en haut un numéro de ticket et on ajouterait tous les éléments dans la zone en répondant à la question "used" au cas par cas avant de valider.
Je sais maintenant créer un Combobox sans doublons, je sais créer une zone de liste et je sais écrire un code qui ne fonctionne que sur une ligne contenant un unique numéro de ticket.
Le code en question :
Dim k As Long
If Me.Cbx_ticket.ListIndex >= 0 Then
'Ask for validation
If MsgBox("Voulez-vous valider le DT ?", vbYesNo) = vbYes Then
'Display information in database DT
With Sheets("DT")
k = WorksheetFunction.Match(Cbx_ticket, .Range("I:I"), 0)
.Range("H" & k) = Cbx_used
.Range("K" & k) = CDate(Now())
End WithComment pourrais-je donc ajouter les différents éléments du même numéro de ticket en disant à VBA de garder par exemple DT-026 en référence et me permettre d'ajouter dans la zone de liste tous ces éléments ?
Je ne sais pas si je suis très clair, ça me paraît compliqué pour moi, c'est pourquoi j'avais de mon côté (fichier initial et non celui que je t'ai envoyé) gardé que 3 éléments dans mon CommandButton 2 : DT, affichage auto du client et de la date de sortie.
Si par magie ou plus par expérience tu avais une idée, tu résoudrais le problème principal de mon tout premier projet VBA.
Merci et bonne soirée à toi.
DeepBlue
Bonjour Galopin,
Finalement, je pense faire plus simple. Existe-t-il une instruction permettant d'affecter du contenu à toutes les cellules de même référence ?
Je m'explique, puis-je indiquer à VBA de mettre la date du jour à toutes les cellules contenant le même numéro de ticket ?
Donc pour DT-026, mettre la date sur toutes les lignes avec ce numéro ?
Voici le code que j'ai pour l'instant :
Private Sub CommandButton2_Click()
Dim k As Long
If Me.Cbx_ticket.ListIndex >= 0 Then
'Ask for validation
If MsgBox("Voulez-vous valider le DT ?", vbYesNo) = vbYes Then
'Display information in database DT
With Sheets("DT")
k = WorksheetFunction.Match(Cbx_ticket, .Range("I:I"), 0)
.Range("K" & k) = CDate(Now())
End WithCela devrait clore mon problème.
Merci et bonne soirée.
Bien cordialement,
C'est compliqué...
Autant je peux répondre volontiers à une question simple "Supprimer les doublons en VBA"; Autant tes nouvelles questions me laissent sans voix
Un UserForm, surtout comme il est monté sert à Rechercher, Visualiser, Modifier, Supprimer un Enregistrement.
Pour modifier une série de lignes pas besoin d'UserForm : Les commandes d'Excel suffisent !
A quoi bon passer une semaine à bricoler un UserFom pas possible pour faire un boulot que tu ferais en un instant avec un simple filtre ?
A+
Bonjour Galopin,
Je te remercie pour ta réponse qui me permet de progresser un peu plus sur Excel/VBA.
En effet, c'est un peu compliqué et il est plus simple de passer directement par Excel.
Passe une bonne journée.
Bien cordialement,