IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Ordre alphabétique dans une listbox [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Points : 8
    Points
    8
    Par défaut Ordre alphabétique dans une listbox
    Bonjour à tous,

    Je récupère des informations d'un tableau à l'aide d'une list box.
    J'aimerais que ces informations soient rangées par ordre alphabétique.

    Je ne sais pas comment faire.

    J'y arrive pour une combobox, mais pas pour la listbox

    Merci d'avance

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Bonjour,
    il y a un classeur dans ce topic qui fait ce que tu demande
    (Dans le Initialise de l'Userform.)
    A+

  3. #3
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Merci !!!!

  4. #4
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Euh j'ai de nouveau un problème,

    En faite dans ma listbox je récupère des lignes dans un tableau, dès que je veux ranger par ordre alphabétique, je n'est que la première colonne qui se range, les autres colonnes elles restent fixent et donc les lignes se mélangent et deviennent fausse.

    Qu'est-ce que je dois changer pour trier par ordre alphabétique les lignes et non pas uniquement les cases de la première colonne?
    Voila ce que j'utilise.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    With lt_result 
        For i = 0 To .ListCount - 1
            For j = 0 To .ListCount - 1
                If UCase(.List(i)) < UCase(.List(j)) Then
                    temp = .List(j)
                    .List(j) = .List(i)
                    .List(i) = temp
                End If
            Next j
        Next i
    End With

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Quand tu met un exemple de code oublie pas les balises code...
    Sélectionner la partie code et cliquer sur # dans l'éditeur de message.
    Pour ton Prob..
    Copie ce code dans un module public..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Sub TrierListMultiColonne(LstBx As ListBox)
    Dim i As Integer, B As Boolean, e As Integer
    Dim TB
    Reco:
        With LstBx
            For i = 0 To LstBx.ListCount - 2
                If .List(i) > .List(i + 1) Then
                    For e = 0 To .ColumnCount - 1
                        TB = .List(i, e)
                        .List(i, e) = .List(i + 1, e)
                        .List(i + 1, e) = TB
                    Next e
                    B = True
                End If
            Next i
            If B Then B = False: GoTo Reco
        End With
    End Sub
    Et à l'endroit où tu avais mis le code que tu montre (que tu supprime)
    tu met..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TrierListMultiColonne lt_result
    J'ai pas tester, si problème tu dis, je ferais un test pour mise au point.
    A+

  6. #6
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Euh je l'ai insérer, mais il y a un problème, je ne sais pas c'est quoi !
    J'ai essayé de trouvé tout seul, mais non j'y arrive pas.....

    J'ai du mal à comprendre ce que c'est les listcount et les columncount et à quoi ça sert!
    Et quand tu mets à la déclaration de ton sub (lxt_box as listbox) c'est pourquoi?


    P.S. Au faite merci beaucoup, à chaque fois tu me règles mes problèmes

  7. #7
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Un mot de syntaxe que tu ne connais pas ?? tu doubleClic dessus (mettre en surbrillance) et tu tape F1 !!
    Pour l'erreur !! faudrait savoir quoi et ou ?

  8. #8
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Merci pour l'info

    Alors pour l'erreursj'ai un message qui s'affiche qui me dit erreur 13 incompatibilité de type, et il me mets la ligne qui appel la fonction en surbrillance.

    Est-ce que tu vois ce que ça peut-être?

  9. #9
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    J'ai essayé de changer le Goto par d'autres boucles, mais ça ne fonctionne toujours pas!

    Je ne sais pas pourquoi!

    Est-ce qu'il faut appeler la fonction à un endroit bien précis?

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Citation Envoyé par par le gugus qu'est pas mort
    Est-ce qu'il faut appeler la fonction à un endroit bien précis?
    A quel moment remplis-tu ta liste ? Dans Userform_initialize ? Si oui, hé bien c'est juste après, toujours dans Userform_initialize.
    Si c'est dans Userform_activate, c'est pareil

  11. #11
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Bé c'est ce que j'ai fait, mais ça ne fonctionne pas !

  12. #12
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Remets-nous ton code tel qu'il est sans rien changer...

  13. #13
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    Sub TrierListMultiColonne(LstBx As ListBox)
    Dim i As Integer, B As Boolean, e As Integer
    Dim TB
    Reco:
        With LstBx
            For i = 0 To LstBx.ListCount - 2
                If .List(i) > .List(i + 1) Then
                    For e = 0 To .ColumnCount - 1
                        TB = .List(i, e)
                        .List(i, e) = .List(i + 1, e)
                        .List(i + 1, e) = TB
                    Next e
                    B = True
                End If
            Next i
            If B Then B = False: GoTo Reco
        End With
    End Sub
     
     
    Private Sub CommandButton1_Click()
    Dim TB
    Dim lig As Long, derlig As Long, i As Integer, j As Integer
     
        Label10.Visible = False 'cacher le commentaire
     
        TB = Array(CB_Groupe, CB_Style, CB_region, CB_Dep, CB_Ville, CB_Pop) 'créer une liste d'élément
     
        Lt_result.Clear 'vider la listbox de résultat
     
        With Sheets("Feuil1")
            derlig = .Cells(65536, 1).End(xlUp).Row 'créer une collection de cellules
            For lig = 5 To derlig 'on boucle de la ligne 3 à la fin
                For i = 0 To UBound(TB)
                    If TB(i) <> "Tous" Then
                        If TB(i) <> .Cells(lig, i + 1) Then Exit For
                    End If
                Next i
                If i > UBound(TB) Then
                'Mettre la ligne trouvée dans la listBox
                Lt_result.AddItem
                    For i = 0 To 5:
                        Lt_result.List(Lt_result.ListCount - 1, i) = .Cells(lig, i + 1)
                    Next i
                End If
            Next lig
            End With
     
            TrierListMultiColonne Lt_result
     
            If Lt_result.ListCount = 0 Then Label10.Visible = True
     
    End Sub
    C'est pas la totalité du fichier, mais c'est la partie qui ne fonctionne pas.

    Lorsque l'erreur survient, c'est l'appel de la fonction qui se met en surbrillance. mais je pense que le problème vient de la fonction tierlistmuliticolonne elle même.

    Merci pour ton aide

  14. #14
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    As-tu essayé le pas à pas ?
    Procède ainsi :
    Place l'instruction stop après "remplissage" de la liste, avant l'appel à TrierListMultiColonne
    Exécute la macro d'ouverture de l'userform
    La macro va s'arrêter sur le stop.
    Pour poursuivre l'exécution pas à pas, frappe F8 qui fait avancer d'une instruction.
    Là, ça t'indiquera la ligne de l'erreur. Tu nous l'indiques.

    Si l'erreur survient lors de l'appel de TrierListMultiColonne sans entrer dans la macro, mets-nous le code de Userform_Initialize pour qu'on vérifie tes déclarations et l'appel.
    A+

  15. #15
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Citation Envoyé par punkisnotdead Voir le message
    Merci pour l'info

    Alors pour l'erreursj'ai un message qui s'affiche qui me dit erreur 13 incompatibilité de type, et il me mets la ligne qui appel la fonction en surbrillance.

    Est-ce que tu vois ce que ça peut-être?

    Où tu à mis la macros?
    Et il est vrais que le code "For e = 0 To .ColumnCount - 1" ne s'inscrit pas automatiquement, probable que c'est encore un des mystères d'excel
    Tu a combien de colonne dans ta listBox ?

  16. #16
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Je pense avoir trouvé mon erreur...
    essaye en remplacant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If .List(i) > .List(i + 1) Then
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If .List(i, 0) > .List(i + 1, 0) Then
    Mais fort probable que ce n'est pas cette erreur que tu a en premier, erreur 13 ? vérifie que tu met bien le nom de la listbox, Pas de parenthèse, pas de guillemet. juste un espace.
    A+

  17. #17
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par LeForestier Voir le message
    Tu a combien de colonne dans ta listBox ?

    J'ai 6 colonnes dans la llistbox.
    Je vais essayé ce que vous m'avez dit et je vous tiens au courant

    Hey,

    Je viens d'essayer un peu tout ce que vous m'avez proposé.
    Alors lorsque je fais le pas à pas, je ne rentre pas dans la foonction triermulticolonne. le programme bug dès l'appel de la fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    '''''''''''''''''''''''''''''''''''''''''''''''''''''
    '''''Ranger les résultats par ordre alphabétique'''''
    Sub TrierListMultiColonne(LstBx As ListBox)
    Dim i As Integer, B As Boolean, e As Integer
    Dim TB
    Reco:
        With LstBx
            For i = 0 To LstBx.ListCount - 2
                If .List(i) > .List(i + 1) Then
                    For e = 0 To .ColumnCount - 1
                        TB = .List(i, e)
                        .List(i, e) = .List(i + 1, e)
                        .List(i + 1, e) = TB
                    Next e
                    B = True
                End If
            Next i
            If B Then B = False: GoTo Reco
        End With
    End Sub
     
     
    Private Sub CommandButton1_Click()
    Dim TB
    Dim lig As Long, derlig As Long, i As Integer, j As Integer
     
        Label10.Visible = False 'cacher le commentaire
     
        TB = Array(CB_Groupe, CB_Style, CB_region, CB_Dep, CB_Ville, CB_Pop) 'créer une liste d'élément
     
        Lt_result.Clear 'vider la listbox de résultat
     
        With Sheets("Feuil1")
            derlig = .Cells(65536, 1).End(xlUp).Row 'créer une collection de cellules
            For lig = 5 To derlig 'on boucle de la ligne 3 à la fin
                For i = 0 To UBound(TB)
                    If TB(i) <> "Tous" Then
                        If TB(i) <> .Cells(lig, i + 1) Then Exit For
                    End If
                Next i
                If i > UBound(TB) Then
                'Mettre la ligne trouvée dans la listBox
                Lt_result.AddItem
                    For i = 0 To 5:
                        Lt_result.List(Lt_result.ListCount - 1, i) = .Cells(lig, i + 1)
                    Next i
                End If
            Next lig
            End With
     
            'TrierListMultiColonne Lt_result
     
            If Lt_result.ListCount = 0 Then Label10.Visible = True
     
    End Sub
     
     
    Private Sub CommandButton2_Click()
     
    uf_saisie.Show
     
    End Sub
     
     
     
     
     
     
     
    Private Sub userform_initialize()
    Dim i As Integer, B As Boolean, Lg As String, L As Integer
    Dim lig As Long, derlig As Long
        'Positionne le titre
        lbl_titre.Move 0, 0, Me.Width
        'Largeur colonne Lt_result
        L = (Lt_result.Width / 6) - 2
        For i = 0 To 6: Lg = Lg & CStr(L) & ";": Next i
        Lt_result.ColumnWidths = Lg
     
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    '''''''''''''''''Remplir les combobox'''''''''''''''''''''
        With Sheets("Feuil1")
            derlig = .Cells(65536, 1).End(xlUp).Row
            For lig = 3 To derlig
                CB_Groupe.AddItem .Cells(lig, 1)
                If .Cells(lig, 3) <> "" Then
                    CB_region.AddItem .Cells(lig, 3)
                End If
                If .Cells(lig, 4) <> "" Then
                    CB_Dep.AddItem .Cells(lig, 4)
                End If
                If .Cells(lig, 5) <> "" Then
                    CB_Ville.AddItem .Cells(lig, 5)
                End If
            Next lig
        End With
     
        With Sheets("style")
            i = 4
            While .Cells(i, 2) <> ""
                CB_Style.AddItem .Cells(i, 2)
                i = i + 1
            Wend
            i = 4
            While .Cells(i, 4) <> ""
                CB_Pop.AddItem .Cells(i, 4)
                i = i + 1
            Wend
        End With
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Voila le bout de programme avec le useform initialise.
    Merci pour l'aide
    A+

  18. #18
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Bon, cherche plus, j'ai testé et trouvé l'erreur
    1°) Outils >> Références et cocher (si ce ne l'est pas)
    Mictosoft Forms X.X Object Librairy
    2°) Remplace la macro par celle-ci, et pour contenter Ousk, j'ai remplacé le GOTO
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Sub TrierListMultiColonne(LstBx As msforms.ListBox)
    Dim i As Integer, B As Boolean, e As Integer
    Dim TB
        With LstBx
            Do
                B = False
                For i = 0 To LstBx.ListCount - 2
                    If .List(i) > .List(i + 1) Then
                        For e = 0 To .ColumnCount - 1
                            TB = .List(i, e)
                            .List(i, e) = .List(i + 1, e)
                            .List(i + 1, e) = TB
                        Next e
                        B = True
                    End If
                Next i
            Loop While B = True
        End With
    End Sub
    Et comme ça, ça fonctionne.
    A+

  19. #19
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    ok!

    C'est nickel ça fonctionne complétement trop bien, t'es un champion champion

  20. #20
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    C'est résolu et ça fonctionne!
    une petite question (si je ne suivais pas bien); pourquoi ne pas se limiter à trier la source de données (issues d'une plage X d'une feuille N) de la listbox?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [DATA] Classer les variables par ordre alphabétique dans une table
    Par alers dans le forum SAS Base
    Réponses: 5
    Dernier message: 11/03/2015, 14h40
  2. Réponses: 1
    Dernier message: 08/08/2012, 11h39
  3. [AC-2007] Ordre alphabétique dans une requête qui calcule les E/S par mois
    Par Kisty10 dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 07/05/2011, 18h47
  4. Ordre alphabétique dans une liste déroulante
    Par Z[ee]k dans le forum Access
    Réponses: 2
    Dernier message: 30/05/2006, 15h02
  5. Icône a coté du texte dans une ListBox
    Par joce3000 dans le forum C++Builder
    Réponses: 6
    Dernier message: 05/12/2003, 02h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo