Trier sans faire référence au nom de l'onglet
Le
Capitaine Pampers

Bonjour à tous,
Je souhaitrais générer un bout de code qui trie de manière croissante=
les données de la colonne A d'une table. Les données des colonnes B,C,=
D, doivent bien sure suivre le mouvement. (A noter qu'au départ il y a de=
s lignes blanches entre les enregistrements, ces lignes blanches (non rense=
ignées) naturellement disparaissent à l'issue du tri)
Je travaille essentiellement avec l'enregistreur de macro pour générer =
du code et il se trouve que le code généré fait référence au nom =
de la feuille sur laquelle je travaille et moi je souhaiterais un code neut=
re que je puisse utiliser sur des feuilles ayant un autre nom que "TEST T1"=
en l'occurrence.
Voilà le code généré:
Columns("A:A").Select
ActiveWorkbook.Worksheets("TEST T1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("TEST T1").Sort.SortFields.Add Key:=Range("=
A1"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSor=
tNormal
With ActiveWorkbook.Worksheets("TEST T1").Sort
.SetRange Range("A1:A752")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Quelqu'un pourrait-il me dire comment s'y prendre ?
Merci d'avance - Cpt Pampers
Je souhaitrais générer un bout de code qui trie de manière croissante=
les données de la colonne A d'une table. Les données des colonnes B,C,=
D, doivent bien sure suivre le mouvement. (A noter qu'au départ il y a de=
s lignes blanches entre les enregistrements, ces lignes blanches (non rense=
ignées) naturellement disparaissent à l'issue du tri)
Je travaille essentiellement avec l'enregistreur de macro pour générer =
du code et il se trouve que le code généré fait référence au nom =
de la feuille sur laquelle je travaille et moi je souhaiterais un code neut=
re que je puisse utiliser sur des feuilles ayant un autre nom que "TEST T1"=
en l'occurrence.
Voilà le code généré:
Columns("A:A").Select
ActiveWorkbook.Worksheets("TEST T1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("TEST T1").Sort.SortFields.Add Key:=Range("=
A1"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSor=
tNormal
With ActiveWorkbook.Worksheets("TEST T1").Sort
.SetRange Range("A1:A752")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Quelqu'un pourrait-il me dire comment s'y prendre ?
Merci d'avance - Cpt Pampers
[A:D].Sort [A1], xlAscending, Header:=xlNo
Pas besoin de chercher plus loin, sauf si ta feuille est protégée et le
tri autorisé.
Cordialement.
Daniel
Voici un exemple de code pour trier la colonne B de la feuille active avec une plage "A:D"
Cette procédure est valide pour chacune des feuille du classeur où est copiée la macro.
Sub test()
Dim DerLig As Long
With ThisWorkbook
With .ActiveSheet
'Si la feuille n'est pas vide
If Not IsEmpty(.UsedRange) Then
'Avec la plage A:D
With .Range("A:D")
'Trouve la dernière ligne occupé pour les colonnes
'de A à D
DerLig = .Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
End With
With .Range("A1:D" & DerLig)
'Tri croissant sur la colonne B de la plage A:D
'Item(1,1) : 1 = Ligne, 1 la colonne
.Sort Key1:=.Item(1, 1), Order1:=xlAscending, Header:=xlYes
End With
End If
End With
End With
End Sub
MichD
--------------------------------------------------------------
Merci beaucoup pour ces deux réponses. Celle de Daniel est suffisante, et celle de Denis je la garde en mémoire elle me sera peut-être un jour u tile si je dois trier sur des données situées au centre de la table.
Merci encore et bonne soirée - Cpt Pampers