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 :

Afficher les données dans une liste déroulante avec un tri croissant [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1 010
    Points : 181
    Points
    181
    Par défaut Afficher les données dans une liste déroulante avec un tri croissant
    Bonjour,

    J'aimerais savoir si c'est possible d'avoir une liste deroulante avec des valeurs triée de façon croissante?

    Je récupère mes données avec une combobox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ComboBox1.AddItem Sheets("Feuil2").Cells(i, 10)
    Bonne soirée

  2. #2
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonsoir,

    Adapte et teste si ça convient :
    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
     
    Private Sub UserForm_Initialize()
     
        Dim Tbl
     
        Tbl = Worksheets("Feuil2").Range("J1:J100") 'adapter la plage
     
        Tri Tbl
     
        Me.ComboBox1.List = Tbl
     
    End Sub
     
     
     
    Sub Tri(Tbl)
     
        Dim Tempo
        Dim I As Integer
        Dim J As Integer
     
            'tri décroissant "<"
            'tri croissant ">"
        For I = 1 To UBound(Tbl) - 1
     
            For J = I + 1 To UBound(Tbl)
     
                If Tbl(I, 1) > Tbl(J, 1) Then
     
                    Tempo = Tbl(J, 1): Tbl(J, 1) = Tbl(I, 1): Tbl(I, 1) = Tempo
     
                End If
     
        Next J, I
     
    End Sub

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1 010
    Points : 181
    Points
    181
    Par défaut
    Bonjour et merci pour le code mais en fait je me suis trompé c'est par ordre alphabetique.....

    Personne n'a de solution......?

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Bonjour ... et donc ?? et le code proposé ne te conviens pas ? qu'est ce qui te gêne dans l'ordre obtenu ?

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1 010
    Points : 181
    Points
    181
    Par défaut Afficher les données dans une liste déroulante avec un tri croissant
    En fait le tri est croissant sur des chiffres alors que moi je veux faire un tri sur du texte....dans un ordre alphabétique...

  6. #6
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut


    tu as testé le code ? montre moi des "valeurs" qui ne sont pas dans l'ordre que tu souhaite..

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1 010
    Points : 181
    Points
    181
    Par défaut Afficher les données dans une liste déroulante avec un tri croissant
    Ah mince désolé en fait ça marche......par contre quand j'ouvre la userform avec la liste déroulante, ça mets un moment à ouvrir. C'est peut être à cause des 5000 lignes qu'il doit traité et remettre dans l'ordre?

  8. #8
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    C'est peut être à cause des 5000 lignes qu'il doit traité et remettre dans l'ordre
    Oui, probablement mais il existe d'autres types de tris plus rapides ou alors, utiliser une feuille cachée, coller les valeurs dans cette feuille, utiliser le tri d'Excel et récupérer une fois trié !

  9. #9
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1 010
    Points : 181
    Points
    181
    Par défaut Afficher les données dans une liste déroulante avec un tri croissant
    Et oui mais la liste déroulante et liée à des données....on clique sur un choix dans la liste déroulante par exemple le nom d'une commune et ensuite apparaît les informations sur cette commune du genre le nombre d'habitant.
    Donc si on fais sur une autre feuille, comment le nom de la commune et les données liées vont se retrouver?

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    juste pour informatisation, un tri se contente d'inverser 2 valeur! Z-A en A-Z! il ne concerne en réalité que 50% des données au grand maximum!

    un tri à double boucle considère que le tableau est toujours parfait désordonné même si il est bien trié!

    (Nb ligne * Nb Ligne) - Nb ligne ! 90 rotation pour 10 ligne! (990 pur 100 L)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Tri(Tbl)
        Dim Tempo
        Dim I As Integer
        Dim J As Integer
            'tri décroissant "<"
            'tri croissant ">"
            For I = 2 To UBound(Tbl)
                If Tbl(I, 1) > Tbl(I - 1, 1) Then
                    Tempo = Tbl(I, 1): Tbl(I, 1) = Tbl(I - 1, 1): Tbl(I - 1, 1) = Tempo
                    I = I - 2
                    If I < 0 Then I = 1
                End If
        Next
    End Sub

  11. #11
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Ce n'est pas ce que j'ai voulu dire !
    On récupère la plage dans le tableau, on transfère cette plage dans la colonne A d'une feuille (ici, pour le test, feuille "Feuil3") qui peut être cachée on tri ces valeurs qui ont été copiées dans la colonne A puis on récupère les valeurs triées à nouveau dans le tableau et on supprime ces valeurs de la colonne A :
    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
     
    Private Sub UserForm_Initialize()
     
        Dim Tbl
     
        Tbl = Worksheets("Feuil2").Range("J1:J100") 'adapter la plage
     
        With Worksheets("Feuil3")
     
            .Range("A1:A" & UBound(Tbl)) = Tbl
            .Range("A1:A" & UBound(Tbl)).Sort .Range("A1"), xlAscending
            Tbl = .Range("A1:A" & UBound(Tbl))
            .Range("A:A").Clear
     
        End With
     
        Me.ComboBox1.List = Tbl
     
    End Sub

  12. #12
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1 010
    Points : 181
    Points
    181
    Par défaut Afficher les données dans une liste déroulante avec un tri croissant
    Alors j'ai testé ton code Theze, ça marche pour la liste deroulante qui est bien triée mais quand on clique sur une valeur, il prend les données d'une autre valeur....

  13. #13
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonjour
    a tu essayé de trier ta sheets avant
    en considérant que les ville commence en A1
    exemple issu de l'enregistreur de macro en délimitant la plage aux colonne a et b pour les villes et habitants
    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
    Sub test()
       With ActiveWorkbook.Worksheets("Feuil1")
        Set plage = .Range("A1:B" & .Cells(Rows.Count, 2).End(xlUp))
     
        .Sort.SortFields.Clear
        .Sort.SortFields.Add Key:=Range("A1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
     
     
        With .Sort
            .SetRange plage
            .Header = xlNo
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End With
    With UserForm1
    .Show 0
    .ListBox1.List = Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp)).Value
    End With
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  14. #14
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1 010
    Points : 181
    Points
    181
    Par défaut Afficher les données dans une liste déroulante avec un tri croissant
    En fait j'ai déjà fait un tri sur une autre colonne car j'ai deux listes déroulantes, la premiere les villes et la seconde les maires....

  15. #15
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Alors, soit tu fait comme te le conseille Patrick, tu tri ta feuille par rapport aux champs que tu veux (clé1 : Villes, clé2 : Maires, clé3 : etc...) soit , si tu ne veux pas trier la feuille, tu copie ta base dans le tableau, tu utilises la feuille intermédiaire pour le tri sur tes différents champs et tu charges seulement la première dimension dans ta ComboBox en gardant ton tableau actif (déclaré en tête de module) et ensuite, tu récupères les valeurs sur Click du ComboBox depuis le tableau et non depuis la feuille.

  16. #16
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1 010
    Points : 181
    Points
    181
    Par défaut Afficher les données dans une liste déroulante avec un tri croissant
    Oui je vais tester ça et merci à tout le monde!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 21/10/2014, 22h45
  2. [Débutant] Insérer les données dans une liste déroulante
    Par titom59280 dans le forum Accès aux données
    Réponses: 7
    Dernier message: 28/01/2014, 17h07
  3. Afficher toutes les données d'une liste déroulante
    Par erwand dans le forum InfoPath
    Réponses: 1
    Dernier message: 05/09/2008, 10h42
  4. Réponses: 3
    Dernier message: 11/10/2007, 12h18
  5. Afficher les données d'une Liste multicolonne dans CrystalReport
    Par NAIMA2 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 02/04/2007, 10h59

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