Tri ComboBox en ordre alphabétique

Bonjour à tous,

J'ai travaillé sur un fichier avec un membre de ce forum que je remercie encore pour avoir passé du temps à m'aider (lermite).

Je joins le fichier en pièce jointe c'est un fichier test)

J'ai donc des ComboBox qui permettent de choisir des éléments tirés du grand tableau (base de données).

Le code VBA est déjà réalisé, il faudrait juste ajouter de quoi voir les listes dans les ComboBox triée par ordre alphabétique de A à Z.

Suivant le critère de recherche sélectionné à droite, il suffit de sélectionner d'abord dans la CB1 , une fois le choix fait, le ou les choix possible(s) dans a CB2 appait(ssennt), il faudrait trier cela aussi, et ainsi de suite.

J'ai trouvé sur google des parties de code qui permettent le tri mais je n'arrive pas à l'incorporer à mon fichier.

Si quelqu'un aurait la compétence nécéssaire je suis preneur !

Bonne journée.

110eliot-retour7.zip (32.02 Ko)

Up svp

Re up

Re,

Je pense que tu ne comprend pas bien la difficulté.

Si tu change l'ordre dans les combo, il ne correspondront plus aux N° de ligne.

Pour quel raison tu ne peu pas trier ta feuille ? ce serait quand même plus simple.

A+

PS : Envoyer un MP pour éventuellement être aider ça va mais alors met au moins l'URL de la discutions que tu a ouverte.

Oui pardon pour ne pas avoir mis l'URL.

Alors le tri sur la feuille est en effet beaucoup plus simple, mais il y a des noms (du style "De saint sulpice") qui sont classés en fonction du deuxième mot:

Pour reprendre De saint sulpice, c'est classé à S.

Et il y en a plusieurs comme ceci. Donc ça fausse le classement dans la CB .

Or le but est d'avoir un tri clair pour que la recherche soit rapide étant donné qu'il y a un peu plus de 500 lignes.

Si je reprend ton exemple.. "De saint sulpice" , que ce soit sur la feuille ou avec une procédure de tri ce serra toujours pareil.

lermite a écrit :

Si je reprend ton exemple.. "De saint sulpice" , que ce soit sur la feuille ou avec une procédure de tri ce serra toujours pareil.

Je viens de trier les sociétés pour vérifier ton info et ça se met bien en place.: ceux qui gênent dans la CB sont bien à l'endroit où il faut.

Le probllème c'est que si je laise le tri sur la colonne sociétés, les banques et les codes eux ne le seront pas.

Or il faudrait que les 3 le soient dans chacune des combobox

OK, je vais voir, mais ça va pas être évident

lermite a écrit :

OK, je vais voir, mais ça va pas être évident

Ouaip, mais te conaissant ça devrait le faire

Tu t'en sors ou c'est le chantier ?

Reviens voir dans huit jours.. l'impatience est un vilain défaut

lermite a écrit :

Reviens voir dans huit jours.. l'impatience est un vilain défaut

C'est pas vraiment de l'impatience, c'est surtout que je bosse dessus donc j'actualise très souvent

J'ai trouvé ça sinon, ça vaut le coup de passer du temps à voir si ça peut marcher je pense:

http://boisgontierjacques.free.fr/pages_site/Dictionnaire.htm#AlimenterListe

Jacques Boisgontier est un super crack mais je me débrouille pas mal aussi.. fallait juste le temps de tout mettre en place.

Avec cerise sur le gateau.. trier les alphaNumérique en ordre logique du genre Code 22 est plus grand que Code 3

Voir explications détaillées.

Pour éviter d'avoir un bouton en plein milieu de la BD et aussi pour avoir accès au formulaire quelque soit la position des colonnes, cliquer sur la ligne 1 remplace le bouton.

Si tu adapte ce système pour l'original voir le code dans le module de la feuille.

Sinon mettre la variable LigDeb = 2 dans l'initialisation du UF.

Comme d'hab, fais les tests et tu dis.

A+

221eliot-retour8.zip (48.70 Ko)

Sérieux.....

Comment tu fais ?!

C'est juste mission impossible , même avec les sites que j'ai trouvé. Pour appliquer les codes ça va jamais ça correspond pas à ce que j'ai particulièrement.

Et toi tu le sors comme ça

Par contre j'ai une erreur:

Do While Cmp(Ml, TBCB(Ag)): Ag = Ag + 1: Loop
Do While Cmp(TBCB(Ad), Ml): Ad = Ad - 1: Loop

Ca me met que Cmp n'est pas définie quand j'intègre le code à mon fichier original. (Cmp surligné en bleu)

Et

Sub Trier(ByRef TBCB, AdG, AdD)

est surligné en jaune

Ouupss..J'aurais du te le dire

Dans mon exemple il y a un module BAS supplémentaire avec une fonction Cmp

Dans ton classeur original ->> Insertion ->> Module

Dans ce module tu copie tout le code

Option Explicit

Public Function Cmp(a, b) As Boolean
Dim i As Integer, e As Integer
   If Len(a) = Len(b) Then
        If a > b Then Cmp = True
        Exit Function
    End If
    i = Len(a): e = Len(b)
    Do While IsNumeric(Mid(a, i)) And Mid(a, i) <> " ": i = i - 1: Loop
    Do While IsNumeric(Mid(b, e)) And Mid(b, i) <> " ": e = e - 1: Loop
    If Left(a, i) > Left(b, e) Then Cmp = True: Exit Function
    If Left(a, i) < Left(b, e) Then Exit Function
    If Len(a) - i > Len(b) - e Then Cmp = True: Exit Function
    If Len(b) - i > Len(a) - e Then Exit Function
    If Mid(a, i) > Mid(b, e) Then Cmp = True
