Boucle à l'envers

BenHarber

XLDnaute Occasionnel
Bonjour Le Forum,
Pour passer en revue une zone déterminée (que je nomme 'znWrk') j'ai pris l'habitude d'utiliser le type de code suivant :

Dim znWrk As Object, cWrk As Object
Set znWrk = ThisWorkbook.Sheets(1).Range("A1:A" & Sheets(1).[A65536].End(xlUp).Row)
For Each cWrk In znWrk
'TRAITEMENT macro'
Next cWrk

Je passe ainsi en revue chaque cellule de la zone en ORDRE CROISSANT, càd en partant de 'A1' jusqu'à la dernière cellule non vide de la colonne A.

Question : y-a-t-il possibilité de les passer en revue dans l'odre DECROISSANT (càd de la dernière cellule non vide de la colonne A jusqu'à 'A1'). Si oui, quel est le code ?

Merci d'avance pour vos suggestions.

PS : je connais le truc qui consiste à mettre en variable le n° de la ligne de la dernière cellule, puis à faire une boucle décroissante du style :
i=[A65536].End(xlUp).Row
For j = i to 1 Step -1
....etc....

Là, je voudrais savoir s'il existe une possibilité de balayer directement ''à l'envers'' une collection d'objets...(mais peut-être que cela n'existe pas !!??)

Cordialement,
BenHarber
 

soan

XLDnaute Barbatruc
Inactif
Bonjour,

Ce fil de 2009 est une occasion de se rappeler les interventions de roger2327.

Quelqu'un sait-il ce qu'il est devenu ? …

Je ne sais pas pourquoi Roger qui avait toujours de bons codes à nous fournir n'est pas revenu depuis un bon moment. :mad:


Image 1.jpg


selon l'image de l'avatar de Roger, on voit tout d'suite qu'il ne s'est pas rasé depuis très, très longtemps ; alors il a peut-être choisi de vivre en ermite ? on dirait Robinson Crusoé ; mais c'est peut-être son ami Vendredi ? qu'il soit l'un ou l'autre, je serais pas étonné qu'il soit retourné sur son île pour échapper à la pandémie de coronavirus, ou tout simplement pour échapper à notre monde civilisé prétendument meilleur que la vie au soleil et au grand air, au bord de la mer.​



Image 2.jpg

autre possibilité : d'après sa jolie signature, qui contient le filigrane d'une faucille et d'un marteau, il s'est retiré derrière le rideau de fer, au paradis des travailleurs socialistes (selon Marx et Lénine) ; bien sûr, il faut compter avec les apparatchiks, le KGB, et le GRU ; mais ce ne sont que quelques inconvénients mineurs... du moment que même en Sibérie, on peut boire de la Vodka pour se réchauffer.​



j'ai une 3ème hypothèse : d'après la mire de son avatar, il a peut-être été victime d'un sniper embusqué ? mais que pouvait-on bien avoir contre lui ? risquait-il de prendre la place de Lénine ? d'après plusieurs documents historiques, tout opposant à Lénine avait de singulières chances de finir au goulag, voire pire ; alors oui, ceux qui ont eu la chance de travailler comme forçats dans les mines de sel de Sibérie ont pu mesurer à quel point ils sont au paradis des travailleurs. 😇

soan
 

eriiic

XLDnaute Barbatruc
Bonjour à tous,

Il me semble avoir lu qu'il nous avait définitivement quitté.
Je me demande s'il n'était pas prof de math vu son très haut niveau dans ce domaine.

2 idées. Pour la 1ère, à voir si l'ordre des areas sera toujours celui que tu attends.
VB:
Sub test()
    Dim pl As Range, i As Long, ar As Long, c As Range
    ' idée 1
    Set pl = Union([C2:E3], [B4:D4])
    For ar = pl.Areas.Count To 1 Step -1
        For i = pl.Areas(ar).Count To 1 Step -1
            pl.Areas(ar)(i).Select
        Next i
    Next ar
    ' idée 2
    Set c = pl.Areas(pl.Areas.Count)(pl.Areas(pl.Areas.Count).Count)
    For i = 1 To pl.Count
        c.Select
        Set c = pl.FindPrevious(c)
    Next i
