Application.Match... en remontant ?

Le
LANIMAL
Bonjour,
J'ai une colonne de dates - NON TRIÉES.
Les dates sont répétées plusieurs fois, et en désordre.
Ex.(avec des nombres, c'est plus lisible) :
4
3
2
3
8
6
3
1

Existe-t-il un code qui permet de définir sur quelle ligne se trouve le
dernier 3 ? (= ligne "7")
Une sorte de Application.Match "en remontant", qui répondrait "2".


J'ai bien trouvé la solution ci-dessous qui risque de durer !
--
Sub test1()

Ligne = 0
Do
On Error Resume Next
Ligne = Ligne + Application.Match(3, Range("A" & Ligne + 1 & ":A65536"), 0)
If Err <> 0 Then Exit Do
Loop
MsgBox Ligne

End Sub
--

Merci
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Daniel.C
Le #22111681
Bonjour.
MsgBox Columns(1).Find(3, , , xlWhole, xlByRows, xlPrevious).Address
Daniel

Bonjour,
J'ai une colonne de dates - NON TRIÉES.
Les dates sont répétées plusieurs fois, et en désordre.
Ex.(avec des nombres, c'est plus lisible) :
4
3
2
3
8
6
3
1

Existe-t-il un code qui permet de définir sur quelle ligne se trouve le
dernier 3 ? (= ligne "7")
Une sorte de Application.Match... "en remontant", qui répondrait "2".


J'ai bien trouvé la solution ci-dessous... qui risque de durer !
--------------------------
Sub test1()

Ligne = 0
Do
On Error Resume Next
Ligne = Ligne + Application.Match(3, Range("A" & Ligne + 1 & ":A65536"), 0)
If Err <> 0 Then Exit Do
Loop
MsgBox Ligne

End Sub
-----------------------------

Merci
LANIMAL
Le #22111821
Merci Daniel,
Je me doutais bien... mais faut savoir !
Merci, bonne journée.

Daniel.C a écrit :
Bonjour.
MsgBox Columns(1).Find(3, , , xlWhole, xlByRows, xlPrevious).Address
Daniel
LANIMAL
Le #22111811
Oui, je m'étais fixé sur "Match", j'avais oublié "Find" qui
effectivement figure dans l'aide.

Daniel.C a écrit :
Bonjour.
MsgBox Columns(1).Find(3, , , xlWhole, xlByRows, xlPrevious).Address
Daniel
Caetera
Le #22112581
"LANIMAL"

Existe-t-il un code qui permet de définir sur quelle ligne se trouve le
dernier 3 ? (= ligne "7")



**************************
MsgBox [large(if(3¡:A8,row(A1:A8)),1)]

Etc
LANIMAL
Le #22117181
J'en suis baba !....
Quelle simplicité !
Le test marche, mais malheureusement je ne comprends pas !
Je suppose qu'il s'agit d'une formule matricielle ([... ])?
Il serait temps que je me familiarise avec les matrices, et les
fonctions attachées, mais je ne sais pas par quel moyen.
Je n'ai pas le toupet de te demander un cours particulier, mais si tu
pouvais me donner qq références...
Je n'ai rien trouvé sur l'aide VBA, ni sur Google,
il doit y avoir un truc qui m'échappe... !
Merci pour ton aide passée... et à venir ?


Caetera a écrit :
"LANIMAL"

Existe-t-il un code qui permet de définir sur quelle ligne se trouve le
dernier 3 ? (= ligne "7")



**************************
MsgBox [large(if(3¡:A8,row(A1:A8)),1)]

Etc



Caetera
Le #22117511
"LANIMAL" %

Je suppose qu'il s'agit d'une formule matricielle ([... ])?



******************************
C'est effectivement la transposition en VBA d'une formule matricielle utilisant
3 fonctions imbriquées et dont le résultat est renvoyé par Evaluate (Expression
entre crochets)
Dans la feuille de calcul (avec validation par ctrl+maj+enter) :

=GRANDE.VALEUR(SI(A1:A8=3;LIGNE(A1:A8));1)

Le test logique A1:A8=3 comme 1° argurnent de la fonction SI renvoie au travers
de la fonction LIGNE une matrice de valeurs, numériques (le Numéro de Ligne)
chaque fois que la valeur 3 est trouvée ou FAUX si ce n'est pas le cas.
Pour ton exemple
{FAUX;2;FAUX;4;FAUX;FAUX;7;FAUX}
Il suffira donc d'imbriquer ce calcul dans la fonction
GRANDE.VALEUR(laMatrice,1) pour renvoyer l'index de la dernière ligne contenant
la valeur 3

En VBA et avec des variables, il faudra expressément utiliser la syntaxe
Evaluate(chaine)
Exemple de syntaxe avec variables nom de feuille, 1° ligne de la plage et
dernière ligne de la plage

Sub TestAvecVariables()
laFeuille = "Feuil1"
Ldéb = 1
Lfin = 8
MsgBox Evaluate("large(if(3=" & laFeuille & "!A" & Ldéb & ":A" & Lfin & ",row("
& laFeuille & "!A" & Ldéb & ":A" & Lfin & ")),1)")
End Sub

Etc
LANIMAL
Le #22118041
Caetera a écrit :
"LANIMAL" %

Je suppose qu'il s'agit d'une formule matricielle ([... ])?



******************************
C'est effectivement la transposition en VBA d'une formule matricielle utilisant
3 fonctions imbriquées et dont le résultat est renvoyé par Evaluate (Expression
entre crochets).......


========================== Merci de ton dévouement.
Après une 1ère lecture, je crois saisir les grandes lignes...
maintenant il faut que j'assimile le détail.
Merci et bonne soirée.
Publicité
Poster une réponse
Anonyme