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 :

Tri par ordre croissant [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 26
    Par défaut Tri par ordre croissant
    Bonjour à toutes et à tous.

    Je me permet de solliciter votre aide pour un problème en VBA

    J'ai crée une Userform avec des combobox que j'alimente par rapport à une base de données. Jusque là, aucuns problèmes, mais j'aimerais que mes liste déroulantes affichent les choix disponibles par ordre croissant. Je vous joint le code VBA de l'userform initialize ()

    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
    Option Base 1
    Private Sub UserForm_Initialize()
    Dim LastLig As Long, j As Long
    Dim i As Byte
    Dim ColCrit
     
    ColCrit = Array(2, 3, 4, 6, 7, 8, 9, 13, 15, 18, 19, 20, 23, 26, 27)
    With Sheets("bras")
        .AutoFilterMode = False                             
        LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row    
        For i = 1 To UBound(ColCrit)                                      
            For j = 2 To LastLig
                Me.Controls("ComboBox" & i).Value = .Cells(j, ColCrit(i)).Value
                If Me.Controls("ComboBox" & i).ListIndex = -1 Then Me.Controls("ComboBox" & i).AddItem .Cells(j, ColCrit(i)).Value
                Me.Controls("ComboBox" & i).ListIndex = -1
            Next j
        Next i
    End With
    End Sub
    Merci d'avance pour votre aide . Et si possible pouvez vous m'expliquer à l'aide de commentaires dans le code, merci.

  2. #2
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut tri combobox et listbox
    Bonjour,

    Regarde dans la FAQ par ce lien

    TRI

  3. #3
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 26
    Par défaut
    Merci Marcel.

    J'ai encore une question à poser : J'ai entré le code fourni avec le tutoriel mais, il me signale une erreur. Peut-être une erreur de code.
    Je suis désole mais je suis vraiment débutant dans la programmation VBA et modifier un code déjà existant sans que l'on m'explique m'est un peu difficile pour avancer.

    Merci à tous


    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
     Private Sub UserForm_Initialize() 'Mise en forme de USF avec récupération des données sur la BDD
    Dim LastLig As Long
    Dim j As Long
    Dim i As Byte
    Dim n As Long
    Dim ColCrit
    Dim x As Integer, y As Integer
     
    ColCrit = Array(4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, 17, 18, 19, 20, 21, 22, 23) ' n° de colonnes choisies pour le filtrage
     
    With Sheets("bras")
        .AutoFilterMode = False
        LastLig = .Cells(.Rows.Count, 4).End(xlUp).Row 
        For i = 1 To UBound(ColCrit) 
            For j = 4 To LastLig 
                Me.Controls("ComboBox" & i).Value = .Cells(j, ColCrit(i)).Value
                If Me.Controls("ComboBox" & i).ListIndex = -1 Then Me.Controls("ComboBox" & i).AddItem .Cells(j, ColCrit(i)).Value
                Me.Controls("ComboBox" & i).ListIndex = -1
            Next j 
        Next i
         End With
     
        For x = 0 To .ListCount - 1
                For y = 0 To .ListCount - 1
                    If .List(x) < .List(y) Then
                        strTemp = .List(x)
                        .List(x) = .List(y)
                        .List(y) = strTemp
                    End If
                Next y
            Next x
        End With
    End Sub

  4. #4
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut TRI DES ITEMS
    Bonsoir,

    Quand tu postes au sujet d'une erreur, il vaut mieux
    - indiquer la ligne de code en ereur (surbrillance)
    - donner le message d'erreur.

    Pas grave du tout.

    Il te manque une déclaration

    Adapté à ton code, cela donne (je te conseille, du moins au début, de séparer les commandes à l'intérieur de ta procédure pour plus de clarté)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    For i = 1 To UBound(ColCrit)
            With Me.Controls("ComboBox" & i)
                    For x = 0 To .ListCount - 1
                            For y = 0 To .ListCount - 1
                                    If .List(x) < .List(y) Then
                                            strTemp = .List(x)
                                            .List(x) = .List(y)
                                            .List(y) = strTemp
                                    End If
                            Next y
                    Next x
            End With
    Next i
    Pour chaque item (List) de chaque combobox(i), ici, tu compares l'une vec la suivante. Si celle-ci lui est inférieure, tu inverses les item en t'aidant d'une valeur temporaire "strtemp".

  5. #5
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 26
    Par défaut
    Merci pour ces explications claires et nettes Marcel, ça fonctionne très bien.

    Je te remercie. J'ai compris comment faire et comment cela fonctionne, et ça c'est le but de l'apprentissage.

    Merci encore et bonne continuation.

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

Discussions similaires

  1. Tri par ordre croissant
    Par KinF dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 13/12/2008, 20h19
  2. Tri par ordre croissant
    Par identifiant_bidon dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 27/02/2008, 13h11
  3. Analyse croisée : empêcher le tri par ordre croissant
    Par mouaa dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 19/02/2008, 14h08
  4. Tri par ordre croissant
    Par controle55 dans le forum x86 16-bits
    Réponses: 4
    Dernier message: 12/01/2008, 21h16

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