End Sub
eric
 

soan

XLDnaute Barbatruc
Inactif
@mapomme, le fil,

Oui il l'est (ou était), il avait décrit son parcours dans un message. Il faut le trouver maintenant.

j'ai trouvé ce post ; y'a écrit en lettres de taille minuscule : « (Je laisse le plaisir de la démonstration aux amateurs de ces belles choses ; en cas de difficulté, votre professeur de mathématiques préféré vous règlera cela en deux temps trois mouvements...) »

quand il dit « votre professeur de mathématiques préféré » : il parle de lui-même. 😜 donc il était bien prof de maths ; CQFD. 😉



beaucoup de ses posts se terminent par :
«
Mardi 17 Merdre 137 (Saint Saint Woland, professeur, SQ)
15 Prairial An CCXVIII
2010-W22-4T22:28:48Z
»
(en lettres de taille minuscule aussi)



bien sûr, le post que tu as retrouvé est bien plus complet ! 👍 🙂

soan
 

TooFatBoy

XLDnaute Barbatruc
j'ai trouvé ce post ; y'a écrit en lettres de taille minuscule : « (Je laisse le plaisir de la démonstration aux amateurs de ces belles choses ; en cas de difficulté, votre professeur de mathématiques préféré vous règlera cela en deux temps trois mouvements...) »

quand il dit « votre professeur de mathématiques préféré » : il parle de lui-même. 😜 donc il était bien prof de maths ; CQFD. 😉
Bah nan : il dit que n'importe quel prof de maths peut régler le problème et donc il t'enjoint d'aller voir, de tous les profs de maths que tu connais ou que tu as connus, celui que tu préfères.
That's all.
 

CISCO

XLDnaute Barbatruc
Bonsoir à tous

Merci pour ces deux idées, Eriiic. Je n'avais pas vu, effectivement.
La première ressemble beaucoup à deux boucles imbriquées, ce que je cherchais à éviter en relançant ce fil. Mais le Union est une très bonne idée que je garde sous le coude.
Quant à la seconde, il faut d'abord que j'aille voir la doc sur Aeras, car je ne comprend pas grand chose à la ligne c = pl.Areas(pl.Areas.Count)(pl.Areas(pl.Areas.Count).Count).

@ plus
 

eriiic

XLDnaute Barbatruc
Union est là juste pour créer un exemple conforme à ta demande. Ca peut aussi être une plage nommée.
La ligne set c est pour trouver la dernière cellule de la plage qui servira de départ au .findPrevious.
C'est la dernière cellule du dernier area.
(une plage non rectangulaire est constituée de plusieurs areas)
Dernier area : pl.Areas(pl.Areas.Count)
L'index de sa dernière cellule est son .count

Simple ou double boucle, il n'y aura pas de différence significative. Prend celle où tu te sens plus à l'aise
eric
 
Dernière édition:

Tlorf

XLDnaute Nouveau
Bonjour,
voici une piste : rassembler le contenu des cellules dans un tableau et tester le contenu à rebours ? :

Function CHOIX(my_range As Variant)

Dim ma_tab(1000000)
Dim i_tab As Integer

i_tab = my_range.Cells.Count - 1
rebours = 0

For Each cell In my_range
ma_tab(i_tab - rebours) = cell.Value
rebours = rebours + 1
Next cell

For i = 0 To i_tab
If ma_tab(i) <> "" Then
CHOIX = ma_tab(i)
End If
Next i

End Function
 

Discussions similaires

Réponses
4
Affichages
266

Statistiques des forums

Discussions
314 638
Messages
2 111 477
Membres
111 161
dernier inscrit
KARIMTAPSO