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 sélectif dans combobox


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2012
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 243
    Points : 58
    Points
    58
    Par défaut Tri sélectif dans combobox
    Bonjour à tous

    J'ai un combobox qui me récupères des valeurs issues d'une plage de cellules.
    pour chaque valeur, j'ai cette formule : =SI(SAISIE!K2="";0;SAISIE!K2)

    Exemple de la plage de cellules sources :
    MATERIEL
    Tête -
    Tronçonneuse -
    Tenaille coupe-carreaux -
    Taille-haie -
    0
    0
    0

    J'aimerais trier par ordre alphabétique uniquement les items du combobox de mon formulaire, mais pas les cellules sources.
    J'ai donc trouvé ce code que j'utilise à l'initialisation de mon formulaire

    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
    Private Sub UserForm_Initialize()
     
    ComboBox6.Value = ""
     
    Dim Cel As Range
    Dim i, j As Integer
    For Each Cel In Range("N3:N300")
        Me.ComboBox6.AddItem Cel.Value
    Next Cel
    With Me.ComboBox6
        For i = 0 To .ListCount - 1
            For j = 0 To .ListCount - 1
                If .List(i) < .List(j) Then
                    strTemp = .List(i)
                    .List(i) = .List(j)
                    .List(j) = strTemp
                    End If
            Next j
        Next i
    End With
     
     
     
    ComboBox6.Value = ""
    ComboBox6.SetFocus
     
    End Sub

    Les valeurs s'affichent bien mais comme j'ai recopié ma formule dans la plage de cellules source, j'ai toutes mes valeurs 0 qui s'affichent en premier
    et à la fin mes 4 valeurs.

    Question : comment faire pour trier uniquement sur les valeurs <> de 0

    Merci beaucoup pour votre aide
    Ben

  2. #2
    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
    Au lieu d'ajouter tous les cellules et ensuite les trier, il suffit de tester la valeur de la cellule et de l'ajouter ou non

    Pour ton 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
    Private Sub UserForm_Initialize()
    Dim Cel As Range
    Dim i As Integer, j As Integer
    Dim strTemp As String
     
    For Each Cel In Range("N3:N300")
        If Cel.Value <> 0 Then Me.ComboBox6.AddItem Cel.Value
    Next Cel
    With Me.ComboBox6
        For i = 0 To .ListCount - 1
            For j = 0 To .ListCount - 1
                If .list(i) < .list(j) Then
                    strTemp = .list(i)
                    .list(i) = .list(j)
                    .list(j) = strTemp
                End If
            Next j
        Next i
    End With
    ComboBox6.SetFocus
    End Sub

    Sinon, il y a mieux: au lieu de trier sur la combobox, utiliser une variable tableau à trier (à l'aide de quicksort disponible sur le net) et d'affecter ce tableau à la proprié List de ta combo

    Exemple
    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
    Private Sub UserForm_Initialize()
    Dim Tb() As String
    Dim Cel As Range
    Dim k As Integer
     
    For Each Cel In Worksheets("Feuil1").Range("N3:N300")
        If Cel.Value <> 0 And Cel.Value <> "" Then
            k = k + 1
            ReDim Preserve Tb(1 To k)
            Tb(k) = Cel.Value
        End If
    Next Cel
    If k > 0 Then
        QuickSort Tb, 1, k
        Me.ComboBox6.list = Tb
    End If
    End Sub
     
    Tri rapide disponible sur le net
    Private Sub QuickSort(Tb() As String, ByVal Mn As Long, ByVal Mx As Long)
    Dim H As Long, L As Long, i As Long
    Dim Tmp As String
     
    If Mn >= Mx Then Exit Sub
    i = Int((Mx - Mn + 1) * Rnd + Mn)
    Tmp = Tb(i)
    Tb(i) = Tb(Mn)
    L = Mn
    H = Mx
    Do
        Do While Tb(H) >= Tmp
            H = H - 1
            If H <= L Then Exit Do
        Loop
        If H <= L Then
            Tb(L) = Tmp
            Exit Do
        End If
        Tb(L) = Tb(H)
        L = L + 1
        Do While Tb(L) < Tmp
            L = L + 1
            If L >= H Then Exit Do
        Loop
        If L >= H Then
            L = H
            Tb(H) = Tmp
            Exit Do
        End If
        Tb(H) = Tb(L)
    Loop
    QuickSort Tb, Mn, L - 1
    QuickSort Tb, L + 1, Mx
    End Sub
    Voilà, une correction, une autre piste les 2 en 1. A toi de les étudier pour ta propre suite
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2012
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 243
    Points : 58
    Points
    58
    Par défaut
    C'est génial. en fait je voulais compliquer j'avais pensé à la condition si
    mais je ne savais pas comment l'intercaler et le for each est là pour ça

    merci encore
    bonne journée

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

Discussions similaires

  1. tri croissant dans un combobox
    Par shimomura22 dans le forum C#
    Réponses: 1
    Dernier message: 20/04/2015, 19h11
  2. [XL-2007] Regroupement, format et tri date dans combobox
    Par cathodique dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 06/11/2013, 18h29
  3. [Débutant] bizarrerie dans tri dans combobox?
    Par sniper59 dans le forum VB.NET
    Réponses: 5
    Dernier message: 15/12/2011, 16h08
  4. [XL-2000] Tri décroissant dans une combobox
    Par cobra38 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/12/2010, 16h47
  5. [vba] e-03 celulles trié dans combobox?
    Par lebison dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/04/2008, 19h43

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