OVH Cloud OVH Cloud

trouver une valeur dans une plage de données de manière rétroactive...

3 réponses
Avatar
Michel ROPERT
bonjour à tous.....

Ce Forum est une mine d'or !!!! et d'avance merci à tous ces
contributeurs. Entre ce forum et le site EXCELABO, j'ai toujours trouvé
les réponses que je cherchais.... mais là, j'avoue que me trouve face à
une énigme qui m'amène à vous soumettre mon prb. Il a probablement déjà
été soumis, et si c'est le cas, toutes mes excuses....

Dans une plage de cellule (en colonne), je parviens à trouver la
première cellule correspondant à une valeur que j'impose. Je me suis
inspiré de ce qui a été proposé par "popi et misange" (merci à eux) et
qui suit (extrait directement du site EXCELABO) :

>
> Tester si une valeur existe dans une plage
>
>Je cherche à déterminer si une valeur que j'indique existe dans une plage de
>données. Si c'est le cas je voudrais qu'elle soit sélectionnée
>
>Sub cherche_valeur()
> valtest = InputBox("entrez la valeur à rechercher")
> For Each c In [A1:f12]
> If c Like valtest Then
> c.Select
> Exit Sub
> End If
> Next
> MsgBox "Pas de " & valtest & " dans la plage testée !"
> End Sub
>
>

cette méthode fait partir la recherche de la première cellule ("A1")
puis passe à la seconde et ainsi de suite....

Existe-t-il (surement !) un moyen analogue mais faisant partir cette
recherche de la dernière cellule ("F12") et de manière retroactive (en
remontant)....

Merci d'avance.....

Michel

3 réponses

Avatar
isabelle
bonjour Michel,

voici un exemple

Sub cherche_valeur()
valtest = InputBox("entrez la valeur à rechercher")
For L = 12 To 1 Step -1
For C = 6 To 1 Step -1
If Cells(L, C) Like valtest Then
Cells(L, C).Select
Exit Sub
End If
Next
Next
MsgBox "Pas de " & valtest & " dans la plage testée !"
'note :
'tu peux remplacer les chiffres 12 et 6 (cellule F12) par
'ligne = Cells.SpecialCells(xlCellTypeLastCell).Row
'colonne = Cells.SpecialCells(xlCellTypeLastCell).Column
End Sub

isabelle


bonjour à tous.....

Ce Forum est une mine d'or !!!! et d'avance merci à tous ces
contributeurs. Entre ce forum et le site EXCELABO, j'ai toujours trouvé
les réponses que je cherchais.... mais là, j'avoue que me trouve face à
une énigme qui m'amène à vous soumettre mon prb. Il a probablement déjà
été soumis, et si c'est le cas, toutes mes excuses....

Dans une plage de cellule (en colonne), je parviens à trouver la
première cellule correspondant à une valeur que j'impose. Je me suis
inspiré de ce qui a été proposé par "popi et misange" (merci à eux) et
qui suit (extrait directement du site EXCELABO) :


Tester si une valeur existe dans une plage

Je cherche à déterminer si une valeur que j'indique existe dans une plage de
données. Si c'est le cas je voudrais qu'elle soit sélectionnée

Sub cherche_valeur()
valtest = InputBox("entrez la valeur à rechercher")
For Each c In [A1:f12]
If c Like valtest Then
c.Select
Exit Sub
End If
Next
MsgBox "Pas de " & valtest & " dans la plage testée !"
End Sub




cette méthode fait partir la recherche de la première cellule ("A1")
puis passe à la seconde et ainsi de suite....

Existe-t-il (surement !) un moyen analogue mais faisant partir cette
recherche de la dernière cellule ("F12") et de manière retroactive (en
remontant)....

Merci d'avance.....

Michel



Avatar
Michel ROPERT
Merci beaucoup, j'étais en train justement d'explorer les possibilités
en utilisant les boucles FOR....NEXT imbriquées.
finalement, je m'orientais vers une boucle WHILE...WEND et ca donnerai ca...

si certain d'entre vous ont des commentaires....

encore merci.....

Michel



*****************************************************

