Bien, ce n'est pas alors qu'une remontée mais plutôt une simple correspondance de valeurs uniques entre chaque colonne …
Tu dois avoir faux à partir de l'itération n°11 sinon mon code - allant jusqu'en n°37 avec ton exemple
la recherche commençant sur la dernière ligne - serait bon pour la corbeille ! …
Comme une procédure VBA n'est pas forcément nécessaire pour répondre à la demande, j'ai vérifié
via une formule directement dans la feuille de calculs : la liste est identique à celle de ma procédure …
Mon code de début d'après-midi de la veille ne finira donc pas dans la corbeille !
Précisions quant à ma démonstration :- contrairement au post #7, peu importe le format des valeurs car seule la correspondance exacte est cherchée …
- La liste est affichée dans une seconde feuille, aisément adaptable pour une autre feuille …
- Pas d'utilisation d'une zone de saisie pour commencer la recherche,
la procédure se déclenche en double cliquant sur une cellule en colonne A ou B. Elle peut aussi être liée à un bouton.
Si une zone de recherche est nécessaire, via l'instruction
InputBox ou une cellule dédiée
là aussi c'est facilement adaptable …
- La fonction
Match est en fait la fonction
EQUIV de la feuille de calcul.
Pour une aide sur toute autre instruction, y positionner le curseur puis cliquer sur la touche

!
Pour suivre le processus, ne pas oublier le mode pas à pas (touche F8) et la
Fenêtre Variables locales …
- Copier le code suivant dans le module de la feuille contenant le tableau source pour gérer l'évènement du double clic :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| Sub Demo()
C& = ActiveCell.Column: R = ActiveCell.Row
If ActiveCell.Value = "" Or C > 2 Or R < 2 Then Beep: Exit Sub
TS = [A1].CurrentRegion.Value
ReDim TL$(1 To UBound(TS), 1 To 1)
If C = 2 Then L& = 1: TL(1, 1) = TS(R, 2)
Do
L = L + 1: TL(L, 1) = TS(R, 1)
R = Application.Match(TS(R, 1), Application.Index(TS, , 2), 0)
Loop Until IsError(R)
Feuil2.Cells.ClearContents
Feuil2.[C1].Resize(L).Value = TL
Feuil2.Activate
End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect([A1].CurrentRegion, Target) Is Nothing Then Cancel = True: Demo
End Sub |
Partager