trouver une valeur dans une plage de données de manière rétroactive...
3 réponses
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)....
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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)....
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
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...
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
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...
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"
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...
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
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
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)....
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)....