Classé les éléments d'une liste déroulante par ordre alphabétique

Talzatior

XLDnaute Occasionnel
Bonjour amis XLDiens ;)

Je me tourne vers vous en ce jour, car le grand Jour arrive bientôt ;)
En effet, bientôt je pourrais vous présenter mon projet et vous pourrez me faire vos remarques à son sujet ;)

J'ai juste une question pour améliorer mes deux listes déroulantes de sélection de clients ou de fournisseurs ...
En effet, cette liste déroulante cherche ses infos dans ma bdd access que je complète au fur et à mesure de l'acquisition de nouveaux clients ou fournisseurs ... Et forcément, dans ma liste, au final, pour retrouver un client ou un fournisseur, quand ce n'est pas classé par ordre alphabétique, c'est la galère ;)

Existe-t-il un moyen de classer ces données pour que ma liste soit plus aisée d'utilisation ??

Merci à vous les champions, je n'aurais jamais pu finaliser mon projet et me mettre au vba sans votre aide ;)

A bientôt ;)
Talzatior.
 

CBernardT

XLDnaute Barbatruc
Re : Classé les éléments d'une liste déroulante par ordre alphabétique

Bonjour Talzatior et le forum,

Des solutions existent déjà sur le forum, mais pour une aide directe, un échantillon de ton projet serait le bien venu pour éviter une mauvaise interprétation de tes explications.

Cordialement

Bernard
 

Talzatior

XLDnaute Occasionnel
Re : Classé les éléments d'une liste déroulante par ordre alphabétique

Très bien ;)

Alors vous trouverez un échantillon de ce que j'ai fait, une feuille de commande ... Sur cette feuille de commande, j'ai un bouton "Choisir un fournisseur" qui fait appel à un bdd access que vous pouvez trouver dans le répertoire bd.

Dans cette Base access, je saisis au fur et à mesure mes fournisseurs ... Et j'aimerais qu'au final, ces fournisseurs soient classés par ordre alphabétique dans la liste déroulante de mon UF ...

Il faut que les deux fichiers .zip soient décompressés dans le même répertoire ;)

Voilà le fichier :
 

Pièces jointes

  • bd.zip
    16 KB · Affichages: 92
  • bd.zip
    16 KB · Affichages: 93
  • bd.zip
    16 KB · Affichages: 89
  • commande.zip
    44.7 KB · Affichages: 82
  • commande.zip
    44.7 KB · Affichages: 83
  • commande.zip
    44.7 KB · Affichages: 81

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Classé les éléments d'une liste déroulante par ordre alphabétique

Bonjour,

Utiliser ADO ou DAO

Exemples:

Code:
Private Sub UserForm_Initialize()
    'cocher Microsoft DAO 3.6 dans Outils/Références
    Dim bd As Database
    Dim rs As Recordset
    Set bd = OpenDatabase(ActiveWorkbook.Path & "\access2000.mdb")
    Set rs = bd.OpenRecordset("Select * From Client Order By Nom_Client")
    Do While Not rs.EOF
        Me.choix.AddItem rs!nom_client
        rs.MoveNext
    Loop
End Sub


Code:
Private Sub UserForm_Initialize()
  repertoire = ThisWorkbook.Path & "\"
  Set cnn = CreateObject("ADODB.Connection")
  Set rs = CreateObject("ADODB.Recordset")
  cnn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & repertoire & "Access2000.mdb"
  Set rs = cnn.Execute("SELECT nom_client FROM Client ORDER BY nom_client")
  Me.ComboBox1.List = Application.Transpose(rs.GetRows)
End Sub

JB
 
Dernière édition:

Talzatior

XLDnaute Occasionnel
Re : Classé les éléments d'une liste déroulante par ordre alphabétique

Merci à toi, ton code me paraît compréhensible ... Mais moi je ne suis malheureusement pas encore assez avancé pour savoir où le placer dans mon code ...
Je ne sais pas où placer la commande "Order By CLT_Raison_Social" (si je ne m'abuse ...) ...

Voici le code de mon UF :
Code:
Option Explicit

Private idClt As Long

Public Sub initUFrm()

    With UFChoixClients
        .Caption = "Choisir un client"
    End With
    
    initCboClient
    
End Sub

Private Sub initCboClient()
Dim vrai As Boolean

    With UFChoixClients
        .CboClient.Clear
        Call ModBddCLients.initTableClient
        vrai = ModBddCLients.LirePremier
        While vrai = True
            .CboClient.AddItem ModBddCLients.sClient.CLT_Raison_Social
        vrai = ModBddCLients.LireSuivant
        Wend
    End With
    
End Sub

Public Sub AfficheClient()

    With UFChoixClients
        ModBddCLients.SearchItemByRaisonSocial (.CboClient.Text)
        .lblAdresse.Caption = ModBddCLients.sClient.CLT_Adr1 & vbCrLf & ModBddCLients.sClient.CLT_Adr2 & vbCrLf & _
                            ModBddCLients.sClient.CLT_Code_Postal & "    " & ModBddCLients.sClient.CLT_Ville
    End With
    
End Sub

Public Sub valider()
Dim ws As Worksheet

    Set ws = Worksheets("suivi affaire")
    
    With ws
        .Range("F9").Value = ModBddCLients.sClient.CLT_Raison_Social
        .Range("F10").Value = ModBddCLients.sClient.CLT_Adr1
        .Range("F11").Value = ModBddCLients.sClient.CLT_Adr2
        .Range("F12").Value = ModBddCLients.sClient.CLT_Code_Postal & "    " & ModBddCLients.sClient.CLT_Ville
    End With
End Sub

Je ne suis paaaaas un boulet ;)