End Function

A+

Ca marche impec !

Vraiment merci pour tout.

2 questions néanmoins:

  • Le module que tu as inséré, quelle est son utilité ? C'est pour le tri ?
  • Les deux dernières parties de codes ne sont pas prises en compte ? (dans le sens où je crois que tu m'as mis le code qu'il aurait fallu appliquer avec la méthode du site que je t'ai donné, ou alors j'ai pas compris la fin)

EDIT: Pour être franc, il y a pas mal de choses que je ne comprend pas dans ton nouveau code, donc si tu as une trace des descriptions des lignes (tu sais les phrases du genre 'xxxx explique ce que ça fait' ), je suis preneur, car j'ai 1h30 de dispo et je vais me pencher là dessus

T'est pas fort curieux... voir le lien d'explication que je t'ai mis dans mon poste précédant

Et j'ai pas l'habitude de mettre du code qui sert à rien

lermite a écrit :

T'est pas fort curieux... voir le lien d'explication que je t'ai mis dans mon poste précédant

Et j'ai pas l'habitude de mettre du code qui sert à rien

lol ! avec les modifications de code entre les deux fichiers j'en ai complètement oublié ton lien !!

Je regarde ça.


Ok j'ai vu ton annotation de cours.

Fonction qui peut s'avérer extrèmement utile si du numéraire dans les noms en effet.

Tu es obligé de faire un module à part pour cela ? Pas possible de le mettre directement dans le code principal de l'UF ?

Et qu'appelles-tu par plus lent ? En tout cas pour mon type de fichier ça ne change strictement rien à la rapidité. J'en déduis donc que ça doit être lié à des types de formulaires particuliers

Pour le code à a fin je faisais allusion à ceci :

' Trier par le milieu et mémorise la ligne cible
' Trie les nombres en ordre croissant (ce qu'Excel ne fait pas)
Sub TrierFIN(ByRef TBCB, AdG, AdD)
Dim Ml
Dim Ag, Ad, Buff
    Ml = TBCB((AdG + AdD) \ 2)
    Ag = AdG: Ad = AdD
    Do
        Do While Cmp(Ml, TBCB(Ag)): Ag = Ag + 1: Loop
        Do While Cmp(TBCB(Ad), Ml): Ad = Ad - 1: Loop
        If Ag <= Ad Then
          Buff = TBCB(Ag): TBCB(Ag) = TBCB(Ad): TBCB(Ad) = Buff
          Buff = TL(Ag): TL(Ag) = TL(Ad): TL(Ad) = Buff
          Ag = Ag + 1: Ad = Ad - 1
        End If
    Loop While Ag <= Ad
    If Ag < AdD Then Call TrierFIN(TBCB, Ag, AdD)
    If AdG < Ad Then Call TrierFIN(TBCB, AdG, Ad)
End Sub

' Trier par le milieu ,suivant une idée de Jacques Boisgontier
' Trie les nombres en ordre croissant (ce qu'Excel ne fait pas)
Sub Trier(ByRef TBCB, AdG, AdD)
Dim Ml
Dim Ag, Ad, Buff
    Ml = TBCB((AdG + AdD) \ 2)
    Ag = AdG: Ad = AdD
    Do
        Do While Cmp(Ml, TBCB(Ag)): Ag = Ag + 1: Loop
        Do While Cmp(TBCB(Ad), Ml): Ad = Ad - 1: Loop
        If Ag <= Ad Then
          Buff = TBCB(Ag): TBCB(Ag) = TBCB(Ad): TBCB(Ad) = Buff
          Ag = Ag + 1: Ad = Ad - 1
        End If
    Loop While Ag <= Ad
    If Ag < AdD Then Call Trier(TBCB, Ag, AdD)
    If AdG < Ad Then Call Trier(TBCB, AdG, Ad)
End Sub
  • Soit c'est ça qui organise le tri et j'ai donc pas compris
  • Soit le tri est géré par autre chose et c'est une manière différente de le faire dans ce cas j'ai compris dans les grande lignes

Tu es obligé de faire un module à part pour cela ? Pas possible de le mettre directement dans le code principal de l'UF ?

Tu peu le mettre dans le module de l'UF (sans Option Explicit bien entendu)

Comme c'est une fonction générique je la met dans un module Bas comme ça elle peu être employée dans tout le classeur et pas uniquement dans l'UF

Et brève explications sur ta question précédente.

1°) ont crée un tableau sans doublon avec les fonctions faireList1,.. 2 et 3 suivant le cas.

2°) Ont trie ces tableaux avec

a) Trier : qui trie uniquement le contenu de Tablo

b) TrierFIN qui trie Tablo mais également le tableau TL qui permet de retrouver la ligne où sont situées les données.

EDIT: Pour être franc, il y a pas mal de choses que je ne comprend pas dans ton nouveau code, donc si tu as une trace des descriptions des lignes (tu sais les phrases du genre 'xxxx explique ce que ça fait' ), je suis preneur, car j'ai 1h30 de dispo et je vais me pencher là dessus

Négatif, je devrais mettre plus de lignes d'explications que de ligne de code.

Tu à, pour essayer de comprendre, ...

a) Double clic sur un mot de syntaxe pour le mettre en surbrillance --> F1

b) Les points d'arrêt sur le code pour voir "ce qu'il y a dans les variables"

c) apprendre à debbuger du code.

A+

Comme c'est une fonction générique je la met dans un module Bas comme ça elle peu être employée dans tout le classeur et pas uniquement dans l'UF

Ok je comprend mieux là.

Ok pour le reste.

Est-il possible d'avoir les annotations sur les lignes de code comme la dernière fois que j'aille bosser ça ?

Rechercher des sujets similaires à "tri combobox ordre alphabetique"