RechercheV + Concaténer
Résolu
yannick.guyon
-
gbinforme Messages postés 14946 Date d'inscription Statut Contributeur Dernière intervention -
gbinforme Messages postés 14946 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour tout le monde,
Je souhaite réaliser une recherche de valeur (exemple : AA-0001) qui correspond à la référence d'un document dans un chemin d'accès (exemple : \\CHEMIN\XX\AA-0001.PDF). Les références se trouvant dans la colonne B et les chemins d'accès dans la colonne A.
Pour faire cela, j'utilises cette formule :
=SIERREUR(RECHERCHEV("*"&B2&"*";$A$2:$A$100;1;FAUX);"")
L'objectif est de faire concorder la référence avec le chemin d'accès pour cette référence dans une colonne C.
Cela fonctionne parfaitement s'il existe un seul document (un seul chemin d'accès) par référence. Mon problème c'est lorsqu'il existe plusieurs documents (plusieurs chemins d'accès) pour une référence. Je souhaite concaténer les chemins d'accès en utilisant un séparateur "###" entre les chemins d'accès.
Je pensais dupliquer mes références réaliser la RECHERCHEV pour toutes les lignes et utiliser une macro de ce type (déjà utiliser pour un autre fichier) pour concaténer :
Sub CONCATENER()
Set ws1 = Sheets("brut")
Set ws2 = Sheets("résultat")
sep = "###"
dl = ws1.Cells(Rows.Count, 1).End(xlUp).Row
ws1.Rows("1:" & dl).Copy ws2.Rows(1)
With ws2
For i = dl - 1 To 2 Step -1
If .Cells(i + 1, 1) = .Cells(i, 1) Then
.Cells(i, 2) = .Cells(i, 2) & sep & .Cells(i + 1, 2)
.Rows(i + 1).Delete shift:=xlUp
End If
Next i
End With
End Sub
Cependant, en réalisant cela, ma RECHERCHEV pour la référence me sort toujours le même chemin d'accès et non tous les chemins d'accès différents pour la référence.
J'espère avoir été clair, n'hésitez pas à revenir vers moi pour des explications supplémentaires.
Merci d'avance à tous ceux qui prendront le temps de jeter un coup d'œil.
Je souhaite réaliser une recherche de valeur (exemple : AA-0001) qui correspond à la référence d'un document dans un chemin d'accès (exemple : \\CHEMIN\XX\AA-0001.PDF). Les références se trouvant dans la colonne B et les chemins d'accès dans la colonne A.
Pour faire cela, j'utilises cette formule :
=SIERREUR(RECHERCHEV("*"&B2&"*";$A$2:$A$100;1;FAUX);"")
L'objectif est de faire concorder la référence avec le chemin d'accès pour cette référence dans une colonne C.
Cela fonctionne parfaitement s'il existe un seul document (un seul chemin d'accès) par référence. Mon problème c'est lorsqu'il existe plusieurs documents (plusieurs chemins d'accès) pour une référence. Je souhaite concaténer les chemins d'accès en utilisant un séparateur "###" entre les chemins d'accès.
Je pensais dupliquer mes références réaliser la RECHERCHEV pour toutes les lignes et utiliser une macro de ce type (déjà utiliser pour un autre fichier) pour concaténer :
Sub CONCATENER()
Set ws1 = Sheets("brut")
Set ws2 = Sheets("résultat")
sep = "###"
dl = ws1.Cells(Rows.Count, 1).End(xlUp).Row
ws1.Rows("1:" & dl).Copy ws2.Rows(1)
With ws2
For i = dl - 1 To 2 Step -1
If .Cells(i + 1, 1) = .Cells(i, 1) Then
.Cells(i, 2) = .Cells(i, 2) & sep & .Cells(i + 1, 2)
.Rows(i + 1).Delete shift:=xlUp
End If
Next i
End With
End Sub
Cependant, en réalisant cela, ma RECHERCHEV pour la référence me sort toujours le même chemin d'accès et non tous les chemins d'accès différents pour la référence.
J'espère avoir été clair, n'hésitez pas à revenir vers moi pour des explications supplémentaires.
Merci d'avance à tous ceux qui prendront le temps de jeter un coup d'œil.
A voir également:
- Recherchev concatener
- Concatener deux cellules excel - Guide
- Recherchev texte - Forum Excel
- Excel concatener retour à la ligne - Forum Programmation
- Inverse de concatener excel ✓ - Forum Excel
- Recherchev contient ✓ - Forum Excel
3 réponses
Bonjour,
Pour obtenir ce que tu souhaites (recherchev multiple) je te propose plutôt cette fonction à mettre dans un module
Ensuite dans ta feuille tu l'appelles comme une formule par exemple :
Pour obtenir ce que tu souhaites (recherchev multiple) je te propose plutôt cette fonction à mettre dans un module
Option Explicit Function Concat(référence, pl_rch, pl_res) Dim cel As Range Const sep = "###" If pl_rch.Count <> pl_res.Count Then Concat = "#PARAM": Exit Function Else Concat = "" End If For Each cel In pl_rch If cel = référence Then If InStr(Concat, pl_res(cel.Row)) = 0 Then Concat = Concat & IIf(Concat = "", "", sep) & pl_res(cel.Row) End If End If Next cel End Function
Ensuite dans ta feuille tu l'appelles comme une formule par exemple :
=Concat(C2;B2:B17;A2:A17)
Bonjour gbinforme,
Merci pour ton aide.
Je ne parviens pas encore à utiliser ta fonction.
Pour être sur de comprendre dans ton exemple :
référence= la référence que je vais chercher dans les chemins d'accès.
pl_rch= la plage dans laquelle je vais chercher la référence.
pl_res= plage résultat?
Merci pour ton aide.
Je ne parviens pas encore à utiliser ta fonction.
Pour être sur de comprendre dans ton exemple :
référence= la référence que je vais chercher dans les chemins d'accès.
pl_rch= la plage dans laquelle je vais chercher la référence.
pl_res= plage résultat?
Bonsoir,
Pas étonnant que cela ne fonctionne pas car j'avais mal interprété Les références se trouvant dans la colonne B .
référence= la référence que je vais chercher dans les chemins d'accès.
pl_rch= la plage dans laquelle je vais chercher la référence celle des chemins d'accès.
Ok c'est bien cela : voici la fonction rectifiée
tu l'appelles comme une formule par exemple :
Pas étonnant que cela ne fonctionne pas car j'avais mal interprété Les références se trouvant dans la colonne B .
référence= la référence que je vais chercher dans les chemins d'accès.
pl_rch= la plage dans laquelle je vais chercher la référence celle des chemins d'accès.
Ok c'est bien cela : voici la fonction rectifiée
Option Explicit Function Concat(référence, pl_rch) Dim cel As Range Const sep = "###" If référence = "" Then Concat = "#PARAM": Exit Function Else Concat = "" End If For Each cel In pl_rch If InStr(cel.Value, référence) > 0 Then If InStr(Concat, cel.Value) = 0 Then Concat = Concat & IIf(Concat = "", "", sep) & cel.Value End If End If Next cel If Concat = "" Then Concat = "non trouvé" End Function
tu l'appelles comme une formule par exemple :
=Concat(B2;A2:A200)