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 croissant dans une combobox


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    480
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 480
    Points : 164
    Points
    164
    Par défaut Ordre croissant dans une combobox
    Bonjour,

    J'aimerais afficher par ordre croissant dans ma combobox...

    J'ai trouvé ce morceau de code qui fonctionne, mais pas exactement comme j'aimerais...

    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
    Sub TriMult(a, gauc, droi, ColTri) ' Quick sort
      ref = a((gauc + droi) \ 2, ColTri)
      g = gauc: d = droi
      Do
        Do While a(g, ColTri) < ref: g = g + 1: Loop
        Do While ref < a(d, ColTri): d = d - 1: Loop
        If g <= d Then
          For C = LBound(a, 2) To UBound(a, 2)
            temp = a(g, C): a(g, C) = a(d, C): a(d, C) = temp
          Next
          g = g + 1: d = d - 1
        End If
      Loop While g <= d
      If g < droi Then Call TriMult(a, g, droi, ColTri)
        If gauc < d Then Call TriMult(a, gauc, d, ColTri)
    End Sub
    Et ceci pour l'appeler (4 est le numéro de la colonne) : TriMult BD, LBound(BD), UBound(BD), 4

    Il met par ordre croissant style : 1,10,11,12,13,14,15,2,20,21,22,23,24,3,4,5,6,60,61,62,63,7,8....

    Et moi j'aimerais : 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,20,21,22,23...

    Pouvez-vous m'aider ?

    Merci d'avance :-)

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Une autre méthode basée sur le complément de zéros à gauche des chaines :

    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
     
    Sub ChargementUserform()
     
    Dim CtrI As Integer, CtrJ As Integer, LongueurChaine As Integer
    Dim StrTemp As String
     
     
        With UserForm1
     
            .ComboBox1.List = Application.Transpose(Sheets("Feuil1").Range("D2:D10").Value)
     
            LongueurChaine = 0
     
            With .ComboBox1
     
              ' On décompte la grandeur des numéros
              For CtrI = 0 To .ListCount - 1
                 If Len(.List(CtrI)) > LongueurChaine Then LongueurChaine = Len(.List(CtrI))
              Next CtrI
     
              ' On complète les numéros avec des zéros à gauche
              For CtrI = 0 To .ListCount - 1
                  StrTemp = ""
                  Select Case LongueurChaine - Len(.List(CtrI))
                         Case 1
                              StrTemp = "0" & .List(CtrI)
                              .List(CtrI) = StrTemp
                         Case 2
                              StrTemp = "00" & .List(CtrI)
                              .List(CtrI) = StrTemp
                         Case 3
                              StrTemp = "000" & .List(CtrI)
                              .List(CtrI) = StrTemp
                  End Select
              Next CtrI
     
              'Tri des valeurs alpha
              For CtrI = 0 To .ListCount - 1
                  For CtrJ = 0 To .ListCount - 1
                      If .List(CtrI) < .List(CtrJ) Then
                         StrTemp = .List(CtrI)
                         .List(CtrI) = .List(CtrJ)
                          .List(CtrJ) = StrTemp
                      End If
                  Next CtrJ
              Next CtrI
     
              ' On enlève les zéros
              For CtrI = 0 To .ListCount - 1
                  StrTemp = ""
                  For CtrJ = 1 To Len(.List(CtrI))
                      If Mid(.List(CtrI), CtrJ, 1) = "0" Then
     
                       Else
                          StrTemp = Mid(.List(CtrI), CtrJ)
                          .List(CtrI) = StrTemp
                          Exit For
                       End If
                   Next CtrJ
              Next CtrI
     
            End With
     
           .Show
     
        End With
     
    End Sub

  3. #3
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Points : 2 156
    Points
    2 156
    Par défaut
    Bonjour,

    La colonne 4 de BD n'est pas numérique.
    Il faut la convertir en numérique.

    For i = LBound(bd) To UBound(bd): bd(i, 4) = Val(bd(i, 4)): Next i



    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
     
    Sub Essai()
      bd = [A2:D8]
      For i = LBound(bd) To UBound(bd): bd(i, 4) = Val(bd(i, 4)): Next i
      TriMult bd, LBound(bd), UBound(bd), 4
      [F2:I8] = bd
    End Sub
     
    Sub TriMult(a, gauc, droi, ColTri) ' Quick sort
      ref = a((gauc + droi) \ 2, ColTri)
      g = gauc: d = droi
      Do
        Do While a(g, ColTri) < ref: g = g + 1: Loop
        Do While ref < a(d, ColTri): d = d - 1: Loop
        If g <= d Then
          For C = LBound(a, 2) To UBound(a, 2)
            temp = a(g, C): a(g, C) = a(d, C): a(d, C) = temp
          Next
          g = g + 1: d = d - 1
        End If
      Loop While g <= d
      If g < droi Then Call TriMult(a, g, droi, ColTri)
        If gauc < d Then Call TriMult(a, gauc, d, ColTri)
    End Sub
    Boisgontier
    http://boisgontierjacques.free.fr
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Multi-selection dans une ComboBox ?
    Par Moloko dans le forum MFC
    Réponses: 5
    Dernier message: 07/07/2021, 17h26
  2. Tri par ordre croissant dans une listview
    Par megamario dans le forum VB.NET
    Réponses: 26
    Dernier message: 09/07/2010, 10h01
  3. [DOM] Changer ordre dans une combobox
    Par RobinNono dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 14/11/2008, 10h04
  4. [E-00] ordre dans une combobox
    Par zandru dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 22/10/2008, 14h42
  5. Ordre d'ecriture dans une comboBox
    Par abbd dans le forum Windows Forms
    Réponses: 3
    Dernier message: 07/06/2008, 15h43

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