Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

match ou vlookup?

  • Initiateur de la discussion Initiateur de la discussion roger44
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

roger44

XLDnaute Junior
Bonjour
J'aimerais extraire certaine lignes d'un fichier principal à partir de valeurs se trouvant dans une colonne séparée. Une valeur peut se trouver plusieurs fois à se suivre dans la colonne séparée. Dans ces cas la même ligne doit être extraite autant de fois.

Merci d'avance
Roger
 

Pièces jointes

Bonjour roger44,

Pas inattendu, c'est pour ça que j'ai dit "Sans plus de précision", RECHERCHEV renvoie la 1ère valeur trouvée.

Si l'on veut récupérer les doublons entrez cette formule matricielle en I3 de ce fichier (2) :
Code:
=SI(LIGNES(I$3:I3)>SOMME(SIGNE(NB.SI($G$3:$G$6;$B$3:$B$13)));"";INDEX(B$1:B$13;PETITE.VALEUR(SI(NB.SI($G$3:$G$6;$B$3:$B$13);LIGNE($B$3:$B$13));LIGNES(I$3:I3))))
à valider par Ctrl+Maj+Entrée et tirer à droite et vers le bas.

Nota : sur Excel 2007 et versions suivantes on peut utiliser SIERREUR, toujours en matriciel :
Code:
=SIERREUR(INDEX(B$1:B$13;PETITE.VALEUR(SI(NB.SI($G$3:$G$6;$B$3:$B$13);LIGNE($B$3:$B$13));LIGNES(I$3:I3)));"")

Bonne journée.
 

Pièces jointes

Bonjour merinos,

Les formules que j'ai données sont classiques et bien sûr elles prennent du temps sur un grand tableau.

Pour aller plus vite utiliser VBA et le Dictionary, ou Power Query sur les versions Excel récentes.

A+
 
Voyez le fichier (3) joint et cette macro dans le code de la feuille :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ncol%, tablo, ref, dest As Range, d As Object, i&, n&, j%
With [B2].CurrentRegion 'à adapter
    ncol = IIf(.Count = 1, 2, .Columns.Count)
    tablo = .Resize(, ncol) 'matrice, plus rapide, au moins 2 éléments
End With
ref = [G3:G6].Resize(, 2) 'colonne à adapter, au moins 2 cellules
Set dest = [I3] '1ère cellule de destination, à adapter
Set d = CreateObject("Scripting.Dictionary")
'---mémorisation des références---
For i = 1 To UBound(ref)
    d(ref(i, 1)) = ""
Next i
'---analyse du tableau source---
For i = 2 To UBound(tablo)
    If d.exists(tablo(i, 1)) Then
        n = n + 1
        For j = 1 To ncol
            tablo(n, j) = tablo(i, j)
        Next j
    End If
Next i
'---restitution---
Application.EnableEvents = False 'désactive les évènements
If FilterMode Then ShowAllData 'si la feuille est filtrée
If n Then
    With dest.Resize(n, ncol)
        .Value = tablo
        .Interior.ColorIndex = 6 'jaune
        .Borders.Weight = xlHairline 'bordures
    End With
End If
dest.Offset(n).Resize(Rows.Count - n - dest.Row + 1, ncol).Delete xlUp 'RAZ en dessous
Application.EnableEvents = True 'réactive les évènements
End Sub
Pour tester j'ai copié le tableau B3:E13 sur 55 000 lignes : la macro s'exécute chez moi en 0,9 seconde.
 

Pièces jointes

Bonjour Job
Revenant sur ta réponse du 18 avril et la formule
=SI(LIGNES(I$3:I3)>SOMME(SIGNE(NB.SI($G$3:$G$6;$B$3:$B$13)));"";INDEX(B$3:B$13;PETITE.VALEUR(SI(NB.SI($G$3:$G$6;$B$3:$B$13);LIGNE($B$3:$B$13));LIGNES(I$3:I3))))

J'ai voulu laisser le fichier source dans un fichier séparé, en précédant les 4 instances de B$3:B$13 de cette formule par le nom du fichier source. Ca n'a pas marché. Y a-t-il une solution?
Roger
 
Bonjour roger44, le forum,

Attention, la formule que vous indiquez n'est pas bonne, ce n'est pas INDEX(B$3:B$13;... mais INDEX(B$1:B$13;... qu'il faut avoir.

A priori il n'y a pas de problème, téléchargez les 2 fichiers joints et ouvrez-les tous les deux.

En I3 du 1er fichier vérifiez qu'il y a bien cette formule matricielle ou entrez-la :
Code:
=SI(LIGNES(I$3:I3)>SOMME(SIGNE(NB.SI($G$3:$G$6;[Source.xls]Feuil1!$B$3:$B$13)));"";INDEX([Source.xls]Feuil1!B$1:B$13;PETITE.VALEUR(SI(NB.SI($G$3:$G$6;[Source.xls]Feuil1!$B$3:$B$13);LIGNE([Source.xls]Feuil1!$B$3:$B$13));LIGNES(I$3:I3))))
Le fichier Source.xls peut être fermé sans inconvénient, les formules fonctionnent encore.

Bonne journée.
 

Pièces jointes

Merci
Pour ma 1ère question à 6h24 ce matin, oui, tu avais bien écrit B1, c'est moi qui l'ai converti en B3. Je vais ré-essayer.
J'avais commencé une 2e question que je n'ai pu terminée puisque le fichier joint a été rejeté, trop volumineux. Si ça se trouve, c'est le même B3/B1 cause.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
16
Affichages
362
Réponses
16
Affichages
378
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…