Trier une plage dynamique avec une macro

Soleilburo

XLDnaute Nouveau
Bonjour à toutes et à tous, ceci est mon premier message ici

Je cherche à automatiser par un bouton le tri alphabétique d'une plage dynamique.

Comme je suis un simple utilisateur et que je ne connais ni pas les commandes ni le VBA, je laisse Excel enregistrer la macro tout seul comme un grand. Le code créé par excel donne ceci (où SERVICE est une plage de données dynamique avec la fonction DECALER)

Application.Goto Reference:="SERVICE"
ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("C2:C11") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Feuil1").Sort
.SetRange Range("A1: D11")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

Le problème c'est que le range C2:C11 ou A1: D11 peut changer, il faudrait donc les remplacer par une valeur dynamique, à savoir une ligne de plus pour chaque nouvel enregistrement. Je pourrais mettre C2:C9000 et A1: D9000 mais je trouve cette solution peu élégante et je suis sûr qu'il y a moyen de faire autrement.

Mais, voilà, je ne sais pas comment faire et je n'ai pas trouvé de réponses à ce problème ...

D'avance merci pour votre aide sachant que je n'y connais rien en VBA et que je ne souhaite pas utiliser de commandes si possible

ci-joint le fichier car un xls vaut toujours mieux qu'un long discours
 

Pièces jointes

  • Tridynamique.xlsm
    17.9 KB · Affichages: 115
  • Tridynamique.xlsm
    17.9 KB · Affichages: 135
  • Tridynamique.xlsm
    17.9 KB · Affichages: 135
C

Compte Supprimé 979

Guest
Re : Trier une plage dynamique avec une macro

Salut SoleilBuro

Il est vrai que c'est plus compliqué à partir de 2007 :p

Ca devrait donné ceci
Code:
Sub TriDyn()
  Dim DLig As Long
  ' Avec la feuille du nom : "Feuil1" du classeur actif
  With ActiveWorkbook.Worksheets("Feuil1")
    ' Mémoriser le numéro de la dernière ligne remplie de la colonne C
    DLig = .Range("C" & Rows.Count).End(xlUp).Row
    ' Sur Excel 2007, avec l'objet Sort
    With .Sort
      .SortFields.Clear
      ' 1er Critère de tri, le nom
      .SortFields.Add Key:=Range("C2:C" & DLig), _
                      SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
      ' 2ème critère de tri, le prénom
      .SortFields.Add Key:=Range("D2:D" & DLig), _
                      SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
      .SetRange Range("A1:D" & DLig)
      .Header = xlYes
      .MatchCase = False
      .Orientation = xlTopToBottom
      .SortMethod = xlPinYin
      .Apply
    End With
  End With
End Sub

A+
 
Dernière modification par un modérateur:

Papou-net

XLDnaute Barbatruc
Re : Trier une plage dynamique avec une macro

Bonsoir Soleilburo, et bienvenue à toi,

Bruno, que je salue au passage, m'a encore précédé mais je t'envoie quand-même ma solution :

Code:
Sub tridyn()
'
' tridyn Macro
'

'
    Application.Goto Reference:="SERVICE"
    ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("B2:B15") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("C2:C15") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("D2:D15") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Feuil1").Sort
        .SetRange Range("A:D")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub
Bonne soirée.

Cordialement.
 
C

Compte Supprimé 979

Guest
Re : Trier une plage dynamique avec une macro

Salut SoleilBruno,

J'ai ajouté un 2ème critère de tri dans mon code précédent, le prénom ;)
C'est clair que le VBA peux te permettre de faire d'ENORMES choses :)

@Papou-net : il a dis dynamique la plage ;)

Amitiés
 

Soleilburo

XLDnaute Nouveau
Re : Trier une plage dynamique avec une macro

En effet, c la soluce de Bruno que j'ai testé car elle me paraissait plus dynamique (la plage tout autant que la soluce :p)

Merci pour le 2e critère, je vais le tester sur mon fichier de base qui comporte R colonnes
 

Discussions similaires

Réponses
3
Affichages
547