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 :

[VBA-E] Trier Mes Combobox


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé Avatar de CIBOOX
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 194
    Par défaut [VBA-E] Trier Mes Combobox
    BONSOIR !!!!
    J'ai un userform avec plusieurs combobox liées entres elles

    Je cherche un code qui me permettrai,pour n'importe quelle combobox de classer les valeurs par trie croissant...


  2. #2
    Membre éclairé
    Avatar de mortalino
    Inscrit en
    Janvier 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2007
    Messages : 72
    Par défaut
    Salut,

    colle cette procédure parmis les autres de ton userform :

    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(ByRef Liste() As String)
        Dim i As Long, j As Long
        Dim Temp As String
     
    For i = LBound(Liste) To UBound(Liste) - 1
        For j = i + 1 To UBound(Liste)
            If Liste(i) > Liste(j) Then
                Temp = Liste(j)
                Liste(j) = Liste(i)
                Liste(i) = Temp
            End If
        Next j
    Next i
    End Sub
    Ensuite, quand tu as besoin de trier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        Dim MyData() As String
        Dim i As Long
     
        ReDim MyData(NomComBo.ListCount - 1) ' NomComBo à remplacer
    For i = 0 To NomComBo.ListCount ' NomComBo à remplacer
        MyData(i) = NomCombo.List(i) ' NomComBo à remplacer
    Next i
     
    Call Tri(MyData)
    NomComBo.Clear ' NomComBo à remplacer
    For i = LBound(MyList) To UBound(MyList)
        NomComBo.AddItem MyList(i) ' NomComBo à remplacer
    Next i
    Erase MyData

    @++

  3. #3
    Membre confirmé Avatar de CIBOOX
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 194
    Par défaut
    en aplliquant ton code j'ai une erreur 424 objet requis...

  4. #4
    Expert éminent


    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
    Par défaut
    Citation Envoyé par CIBOOX
    en aplliquant ton code j'ai une erreur 424 objet requis...
    sur qu'elle ligne et comment l'applique tu ce code ..?

  5. #5
    Membre confirmé Avatar de CIBOOX
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 194
    Par défaut
    Citation Envoyé par bbil
    sur qu'elle ligne et comment l'applique tu ce code ..?
    sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ReDim MyData(NomCombo.ListCount - 1) ' NomComBo à remplacer
    j'ai place ce code dans Private Sub cbox2_Click() ( cbox2=combobox2)

  6. #6
    Expert éminent


    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
    Par défaut
    et tu as lu le commentaire de cette ligne ..?
    ' NomComBo à remplacer

  7. #7
    Membre confirmé Avatar de CIBOOX
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 194
    Par défaut
    oui j'ai bien remplacer nomcombo par cbox2 mais cette fois j' ai l'erreur 381: impossible de lire la propriete liste.Index de table de proprietes non valide


    de plus j'ai un userform avec 23 combobox liées alors je tente un code style " la procedure " d' ouskel 'nor ( oui !!!! ouskel'nor m' avais aider a installer un code qui indexe et lie toutes les combobox cbox voir ma discusion "alleger codes combobox")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub laprocedure(Lindex)
    Dim lecontrol As Object
     
    For Each lecontrol In GRILLE.Controls
    If InStr(lecontrol.Name, "cbox") = 1 Then
    GRILLE.Controls(lecontrol.Name).ListIndex = Lindex
    End If
    Next
     
    End Sub
    afin d'alleger mes codes ......

  8. #8
    Membre éclairé
    Avatar de mortalino
    Inscrit en
    Janvier 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2007
    Messages : 72
    Par défaut
    Salut,

    une simple boucle sur tes objets dans mon code provoquera le tri de TOUTES tes combobox.
    Bien entendu, ce sera plus ou moins long suivant le nombre de données, si c'est trop long, il te faudra faire un module de classe avec un évènement commun.

    Pour ce qui est de mon code, la procédure Tri reste la même, seul la seco nde partie du code change :

    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
        Dim MyData() As String
        Dim i As Long
        Dim ctl As Control
     
    For Each ctl In Me.Controls
        If TypeOf ctl Is ComboBox Then
                ReDim MyData(ctl.ListCount - 1)
            For i = 0 To ctl.ListCount
                MyData(i) = ctl.List(i)
            Next i
     
            Call Tri(MyData)
            ctl.Clear
            For i = LBound(MyList) To UBound(MyList)
                ctl.AddItem MyList(i)
            Next i
            Erase MyData
        End If
    Next ctl
    @++

  9. #9
    Membre confirmé Avatar de CIBOOX
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 194
    Par défaut
    EN FAIT j' aimerai que le tri soit integrer dans le code procedure

  10. #10
    Membre éclairé
    Avatar de mortalino
    Inscrit en
    Janvier 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2007
    Messages : 72
    Par défaut
    Beh un copier coller, + la boucle en moins, et c'est bon :

    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
    Sub laprocedure(Lindex)
        Dim lecontrol As Object
     
    For Each lecontrol In GRILLE.Controls
        If InStr(lecontrol.Name, "cbox") = 1 Then
            GRILLE.Controls(lecontrol.Name).ListIndex = Lindex
                Dim MyData() As String
                Dim i As Long
     
                ReDim MyData(lecontrol.ListCount - 1)
            For i = 0 To lecontrol.ListCount
                MyData(i) = lecontrol.List(i)
            Next i
     
            Call Tri(MyData)
            lecontrol.Clear
            For i = LBound(MyList) To UBound(MyList)
                lecontrol.AddItem MyList(i)
            Next i
            Erase MyData
        End If
    Next lecontrol
    End Sub
    @++

  11. #11
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    bonjour

    tu peux tester cette adaptation


    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()
        'Les données à aficher dans les combobox sont contenues
        'dans les colonnes A à D.
            'Colonne A ---> cbox1
            'Colonne B ---> cbox2
            'Colonne C ---> cbox3
            'Colonne D ---> cbox4
     
        Dim m As Byte
        Dim j As Integer, i As Integer, x As Integer
        Dim Temp As String
     
        'boucle pour remplir les combobox
        For m = 1 To 4
            x = Cells(65536, m).End(xlUp).Row
            'Remplissage combobox
            Me.Controls("cbox" & m).List() = _
                Range(Cells(1, m), Cells(x, m)).Value
     
            'Tri croissant dans les ComboBox
            With Me.Controls("cbox" & m)
                For i = 0 To .ListCount - 1
                    For j = 0 To .ListCount - 1
                        If .List(i) < .List(j) Then
                            Temp = .List(i)
                            .List(i) = .List(j)
                            .List(j) = Temp
                        End If
                    Next j
                Next i
            End With
        Next m
    End Sub

    michel

  12. #12
    Membre confirmé Avatar de CIBOOX
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 194
    Par défaut
    Citation Envoyé par mortalino
    Salut,

    une simple boucle sur tes objets dans mon code provoquera le tri de TOUTES tes combobox.
    Bien entendu, ce sera plus ou moins long suivant le nombre de données, si c'est trop long, il te faudra faire un module de classe avec un évènement commun.

    Pour ce qui est de mon code, la procédure Tri reste la même, seul la seco nde partie du code change :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        Dim MyData() As String
        Dim i As Long
        Dim ctl As Control
     
    For Each ctl In Me.Controls
        If TypeOf ctl Is ComboBox Then
                ............
    @++
    je reste bloquer sur la ligne erreur de compilation :sub ou fonction non defini

  13. #13
    Membre éclairé
    Avatar de mortalino
    Inscrit en
    Janvier 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2007
    Messages : 72
    Par défaut
    Citation Envoyé par mortalino
    Salut,

    une simple boucle sur tes objets dans mon code provoquera le tri de TOUTES tes combobox.
    Bien entendu, ce sera plus ou moins long suivant le nombre de données, si c'est trop long, il te faudra faire un module de classe avec un évènement commun.

    Pour ce qui est de mon code, la procédure Tri reste la même, seul la seco nde partie du code change :
    Ben t'as gardé la procédure Tri ? (voir le premier message)
    Il doit être placé dans le code du UserForm

    @++

  14. #14
    Membre confirmé Avatar de CIBOOX
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 194
    Par défaut
    Citation Envoyé par SilkyRoad
    bonjour

    tu peux tester cette adaptation


    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()
        'Les données à aficher dans les combobox sont contenues
        'dans les colonnes A à D.
            'Colonne A ---> cbox1
            'Colonne B ---> cbox2
            'Colonne C ---> cbox3
            'Colonne D ---> cbox4
     
        Dim m As Byte
        Dim j As Integer, i As Integer, x As Integer
        Dim Temp As String
     
        'boucle pour remplir les combobox
        For m = 1 To 4
            x = Cells(65536, m).End(xlUp).Row
            'Remplissage combobox
            Me.Controls("cbox" & m).List() = _
                Range(Cells(1, m), Cells(x, m)).Value
     
            'Tri croissant dans les ComboBox
            With Me.Controls("cbox" & m)
                For i = 0 To .ListCount - 1
                    For j = 0 To .ListCount - 1
                        If .List(i) < .List(j) Then
                            Temp = .List(i)
                            .List(i) = .List(j)
                            .List(j) = Temp
                        End If
                    Next j
                Next i
            End With
        Next m
    End Sub

    michel
    bonsoir Michel
    j'ai essaye ton code mais cette fois j'ai une erreur execution '70'
    permission refusee

  15. #15
    Membre confirmé Avatar de CIBOOX
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 194
    Par défaut
    Citation Envoyé par mortalino
    Ben t'as gardé la procédure Tri ? (voir le premier message)
    Il doit être placé dans le code du UserForm

    @++
    oui et je reste toujours bloque !!!! lorsque que je suis en debugage et je click sur la ligne jaune j' ai une info bulle i=34 c space non

  16. #16
    Membre éclairé
    Avatar de mortalino
    Inscrit en
    Janvier 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2007
    Messages : 72
    Par défaut
    Oui, c'est ma faute :

    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
    Sub laprocedure(Lindex)
        Dim lecontrol As Object
     
    For Each lecontrol In GRILLE.Controls
        If InStr(lecontrol.Name, "cbox") = 1 Then
            GRILLE.Controls(lecontrol.Name).ListIndex = Lindex
                Dim MyData() As String
                Dim i As Long
     
                ReDim MyData(lecontrol.ListCount - 1)
            For i = 0 To lecontrol.ListCount
                MyData(i) = lecontrol.List(i)
            Next i
     
            Call Tri(MyData)
            lecontrol.Clear
            For i = LBound(MyData) To UBound(MyData) ' *** CHGT ICI
                lecontrol.AddItem MyData(i) ' *** CHGT ICI
            Next i
            Erase MyData
        End If
    Next lecontrol
    End Sub
    Je teste ça pour voir

  17. #17
    Membre éclairé
    Avatar de mortalino
    Inscrit en
    Janvier 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2007
    Messages : 72
    Par défaut
    Arf, encore une ch'tite erreur de ma part, désolé, voici donc le bon code :

    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
    Sub laprocedure(Lindex)
        Dim lecontrol As Object
     
    For Each lecontrol In GRILLE.Controls
        If InStr(lecontrol.Name, "cbox") = 1 Then
            GRILLE.Controls(lecontrol.Name).ListIndex = Lindex
                Dim MyData() As String
                Dim i As Long
     
                ReDim MyData(lecontrol.ListCount - 1)
            For i = 0 To lecontrol.ListCount - 1 ' *** Ici rajoute le -1
                MyData(i) = lecontrol.List(i)
            Next i
     
            Call Tri(MyData)
            lecontrol.Clear
            For i = LBound(MyData) To UBound(MyData) ' *** Change MyList en MyData
                lecontrol.AddItem MyData(i) ' *** Change MyList en MyData
            Next i
            Erase MyData
        End If
    Next lecontrol
    End Sub
    testé, c'est bon.
    @++

  18. #18
    Membre confirmé Avatar de CIBOOX
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 194
    Par défaut
    en modifiant je me retrouve toujours en debugage sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyData(i) = lecontrol.List(i)
    avec i =34

  19. #19
    Membre éclairé
    Avatar de mortalino
    Inscrit en
    Janvier 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2007
    Messages : 72
    Par défaut
    Oui, c'est dût au "- 1" qui manquait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = 0 To lecontrol.ListCount - 1 ' *** Ici rajoute le -1

  20. #20
    Membre confirmé Avatar de CIBOOX
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 194
    Par défaut
    pourquoi rajoute tu la commande -1 ?????
    cette fois je bug sur la ligne lecontrol.Clear erreur non repertoriee

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

Discussions similaires

  1. [XL-2010] Code VBA pour trier sur combobox
    Par duplaly dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/04/2011, 17h56
  2. [VBA-P][Débutant] PresentationOpen, ComboBox et Diaporama
    Par Pikasacha dans le forum VBA PowerPoint
    Réponses: 7
    Dernier message: 15/02/2006, 13h26
  3. [VBA-E] pbl sur combobox
    Par Igloobel dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 06/02/2006, 08h47
  4. [VBA Excel] Trier une plage à plusieurs colonnes
    Par loacast dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 22/12/2005, 17h04
  5. Trier mes requete par date au format dd/mm/yy
    Par danje dans le forum Langage SQL
    Réponses: 6
    Dernier message: 19/09/2005, 18h06

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