Syntaxe de VB, Tri

Résolu
Bonjour,
Excel 2007,
Je bugg dans la formulation suivante car ma syntaxe fait définitivement défaut. Je souligne les endroits que je crois problématique pour que quelqu'un puisse rapidement me suggérer la formulation acceptable Merci....

Ceci fait la recherche de la denière ligne de la colonne 35 et y applique un tri de la ligne 6 jusqu'à derlig pour par la suite les entrer dans un ComboBox1. Je sais que l'entée dans le combobox fonctionne bien mais la première partie consistant au tri est difficile à délimiter. Range.... Peut être y a-t-il autre problème à vous de voir Merci

Dim I As Long, DerLig As Long

DerLig = .Cells(Rows.Count, 35).End(xlUp).Row 'Spécifie la colonne35 de la Feuille de calcul
Rows("6:Derlig").Select
ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("AI6:AI $ Derlig" _
), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("AQ6:AQ & Derlig" _
), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Feuil1").Sort
.SetRange Range("A6:AR & Derlig")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("A6").Select
End Sub

With Sheets("Feuil1") 'Ici, il faut mettre le bon nom de l'onglet
DerLig = .Cells(Rows.Count, 35).End(xlUp).Row 'Spécifie la colonne35 de la Feuille de calcul
For I = 6 To DerLig 'Débute à la ligne 6 pour se poursuivre jusqu'à la dernière ligne
Me.ComboBox1.AddItem .Cells(I, 35).Value 'Aditionne les infos de la colonne 35 à la I ligne
Next I
End With

End Sub

2 réponses

  1. Modérateur
    Bonjour,

    Excusez l'incruste...

    Pour remplir un combo avec une liste triée :
    Private Sub blabla 'ADAPTE selon l'événement choisi !!!!!  
    'le remplissage du combo :  
    Dim temp()
    
    temp = Application.Transpose(Sheets("Feuil1").Range("AI6:AI" & Sheets("Feuil1").Range("AI" & Rows.Count).End(xlUp).Row).Value)  
    Call tri(temp, LBound(temp), UBound(temp))  
    ComboBox1.List = temp  
    End Sub  
    
    'La procédure de tri  
    Sub tri(a(), gauc, droi) ' Quick sort  
    'sources :  
        'http://boisgontierjacques.free.fr/pages_site/tableaux.htm  
    Dim ref, g As Long, d As Long, temp  
      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 

    Cordialement,
    Franck P
    1. j'ai regroupé cette question avec une autre que j'ai posté à Michel_M et je crois que tu es aussi sur le coup... Je vais tout de même analyser le code que tu me proposes Merci
  2. Bonjour,

    Rows("6:Derlig").Select ------->Rows("6:" & Derlig).Select

    Range("AI6:AI $ Derlig")------>Range("AI6:AI" & Derlig)

    idem pour toutes les erreurs range

    .SetRange Range("A6:AR & Derlig") Deux fois range ????

    Bonne suite