Tri Alphabétique Combobox après import ACCESS

RaceX

XLDnaute Junior
[Résolu] Tri Alphabétique Combobox après import ACCESS

Bonjour à tous,

Je développe actuellement une application basé sur une base de données ACCESS.

Je récupère le contenu de plusieurs tables dans des combobox multicolonnes. Je souhaiterais pourvoir trier par ordre aphabétique le contenu des combobox.

Voici un extrait de code:

Code:
m = 0
    With TableMatiere
        .MoveLast
        LastRecord = .Fields("N°IndexMatiere")
        .MoveFirst
        FirstRecord = .Fields("N°IndexMatiere")
        For n = FirstRecord To LastRecord
            .FindFirst ("N°IndexMatiere=" & n)
            If .NoMatch Then GoTo Suivant
                Fiche.ListFicheMatiereSelect.AddItem .Fields("N°IndexMatiere")
                Fiche.ListFicheMatiereSelect.Column(1, m) = .Fields("Designation")
                m = m + 1
                ......................
            Next
Suivant:
        Next
    End With

Actuellement le combobox est rempli par ordre croissant de l'index de ma table. Je souhaiterais réorganiser le combobox avec critère de tri la colonne 1.

Comment m'y prendre?

Merci par avance de vos conseils.
 
Dernière édition:

RaceX

XLDnaute Junior
Re : Tri Alphabétique Combobox après import ACCESS

En y réfléchissant plus je me dis qu'il faudrait envoyer le contenu de ma table dans une variable tableau et ensuite alimenter le combobox depuis cette variable en effectuant une recherche alphabétique. J'y suis ou non :confused:

Merci.
 

RENAUDER

Nous a quitté
Repose en paix
Re : Tri Alphabétique Combobox après import ACCESS

Bonjour,

Tu peux également rapatrier tes données Access d'une table temporaire créée via une requête et demander un tri sur la colonne qui t'intéresse.
Il a pas mal de bidouille à faire mais cela doit être possible.
par ex.
SELECT EchangesFournis.*, EchangesFournis.CodeOp
FROM EchangesFournis
ORDER BY EchangesFournis.CodeOp;
 
Dernière édition:

RaceX

XLDnaute Junior
Re : Tri Alphabétique Combobox après import ACCESS

Hmmm l'idée de la requête me semble bonne. Il ne me resterait plus qu'à récupérer le résultat de la requête sous la forme d'un RecordSet et alimenter mon combobox. Je regarde ça demain et te tiens au courant.

Merci pour les conseils.
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Tri Alphabétique Combobox après import ACCESS

Bonjour,

Code:
 Private Sub UserForm_Initialize()
  'Microsoft ActiveX DatObject 2.8 doit être coché
  ChDir ActiveWorkbook.Path
  Dim rs As ADODB.Recordset
  Set cnn = New ADODB.Connection
  cnn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=Access2000.mdb"
  Set rs = cnn.Execute("SELECT nom_client FROM Client ORDER BY nom_client")
  Me.Choix.List = Application.Transpose(rs.GetRows)
  rs.Close
  cnn.Close
  Set rs = Nothing
  Set cnn = Nothing
End Sub

JB
 

Pièces jointes

  • Access2000.zip
    25.9 KB · Affichages: 51
  • Access2000.zip
    25.9 KB · Affichages: 51
  • Access2000.zip
    25.9 KB · Affichages: 49
Dernière édition:

RENAUDER

Nous a quitté
Repose en paix
Re : Tri Alphabétique Combobox après import ACCESS

Bonsoir Jacques,
Dans le prolongement de mon idée, je pense que j'aurai trouvé une astuce ou combine mais il y a une ligne que je n'aurais pas trouvé (et pourtant je l'ai déjà vu mais je ne m'en rappelle plus, c'est l'age !!!) et merci de remémorer ça à ma mémoire :
Me.Choix.List = Application.Transpose(rs.GetRows)
Très intéressant car ça simplifie énormément.

Dés demain je teste mais je te fais confiance.
C'est super avec la communauté d'intervenants de ce forum de s'entraider, de se remettre en cause car toutes les idées proposées sont sources de progression ou de découverte et finalement permet de se remettre en cause en en permanence.
 

RaceX

XLDnaute Junior
Re : Tri Alphabétique Combobox après import ACCESS

Bonjour à tous,

Merci pour vos réponses. Je viens de tester la méthode de BOISGONTIER qui fonctionne parfaitement. J'aimerais juste savoir comment alimenter correctement mon combobox multicolonne avec cette technique car pour le moment la colonne Désignation est bien triée mais les colonnes suivantes me sortent des résultats eronnées.

Code:
Fiche.ListMatiere.Clear

'Microsoft ActiveX DataObject 2.8 doit être coché
rep = "C:\Documents and Settings\sebastien\Bureau"
Dim rs As ADODB.Recordset
Set cnn = New ADODB.Connection
cnn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & rep & "\Fiche de Prix DB.mdb"
Set rs = cnn.Execute("SELECT Matiere.N°IndexMatiere, Matiere.Designation, Matiere.Unite, Matiere.PrixUnitaire, Matiere.Coeff FROM Matiere ORDER BY Matiere.Designation;")
Fiche.ListMatiere.List = Application.Transpose(rs.GetRows)
rs.Close
cnn.Close
Set rs = Nothing
Set cnn = Nothing

Mon combobox est initialisé de cette façon

Code:
With Fiche.ListMatiere
    .ColumnCount = 5
    .ColumnWidths = "0;295;40;90;40"
End With

Pour infos:

Column 0 --> N°IndexMatiere
Column 1 --> Matiere.Designation
Column 2 --> Matiere.Unite
Column 3 --> Matiere.PrixUnitaire
Column 4 --> Matiere.Coeff

Merci par avance de votre aide précieuse.
 
Dernière édition:

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Tri Alphabétique Combobox après import ACCESS

Bonjour,

L'écriture de la requête peut être simplifiée:

Set rs = cnn.Execute("SELECT N°IndexMatiere, Designation,Unite,PrixUnitaire, Coeff FROM TypeMatiere ORDER BY Designation,Unite")


Eventuellement des [] si noms de champ avec caractères spéciaux ou espaces([N°] e.g.)

JB
 

RaceX

XLDnaute Junior
Re : Tri Alphabétique Combobox après import ACCESS

Autant pour moi. J'ai fait une erreur. Cela fonctionne parfaitement. Maintenant il me reste à régler un problème de conversion de nombre décimaux sous ACCESS. Par exemple le nombre 0,9 sort en 0,899999976158142.

Merci pour votre aide précieuse.