OVH Cloud OVH Cloud

Recherche seconde occurrence d'une colonne

5 réponses
Avatar
khinoa
Bonjour à tous,

Dans une colonne je voudrais sélectionner non pas la première cellule
contenant le mot "sous-total" mais la seconde cellule contenant ce mot et
située plusieurs lignes plus bas. Je connais Find (qui cherche à partir du
haut du début d'une plage) mais je ne sais pas comment lui dire dans ce cas
précis.

D'avance merci

khinoa

5 réponses

Avatar
AV
...non pas la première cellule
contenant le mot "sous-total" mais la seconde cellule contenant ce mot


Si pas de cellules vides et plage à adapter :
Sur 1 seule ligne :
Range("a" & Evaluate("small(if(offset(a1:a20,,,,1)=" & """" & "sous-total" &
"""" & ",row(a1:a20)),2)")).Select

AV

Avatar
khinoa
Bonjour AV,

Je te remercie mais ton code me paraît néanmoins assez compliqué à
comprendre (small, if, offset c'est beaucoup pour moi!), j'ai entretemps
trouvé ceci :

ligne = Columns("a").Find("Sous-total" & "*").Row

ligne = Range("a" & ligne & ":a" &
Range("a65536").End(3).Row).Find("Sous-total" & "*").Row

Certes mon code nécessite une variable mais il m'est plus facilement
compréhensible. Il existe Findnext mais je ne sait pas l'utiliser pour
rechercher une seconde occurrence. Je précise que la plage de recherche est
variable.

Peut-être toi ou quelqu'un aura une idée?

khinoa

"AV" a écrit dans le message de
news:
...non pas la première cellule
contenant le mot "sous-total" mais la seconde cellule contenant ce mot


Si pas de cellules vides et plage à adapter :
Sur 1 seule ligne :
Range("a" & Evaluate("small(if(offset(a1:a20,,,,1)=" & """" & "sous-total"
&

"""" & ",row(a1:a20)),2)")).Select

AV





Avatar
docm
Bonjour khinoa.

Le code de AV est parfait.

Par contre ton code me semble impeccable. Il ne te reste qu'à y ajouter la
gestion d'erreurs.

Amicalement.

"khinoa" wrote in message
news:41700df3$0$29525$
Bonjour AV,

Je te remercie mais ton code me paraît néanmoins assez compliqué à
comprendre (small, if, offset c'est beaucoup pour moi!), j'ai entretemps
trouvé ceci :

ligne = Columns("a").Find("Sous-total" & "*").Row

ligne = Range("a" & ligne & ":a" &
Range("a65536").End(3).Row).Find("Sous-total" & "*").Row

Certes mon code nécessite une variable mais il m'est plus facilement
compréhensible. Il existe Findnext mais je ne sait pas l'utiliser pour
rechercher une seconde occurrence. Je précise que la plage de recherche
est

variable.

Peut-être toi ou quelqu'un aura une idée?

khinoa

"AV" a écrit dans le message de
news:
...non pas la première cellule
contenant le mot "sous-total" mais la seconde cellule contenant ce mot


Si pas de cellules vides et plage à adapter :
Sur 1 seule ligne :
Range("a" & Evaluate("small(if(offset(a1:a20,,,,1)=" & """" &
"sous-total"


&
"""" & ",row(a1:a20)),2)")).Select

AV









Avatar
khinoa
Bonjour cocm,

AV est réputé pour sa science. Merci pour ton appréciation pour mon code
néanmoins. Qu'entends-tu par gestion d'erreur? S'agit-il seulement d'une
instruction On Error Resume Next ou bien une instruction disant si par
trouvé "Sous-total" alors "Sous-total" absent de la liste.

Si tu pouvais me l'écrire, ce serait parfait, mais peut-être abuserais-je ?

A bientôt

khinoa

"docm" a écrit dans le message de
news:
Bonjour khinoa.

Le code de AV est parfait.

Par contre ton code me semble impeccable. Il ne te reste qu'à y ajouter la
gestion d'erreurs.

Amicalement.



Avatar
AV
...Il existe Findnext mais je ne sait pas l'utiliser


Sub zzz()
With Range("a1", [A65536].End(3))
c = .FindNext(.Find("Sous-total")).Address
End With
Range(c).Select
End Sub

AV