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

Encore des problème de présentation de combobox tri alphabétique & suppr des doublons

Zoub

XLDnaute Nouveau
Bonjour à tous,

je débute dans l'utilisation de combobox et je butte sur un sujet qui a déjà été largement traité mais ou je n'arrive pas à mettre en applications les différentes solutions qui ont été présentées.

Dans un fichier de suivi de stock je souhaite simplement effectuer un tri en activant un filtre sur le nom de fournisseurs. Jusque la pas de soucis j'arrive à récupérer les infos depuis une combobox placées sur un userform et a effectuer le tri.

Pour simplifier le choix du nom du fournisseur je veux que les noms proposés dans la combobox soient classés par ordre alphabétique (sans tenir compte des majuscule et minsucules) et je veux supprimer les doublons car un fournisseur peut m'envoyer plusieurs produits. Je ne veux pas effectuer de tri alphabétique directement dans le tableau source.

J'ai bien vu les solutions proposées sur le sujet mais depuis ce matin je ne réussi pas à les intégrer.

Si quelqu'un peut me venir en aide et m'expliquer la logique a appliquer dans ce traitement ça m'aiderai beaucoup

En pièce jointe l'idée de base sur laquelle je ne parviens pas à ajouter le tri des données avant de les inclure dans la combobox

merci d'avance
 

Pièces jointes

  • combobox classé sans doublons.xls
    55 KB · Affichages: 28
  • combobox classé sans doublons.xls
    55 KB · Affichages: 29
  • combobox classé sans doublons.xls
    55 KB · Affichages: 29

youky(BJ)

XLDnaute Barbatruc
Re : Encore des problème de présentation de combobox tri alphabétique & suppr des dou

Salut zoub,
voici la macro dans ce fichier
Vide rowsource de combobox3 en propriété
A voir si cela te conviens
Bruno
 

Pièces jointes

  • combobox classé sans doublons.xls
    72 KB · Affichages: 35
  • combobox classé sans doublons.xls
    72 KB · Affichages: 39
  • combobox classé sans doublons.xls
    72 KB · Affichages: 39

Zoub

XLDnaute Nouveau
Re : Encore des problème de présentation de combobox tri alphabétique & suppr des dou

Salut Bruno,

c'est exactement ce que je voulais ca marche nickel par conter peux-tu me faire un petit topo sur le programme (je sais j'abuse un peu mais je préfère comprendre pour pouvoir me débrouiller au prochain tour plutôt que de faire un bête copier/coller sans rien saisir du principe...)

Sub selectionne_four()
selection_forunisseur.ComboBox3.Clear

Set dico = CreateObject("Scripting.Dictionary")
For Each c In Feuil1.Range(Feuil1.[D4], Feuil1.[D3].End(xlDown))
If Not dico.Exists(c.Value) And c.Value <> "" Then _
dico.Add c.Value, c.Value
Next c jusqu'a ce niveau c OK je pense avoir compris => on crée un dictionnaire en prenant les valeurs des cellules sous réserve qu'elles ne soient pas déjà ds le dictionnaire et qu'elles ne soient pas nulles.
a = dico.items 'Obtient les éléments
For k = 0 To UBound(a) - 1 'trie éléments
For b = k + 1 To UBound(a)
If a(b) < a(k) Then
temp = a(b)
a(b) = a(k)
a(k) = temp
End If
Next
Next
For k = 0 To dico.Count - 1 'mets éléments
selection_forunisseur.ComboBox3.AddItem a(k)
Next
Cette 2nde partie est beaucoup plus obscure.... je pense qu'il s'agit du tri par ordre alphabétique mais je ne saisi pas l'idée....

selection_forunisseur.Show
End Sub


Merci d'avance de m'apporter ta lumière sachant que l'essentiel est quand même que ca marche.

Merci beaucoup
 

youky(BJ)

XLDnaute Barbatruc
Re : Encore des problème de présentation de combobox tri alphabétique & suppr des dou