Sub MaMacro()
'
'mon tableau de données est nommé "Donnees" (plage dynamique car taille
variable)
'mon objectif et de définir dans cette plage "Données" une autre plage
nommée "Mesures" correspondant
'à une partie intermédiare de "Données" compris entre les LignDeb% et
LignFin%
'les critère dont j'ai besoin pour définir "Mesures" sont à chercher dans
'les premières valeurs de la 4ème colonne de "Donnees"
'et dans les dernières valeurs de cette mm 4ème colonne (que je définis
comme "ColCrit")

NomFich$ = ActiveSheet.Name ' récupère le nom de feuille (=
nom de fichier TXT)
Deb% = 8 ' N° de la première ligne de
données de mon tableau
valtest = 1 ' constante de test

' Définition de ma plage "Données" de manière dynamique car cette taille
est variable
ActiveWorkbook.Names.Add Name:="données", RefersToR1C1:= _
"='" & NomFich$ & "'!R" & deb% & "C1:OFFSET('" & NomFich$ & "'!R" &
deb% & "C6,0,0,COUNTA('" & NomFich$ & "'!R" & deb% & "C1:R65000C1))"

Set Donnees = Range("données") 'défini "Donnees" = plage de
données de mon tableau initial
ColCrit = Donnees.Columns(4) 'défini la 4ème colonne de
"Donnees" comme "ColCrit"
ColCrit.Select 'selectionne ColCrit

For Each cellule In Selection.Cells ' Trouve le N° de la ligne
If cellule.Value > valtest Then ' supérieure (LignDeb%)
LignDeb% = cellule.Row ' de mon futur tableau
Exit For ' "Mesures"
End If '
Next '

ColCrit.End(xlDown).Select 'sélectionne la dernière
cellule de la colonne 4 ("ColCrit")

While ActiveCell.Value < valtest ' Trouve le N° de la ligne
ActiveCell.Offset(-1, 0).Select ' inférieure(LignFin%)
Wend ' de mon futur tableau
LignFin% = ActiveCell.Row ' "Mesures"


' Définition de ma plage nouvelle plage "Mesure"
ActiveWorkbook.Names.Add Name:="mesures", RefersToR1C1:= _
"='" & NomFich$ & "'!R" & ligdeb% & "C1:R" & ligfin% & "C6"

End sub
Avatar
Michel Gaboly
Bonjour,

La macro que tu reproduis sort de la boucle dès la première occurrence
trouvée.

Il suffit de supprimer l'instruction Exit Sub pour que la recherche se
poursuive. À la fin du traitement, ce sera la dernière occurrence trouvée
qui sera sélectionnée.

Bien évidemment, ce n'est pas forcément la méthode la plus rapide à
l'exécution, par contre, on peut difficement trouver plus simple comme
modif de la version initiale ;-)))



bonjour à tous.....

Ce Forum est une mine d'or !!!! et d'avance merci à tous ces
contributeurs. Entre ce forum et le site EXCELABO, j'ai toujours trouvé
les réponses que je cherchais.... mais là, j'avoue que me trouve face à
une énigme qui m'amène à vous soumettre mon prb. Il a probablement déjà
été soumis, et si c'est le cas, toutes mes excuses....

Dans une plage de cellule (en colonne), je parviens à trouver la
première cellule correspondant à une valeur que j'impose. Je me suis
inspiré de ce qui a été proposé par "popi et misange" (merci à eux) et
qui suit (extrait directement du site EXCELABO) :


Tester si une valeur existe dans une plage

Je cherche à déterminer si une valeur que j'indique existe dans une plage de
données. Si c'est le cas je voudrais qu'elle soit sélectionnée

Sub cherche_valeur()
valtest = InputBox("entrez la valeur à rechercher")
For Each c In [A1:f12]
If c Like valtest Then
c.Select
Exit Sub
End If
Next
MsgBox "Pas de " & valtest & " dans la plage testée !"
End Sub




cette méthode fait partir la recherche de la première cellule ("A1")
puis passe à la seconde et ainsi de suite....

Existe-t-il (surement !) un moyen analogue mais faisant partir cette
recherche de la dernière cellule ("F12") et de manière retroactive (en
remontant)....

Merci d'avance.....

Michel


--
Cordialement,

Michel Gaboly
http://www.gaboly.com