Faire un For each en remontant une plage de données ? Impossible ?

Bonsoir

J'ai une question concernant une boucle for each

J'aimerais savoir si il est possible de faire une recherche de la valeur dans une colonne en remontant et pas en descendant, donc exemple en admettant que j'ai rempli des données qui sont dans un ordre croissant dans la colonne B, que cette colonne comporte des cases vides, et que j'ai trouvé la valeur immédiatement supérieure dans cette colonne, je recherche maintenant la valeur immédiatement inférieure qui se trouve donc forcement au dessus de la borne supérieure, sauf qu'elle peut ne pas être immédiatement au dessus mais que des cases vides les séparent (c'est un tableau de données brutes que je recois donc j'aimerais ne pas avoir à le réarranger dans sa globalité), du coup je sais la plage de cellule dans mon tableau dans laquelle je dois chercher la valeur immédiatement inférieure, mais je dois "ignorer" les cases vides, bref je fais un for each en commencant du bas vers le haut qui va chercher la première valeur numérique au dessus de ma borne supérieure, et donc plus du haut vers le bas comme au début mais du bas vers le haut, le souci c'est que le code se passe bien mais me renvoie pas la bonne valeur, donc est ce que la recherche dans une plage de cellule de type Range(XX:XX) peut se faire du bas vers le haut ou forcement excel inverse l'ordre indiqué dans le range pour que ca se fasse toujours du haut vers le bas ? d'où le fait que j'ai pas le résultat escompté...(C'est extrêmement possible que j'ai mal codé, la fin parce que le début je me suis fait aidé ici et ca fonctionne)

For Each cel In Plg
If IsNumeric(cel.Value) And cel.Value > Pk Then
SA1 = cel.Value
Exit For
End If

If IsNumeric(cel.Value) Then valeur = cel.Value

Next cel

Dim Trouve As Range, PlageDeRecherche As Range
Dim Valeur_Cherchee As String, AdresseTrouvee As String
Set PlageDeRecherche = Plg
Set SA1 = Plg.Cells.Find(what:=SA1, LookAt:=xlWhole)
AdresseTrouvee = SA1.Address

x = Range(SA1.Address).Row
y = Range(SA1.Address).Column

'v= Asc(ucase(lettre)) - 64

lettre = Chr(y + 64)

MsgBox lettre
MsgBox x

Set Plg2 = Worksheets("Axe En Plan").Range(lettre & x & ":E10")

For Each cel2 In Plg2
If cel2.Value <> "" And cel2.Value <> 0 Then
SA2 = cel2.Value
Exit For
End If

MsgBox "   valeur borne inf " & SA2

Next cel2

End Sub

Bonsoir

Remplacer ceci :

Set Plg2 = Worksheets("Axe En Plan").Range(lettre & x & ":E10")

For Each cel2 In Plg2
If cel2.Value <> "" And cel2.Value <> 0 Then
SA2 = cel2.Value
Exit For
End If

par cela :

Set Plg2 = Worksheets("Feuil1").Range("A1:E10")
For i = Plg2.Cells.Count To 1 Step -1
If Plg2.Cells(i).Value <> "" And Plg2.Cells(i).Value <> 0 Then
SA2 = Plg2.Cells(i).Value
Exit For
End If
Next

A+

Bonjour

Merci ! Bon donc à priori on peut pas remonter il faut utiliser un for ?

Bonjour

For i = Plg2.Cells.Count To 1 Step -1

de nombre de cellules par step -1

là je remonte ???

A+

Si si tu remontes (enfin je crois) mais pas en utilisant for each, j'ai pas encore testé mais je doute pas que cela fonctionne donc merci d'avance! Je vais le mettre en place, juste je voulais pour mon info quand meme avoir la réponse à ma question

Re

Cela revient au même car je passe toutes les cellules en revue

A+

Oui oui aucun problème sur cela c'est juste que je m'interrogeais sur l'utilisation et les limites de for each, bon je pense avoir la réponse au sujet et j'ai la solution à ma problématique merci

Rechercher des sujets similaires à "each remontant plage donnees impossible"