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

3 réponses
Avatar
Capitaine Pampers
Bonjour =E0 tous,

Je souhaitrais g=E9n=E9rer un bout de code qui trie de mani=E8re croissante=
les donn=E9es de la colonne A d'une table. Les donn=E9es des colonnes B,C,=
D, doivent bien sure suivre le mouvement. (A noter qu'au d=E9part il y a de=
s lignes blanches entre les enregistrements, ces lignes blanches (non rense=
ign=E9es) naturellement disparaissent =E0 l'issue du tri)

Je travaille essentiellement avec l'enregistreur de macro pour g=E9n=E9rer =
du code et il se trouve que le code g=E9n=E9r=E9 fait r=E9f=E9rence 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=E0 le code g=E9n=E9r=E9:

Columns("A:A").Select
ActiveWorkbook.Worksheets("TEST T1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("TEST T1").Sort.SortFields.Add Key:=3DRange("=
A1"), _
SortOn:=3DxlSortOnValues, Order:=3DxlAscending, DataOption:=3DxlSor=
tNormal
With ActiveWorkbook.Worksheets("TEST T1").Sort
.SetRange Range("A1:A752")
.Header =3D xlNo
.MatchCase =3D False
.Orientation =3D xlTopToBottom
.SortMethod =3D xlPinYin
.Apply
End With

Quelqu'un pourrait-il me dire comment s'y prendre ?

Merci d'avance - Cpt Pampers

3 réponses

Avatar
DanielCo
Bonjour,

[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


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 des lignes
blanches entre les enregistrements, ces lignes blanches (non renseigné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 neutre 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:=xlSortNormal 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
Avatar
MichD
Bonjour,

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
--------------------------------------------------------------
Avatar
Capitaine Pampers
Bonjour,

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