C'est bien de pas recopier sans comprendre
Voici qlqs explications (pas facile)
N'hésite pas à mettre des points d'arrêt sur le code et ensuite passe le curseur sur les lignes de code
ou encore affiche la fenêtre d'exécution et tu écris ?b et entrer ou ?a(b) tu peux exécuter ligne par ligne par la touche F8.
Bruno
Code:
Sub selectionne_four()
selection_forunisseur.ComboBox3.Clear 'vide le combo
Set dico = CreateObject("Scripting.Dictionary") 'création dictionnaire
For Each c In Feuil1.Range(Feuil1.[D4], Feuil1.[D3].End(xlDown)) 'boucle de D4 à la dernière ligne
If Not dico.Exists(c.Value) And c.Value <> "" Then _
dico.Add c.Value, c.Value
Next c
a = dico.items 'Obtient les éléments
For k = 0 To UBound(a) - 1 ' Boucle To nbre de valeur du tablo a
'à savoir le tablo commence par l'index 0
 For b = k + 1 To UBound(a)
 'dans la liste le 1er nom est a(0) et le 2eme est a(1)
 '1er passage a(1)<a(0) si oui il faut donner à a(0) la valeur de a(1) et à a(1)la valeur de a(0)
 'ce qui se fait à l'aide de la variable temp pour conserver la valeur et la reécrire ensuite plus avant
 'cela boucle sur tout le tablo et reboucle sur tous les items
   If a(b) < a(k) Then
   temp = a(b) 'comme on va remplacer a(b) on conserve a(b) en temp pour le remettre en a(k)
   a(b) = a(k)
   a(k) = temp
   End If
 Next
Next
For k = 0 To dico.Count - 1 'mets éléments
selection_forunisseur.ComboBox3.AddItem a(k)
Next
selection_forunisseur.Show
End Sub
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Encore des problème de présentation de combobox tri alphabétique & suppr des dou

Bonjour,

Voir pj

Code:
Private Sub UserForm_Initialize()
  Set f = Sheets("Stock Sécurité")
  temp = Application.Transpose(Range("D4:D" & [d65000].End(xlUp).Row))
  Call Tri(temp, LBound(temp), UBound(temp))
  Me.ComboBox3.List = temp
End Sub

Sub Tri(a, gauc, droi) ' Quick sort
  ref = a((gauc + droi) \ 2)
  g = gauc: d = droi
  Do
    Do While a(g) < ref: g = g + 1: Loop
    Do While ref < a(d): d = d - 1: Loop
    If g <= d Then
       temp = a(g): a(g) = a(d): a(d) = temp
       g = g + 1: d = d - 1
    End If
  Loop While g <= d
  If g < droi Then Call Tri(a, g, droi)
  If gauc < d Then Call Tri(a, gauc, d)
End Sub

Les tris et sous-totaux

JB
 

Pièces jointes

  • Copie de combobox classé sans doublons-1.xls
    66 KB · Affichages: 39
Dernière édition:

Zoub

XLDnaute Nouveau
Re : Encore des problème de présentation de combobox tri alphabétique & suppr des dou

Merci Bruno,

c'est déjà plus clair même s'il va falloir que je joue un peu avec ça pour tout saisir mais ça va finir par venir....
Je connaissais déjà la lecture ligne par ligne avec F8 et les points d'arrêts par contre je n'utilisais pas la fenêtre exécution c'est effectivement bien pratique...

merci pour tout ça et bonne soirée.
julien
 

Zoub

XLDnaute Nouveau
Re : Encore des problème de présentation de combobox tri alphabétique & suppr des dou

Bonjour Boisgontier,

Ca marche également. Je dois bien avouer que j'avais vu pas mal de tes solutions sur ce sujet dans d'autres discussions mais que je n'ai pas réussi à les adapter.... Ca dépasse mes petites connaissances, j'ai appris sur le tas et j'ai une fâcheuse tendance a utiliser une très faible partie des possibilités offertes.

Je ne maîtrise absolument pas les fonctions car je n'en ai jusqu'à présent jamais eu besoin.
Du coup du code de type Tri(a, gauc, droi) m'est plutôt hermétique.
Je ne trouve pas l'aide de VB très parlante sur ce type de sujet, il y a t-il qq part un listing des fonctions disponibles avec des exemples d'utilisation?

en tout cas merci pour votre aide, c'est super de pouvoir trouver ce type de soutien quand on débute.

Bonne soirée
 

Zoub

XLDnaute Nouveau
Re : Encore des problème de présentation de combobox tri alphabétique & suppr des dou

Bonjour Boisgontier,

merci pour les liens avec les explications je vais regarder ca calmement mais je pense que ca va grandement me faciliter la vie sur pas mal de chose. Je vais passer pas mal de temps sur les explicatifs que tu as mis sur free.....

merci beaucoup
 

Discussions similaires

  • Résolu(e)
Microsoft 365 Code de tri
Réponses
22
Affichages
728
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…