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 dans un combobox


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 116
    Par défaut Tri dans un combobox
    Bonjour
    je souhaiterais avoir un tri alphabétique dans un combox

    j'ai ce code qui renvoi la valeur de la colonne 1 dans textbox2 et la valeur de la troisième colonne dans TxtPma

    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
    Private Sub ComboBox4_Change()
    'Liste combo
    Me.ComboBox4.List = Sheets("Villes").[A2].Resize([A1].End(xlDown).Row, 3).Value
    'renvoi la valeur dans Textbox2
    Me.TextBox2 = Me.ComboBox4.Value
    ' renvoi valeur de la colonne 3 dans TxtPma
    Me.TxtPmA = Me.ComboBox4.Column(2)
     
    If Me.TxtPmA = "N" Then ' Si la Valeur = N couleur fond =rouge
        Me.TxtPmA.BackColor = RGB(255, 0, 0)
        Else
        Me.TxtPmA.BackColor = RGB(255, 255, 255)
    End If
    Me.ComboBox5.SetFocus
    End Sub
    J'ai cherché quelques exemples mais je ne sais pas comment l'intégrer dans ce code.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    With Me.ComboBox4
        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
    activation 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Private Sub UserForm_Activate()
     
     
    Dim Cel As Range
    Dim i As Byte, j As Byte
     
    Set f = Sheets("villes")
       Set Rng = f.Range("A2:A" & f.[A65000].End(xlUp).Row)
    For Each Cel In Rng
        Me.ComboBox4.AddItem Cel.Value
    Next Cel
    With Me.ComboBox4
        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
     
    End Sub
    Merci

  2. #2
    Membre extrêmement actif
    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
    Par défaut
    Bonsoir,

    Il ne faut surtout pas utiliser ce tri:

    -Algorithme hyper-lent (on ne peut pas trouver plus lent)
    -Il ne faut pas travailler directement sur le combobox (lent). Il faut trier dans un Array puis transférer l'Array trié dans le ComboBox avec List

    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
     
    Option Compare Text
    Private Sub UserForm_Initialize()
      Set f = Sheets("BD")
      temp = Application.Transpose(Range(f.[a2], f.[a2].End(xlDown)).Value)
      Tri temp, LBound(temp), UBound(temp)
      Me.ComboBox1.List = temp
    End Sub
     
    Sub Tri(a, gauc, droi) ' Quick sort
      ref = a((gauc + droi) \ 2)
      g = gauc: d = droi
      Do
        Do While a(g) < ref: g = g + 1: Loop
        Do While ref < a(d): d = d - 1: Loop
        If g <= d Then
           temp = a(g): a(g) = a(d): a(d) = temp
           g = g + 1: d = d - 1
        End If
      Loop While g <= d
      If g < droi Then Call Tri(a, g, droi)
      If gauc < d Then Call Tri(a, gauc, d)
    End Sub
    Boisgontier
    http://boisgontierjacques.free.fr

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 116
    Par défaut
    Bonjour

    Ok mais j'ai déjà ce tri pour d'autres Combo dans userform_initialize.

    Comment intégrer 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Private Sub UserForm_Initialize()
       Set f = Sheets("bd")
       Set Rng = f.Range("A2:L" & f.[A65000].End(xlUp).Row)
       BD = Rng.Value
       nc = UBound(BD, 2): For i = 1 To UBound(BD): BD(i, nc) = i + 1: Next    ' no ligne de la BD
       ColVisu = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12) ' colonnes à visualiser
       Ncol = UBound(ColVisu) + 1
       '--- combobox villes trié
       Set d = CreateObject("Scripting.Dictionary")
       d("*") = ""
       For i = LBound(BD) To UBound(BD)
        d(BD(i, 2)) = ""
       Next i
       temp = d.keys
       Tri temp, LBound(temp), UBound(temp)
       Me.ComboBox1.List = temp
       Me.ComboBox1.ListIndex = 0
       '--- combobox profession trié
       Set d = CreateObject("Scripting.Dictionary")
       d("*") = ""
       For i = LBound(BD) To UBound(BD)
        d(BD(i, 3)) = ""
       Next i
       temp = d.keys
       Tri temp, LBound(temp), UBound(temp)
       Me.ComboBox2.List = temp
       Me.ComboBox2.ListIndex = 0
       '--- combobox année
       Set d = CreateObject("Scripting.Dictionary")
       d("*") = ""
       TriMult BD, LBound(BD), UBound(BD), 4
       For i = LBound(BD) To UBound(BD)
        d(Year(BD(i, 4))) = ""
       Next i
       temp = d.keys
       Me.ComboBox3.List = temp
       Me.ComboBox3.ListIndex = 0
     
     
      Affiche
    End Sub

Discussions similaires

  1. Tri dans la combobox d'un attribut relationnel
    Par logari dans le forum W4 Express
    Réponses: 2
    Dernier message: 12/10/2011, 19h12
  2. [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
  3. [XL-2000] Tri dans une ComboBox
    Par cobra38 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 03/12/2010, 11h25
  4. [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
  5. [C#] tri dans un combobox
    Par cortex024 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 02/12/2005, 14h31

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