Merci par avance ;)
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Classé les éléments d'une liste déroulante par ordre alphabétique

[nom du fournisseur] doit être entre [] (voir le concepteur de la BD et lui dire de ne jamais utiliser des noms de champs avec le caractère espace).

Non testé

Code:
Private Sub UserForm_Initialize()
  repertoire = ThisWorkbook.Path & "\"
  Set cnn = CreateObject("ADODB.Connection")
  cnn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & repertoire & "xxxx.mdb"
  Set rs = cnn.Execute("SELECT [nom du fournisseur] FROM Fournisseurs ORDER BY [nom du fournisseur]")
  Me.CboFour.List = Application.Transpose(rs.GetRows)
  Set rs=Nothing
  Set cnn=Nothing
End Sub

JB
 

Talzatior

XLDnaute Occasionnel
Re : Classé les éléments d'une liste déroulante par ordre alphabétique

Je ne m'en sors décidément pas ...

Je ne sais où placer ce code, ni comment l'utiliser au sein du mien ...

Sinon, ce n'est pas grave, je chercherai une autre solution, à force je trouverai bien ;)

Merci pour tes informations, malheureusement je ne peux les exploiter telles que ...
A bientôt ;)
 

Talzatior

XLDnaute Occasionnel
Re : Classé les éléments d'une liste déroulante par ordre alphabétique

Bon, j'essaie, je ne sais pas si j'ai juste ou non ...

Voilà ce que j'ai fait (peut-être du grand n'importe quoi, mais intuitivement, c'est ce qui m'a paru le plus "logique" ...) :

Code:
Private Sub initCboClient()
Dim vrai As Boolean
Dim cnn As Connection
Dim rs As Recordset

    With UFChoixClients
        .CboClient.Clear
        Call ModBddCLients.initTableClient
        vrai = ModBddCLients.LirePremier
        While vrai = True
            .CboClient.AddItem ModBddCLients.sClient.CLT_Raison_Social
        vrai = ModBddCLients.LireSuivant
        Wend
            Set cnn = CreateObject("ADODB.Connection")
            cnn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & ThisWorkbook.Path & "\bd\" & "Suivi_affaire.mdb"
            Set rs = cnn.Execute("SELECT [CLT_Raison_Social] FROM Clients ORDER BY [CLT_Raison_Social]")
            Me.CboFour.List = Application.Transpose(rs.GetRows)
            Set rs = Nothing
            Set cnn = Nothing
    End With
    
End Sub

Que ce soit juste ou faux, j'ai un souci avec la ligne
Code:
Me.CboFour.List = Application.Transpose(rs.GetRows)

Il me dit : "Erreur de compilation : Utilisation incorrecte du mot clé Me"

Me suis-je totalement planté ? Si oui ... je ne sais plus que faire ... Si non, comment corriger cette erreur ... ?

Merci mille fois ;)
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Classé les éléments d'une liste déroulante par ordre alphabétique

Testé

Code en placer dans le formulaire:

Code:
Private Sub UserForm_Initialize()
  repertoire = ThisWorkbook.Path & "\"
  Set cnn = CreateObject("ADODB.Connection")
  cnn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & repertoire & "suivi_affaire.mdb"
  Set rs = cnn.Execute("SELECT [FOUR_Raison_Social] FROM Fournisseurs  ORDER BY [FOUR_Raison_Social]")
  Me.CboFour.List = Application.Transpose(rs.GetRows)
  Set rs = Nothing
  Set cnn = Nothing
End Sub

JB
 

Pièces jointes

  • Copie de commande.zip
    41.7 KB · Affichages: 95
Dernière édition:

Talzatior

XLDnaute Occasionnel
Re : Classé les éléments d'une liste déroulante par ordre alphabétique

Coucou Boisgontier !!

Je reviens après quelques jours d'indisponibilités, et je vois ta réponse ... grâce au fichier joint que tu as mis, j'ai pu trouver qu'effectivement on pouvait coder sur le formulaire même, ce que j'ignorai !!

Je te remercie mille fois pour ton aide précieuse qui me retire une bonne épine du pied ;)

A très bientôt le forum ;)

Talzatior.
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 326
Membres
103 179
dernier inscrit
BERSEB50