Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Tri décroissant glissant

5 réponses
Avatar
Philippe
Re bonjour à toutes et à tous,

Pour un tri croissant/décroissant pas de problème en sélectionnant ce qu'il
y a à trier.
Cependant, comment s'y prendre pour effectuer un tri décroissant d'un
tableau de "x" lignes fixes (par exemple de ligne 2: ligne 50) sachant que
certaines lignes (par exemple de la ligne 2 à ligne 30) sont "remplies" et
les lignes 31 à 50 sont vides, mais comportent des formules.
En résumé, y a t il une astuce pour ne sélectionner que les lignes
"remplies" avant d'effectuer un tri ?
Tout ceci afin d'affecter une petite macro à un bouton nommé "Tri" pour des
personnes non initiées Excel. (Si cela est possible)
PS : j'ai jeté un oeil sur Excelabo,mais je n'ai rien trouvé.
Merci de votre diligence.
Philippe

5 réponses

Avatar
francois.forcet
Salut Philippe

Je te propose ce bout de code :

Do While Range("A65535").End(xlUp).Offset(-i, 0) = ""
i = i + 1
Loop
Range("A1", "A" & Range("A65535").End(xlUp).Offset(-i,
0).Row).EntireRow.Sort Key1:=Range("A1"), Order1:=xlDescending,
Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom,
_
DataOption1:=xlSortNormal

La première partie détermine la valeur i nécessaire pour atteindre la
première cellule non vide à partir de celles possédant des formules

Do While Range("A65535").End(xlUp).Offset(-i, 0) = ""
i = i + 1
Loop


La 2° partie opère le tri descendant sur la colonne A de la zone
déterminée par ce paramètre et la cellule A1 pour les lignes entière :

Range("A1", "A" & Range("A65535").End(xlUp).Offset(-i,
0).Row).EntireRow.Sort Key1:=Range("A1"), Order1:=xlDescending,
Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom,
_
DataOption1:=xlSortNormal

Celà devrait te convenir

Dis moi !!!!
Avatar
Philippe
Re-bonjour François.
J'ai mis en application ta macro. Cependant ...
Je te joins le fichier en question avec ci-joint.
Tu vas dans le dernier onglet, j'ai mis quelques précisions pour t'aider.
Merci encore de ton aide.
Philippe
http://cjoint.com/?fhsCifPtWr


a écrit dans le message de news:

Salut Philippe

Je te propose ce bout de code :

Do While Range("A65535").End(xlUp).Offset(-i, 0) = ""
i = i + 1
Loop
Range("A1", "A" & Range("A65535").End(xlUp).Offset(-i,
0).Row).EntireRow.Sort Key1:=Range("A1"), Order1:=xlDescending,
Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom,
_
DataOption1:=xlSortNormal

La première partie détermine la valeur i nécessaire pour atteindre la
première cellule non vide à partir de celles possédant des formules

Do While Range("A65535").End(xlUp).Offset(-i, 0) = ""
i = i + 1
Loop


La 2° partie opère le tri descendant sur la colonne A de la zone
déterminée par ce paramètre et la cellule A1 pour les lignes entière :

Range("A1", "A" & Range("A65535").End(xlUp).Offset(-i,
0).Row).EntireRow.Sort Key1:=Range("A1"), Order1:=xlDescending,
Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom,
_
DataOption1:=xlSortNormal

Celà devrait te convenir

Dis moi !!!!
Avatar
francois.forcet
Rebonjours Philippes
J'ai consulté ton document
Mon code était en rouge signe d'une erreur de syntaxe liée à
l'aboutement de lignes l'une au bout de l'autre alors qu'elle devaient
être l'une aprés l'autre comme :

Do While Range("B100").End(xlUp).Offset(-i, 0) = "" i = i + 1
Loop

dans ta recopie

alors que je t'ai donné dans ma réponse :

Do While Range("B100").End(xlUp).Offset(-i, 0) = ""
i = i + 1
Loop


Attention à ces recopies source de ce genre de mesaventure

Je t'ai mis sur ce lien ton document corrigé
Testes le et dis moi !!!!

http://www.cijoint.fr/cjlink.php?file=cj200805/cij70tkZV7.xls.
Avatar
Philippe
Milles Excuses pour cette erreur, mia culpa.
J'ai une erreur de compilation : argument nommé intouvable sur DataOption1: (PS : le VBA n'est pas trop mon fort)
Philippe
a écrit dans le message de news:

Rebonjours Philippes
J'ai consulté ton document
Mon code était en rouge signe d'une erreur de syntaxe liée à
l'aboutement de lignes l'une au bout de l'autre alors qu'elle devaient
être l'une aprés l'autre comme :

Do While Range("B100").End(xlUp).Offset(-i, 0) = "" i = i + 1
Loop

dans ta recopie

alors que je t'ai donné dans ma réponse :

Do While Range("B100").End(xlUp).Offset(-i, 0) = ""
i = i + 1
Loop


Attention à ces recopies source de ce genre de mesaventure

Je t'ai mis sur ce lien ton document corrigé
Testes le et dis moi !!!!

http://www.cijoint.fr/cjlink.php?file=cj200805/cij70tkZV7.xls.
Avatar
francois.forcet
Rebonjours Philippe
Je suppose que tu fais allusion aux lignes :

Range("R8", "R" & Range("R100").End(xlUp).Offset(-i,
0).Row).EntireRow.Sort Key1:=Range("R8"), Order1:=xlDescending,
Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

2 solutions :
Soit tu réalises avec l'enregistreur de macro un tri sur une plage de
cellules et tu me communiques les lignes de code qu'il a réalisé afin
que je l'adapte
Soit tu supprimes cette partie non indispensable donnant ces lignes
modifiées ainsi :

Range("R8", "R" & Range("R100").End(xlUp).Offset(-i,
0).Row).EntireRow.Sort Key1:=Range("R8"), Order1:=xlDescending,
Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom

Le résultat n'en sera pas affecté

Donnes moi la solution retenue !!!!