Recherche chaîne de caractère dans une colonne
Résolu
Buzuzima
-
Buzuzima -
Buzuzima -
Bonjour,
J'ai une problématique un peu complexe pour moi.
A partir de deux feuilles de calcul que je veux comparer, je voudrais :
- rechercher dans la première feuille de calcul une chaîne de caractère étant égale à une cellule, - rechercher dans une colonne de la seconde feuille de calcul et renvoyer la valeur correspondante à une autre colonne.
Normalement je devrais utiliser la fonction rechercheV sur une égalité de valeur mais je ne sais pas le faire sur une recherche de chaîne de texte.
Ci dessous une illustration texte du résultat escompté.
______________________Feuille 1_____________________________________
"Colonne résultat de la ______"Colonne Référence
Fonction recherche"_________a rechercher"
01762093_01 (résultat)_____E262201414
____________________________E262469841
___________________________W262043062
01762093_01 résultat) _____W262201413
____________________________W262469842
_________________________Feuille 2__________________________________
Colonne___________________Colonne
Liste des tâches___________Liste travaux
02744840_01______________E262043061,E262043063,E262043066,E262043069,W262043062
01762093_01______________E262201411,E262201414,W262201413
D'avance merci pour vos idées et suggestion.
J'ai une problématique un peu complexe pour moi.
A partir de deux feuilles de calcul que je veux comparer, je voudrais :
- rechercher dans la première feuille de calcul une chaîne de caractère étant égale à une cellule, - rechercher dans une colonne de la seconde feuille de calcul et renvoyer la valeur correspondante à une autre colonne.
Normalement je devrais utiliser la fonction rechercheV sur une égalité de valeur mais je ne sais pas le faire sur une recherche de chaîne de texte.
Ci dessous une illustration texte du résultat escompté.
______________________Feuille 1_____________________________________
"Colonne résultat de la ______"Colonne Référence
Fonction recherche"_________a rechercher"
01762093_01 (résultat)_____E262201414
____________________________E262469841
___________________________W262043062
01762093_01 résultat) _____W262201413
____________________________W262469842
_________________________Feuille 2__________________________________
Colonne___________________Colonne
Liste des tâches___________Liste travaux
02744840_01______________E262043061,E262043063,E262043066,E262043069,W262043062
01762093_01______________E262201411,E262201414,W262201413
D'avance merci pour vos idées et suggestion.
A voir également:
- Excel recherche chaîne de caractère dans plage
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Caractère ascii - Guide
- Caractère spéciaux - Guide
- Liste déroulante excel - Guide
- Caractere speciaux - Guide
5 réponses
Bonjour,
Ci joint ma petite contribution qui utilise une macro VBA, bonne découverte.
Merci du retour.
Le lien: https://www.cjoint.com/c/JEtfiudjnb0
Ci joint ma petite contribution qui utilise une macro VBA, bonne découverte.
Merci du retour.
Le lien: https://www.cjoint.com/c/JEtfiudjnb0
Bonjour,
J'ai testé et adapté la macro qui répond parfaitement à mon besoin en allant chercher les informations dont j'ai besoin dans 2 feuilles de données.
Néanmoins je souhaiterai modifier le code afin recopier plus facilement les champs de plusieurs colonnes dans un soucis "d'élégance du code".
Sub RechercheMultiple1()
Dim rf As Range, Cible As Range
Range("a3:a" & Cells(Rows.Count, 1).End(xlUp).Row).ClearContents
Range("b3:b" & Cells(Rows.Count, 1).End(xlUp).Row).ClearContents
Range("c3:c" & Cells(Rows.Count, 1).End(xlUp).Row).ClearContents
For Each rf In Range("J2:J" & Cells(Rows.Count, 2).End(xlUp).Row)
If rf <> "" Then
With Sheets("METIER")
For Each Cible In .Range("R2:R" & .Cells(Rows.Count, 3).End(xlUp).Row)
If InStr(Cible, rf) = 0 Then
' MsgBox "Non"
Else
' MsgBox "Oui"
'ad = rf.Address
Range(rf.Address).Offset(0, -9) = .Range(Cible.Address).Offset(0, -15)
Range(rf.Address).Offset(0, -8) = .Range(Cible.Address).Offset(0, -13)
Range(rf.Address).Offset(0, -7) = .Range(Cible.Address).Offset(0, -12)
Range(rf.Address).Offset(0, -6) = .Range(Cible.Address).Offset(0, -11)
nb = nb + 1
Exit For
End If
Next Cible
End With
End If
Next rf
MsgBox "La recherche est terminée. il y a " & nb & " référence/s correspondante/s."
For Each rf In Range("I2:I" & Cells(Rows.Count, 2).End(xlUp).Row)
If rf <> "" Then
With Sheets("SMS")
For Each Cible In .Range("E2:E" & .Cells(Rows.Count, 3).End(xlUp).Row)
If InStr(Cible, rf) = 0 Then
' MsgBox "Non"
Else
' MsgBox "Oui"
'ad = rf.Address
Range(rf.Address).Offset(0, -8) = .Range(Cible.Address).Offset(0, -2)
Range(rf.Address).Offset(0, -7) = .Range(Cible.Address).Offset(0, 0)
Range(rf.Address).Offset(0, -6) = .Range(Cible.Address).Offset(0, 1)
Range(rf.Address).Offset(0, -5) = .Range(Cible.Address).Offset(0, 2)
nb = nb + 1
Exit For
End If
Next Cible
End With
End If
Next rf
MsgBox "La recherche est terminée. il y a " & nb & " référence/s correspondante/s."
End Sub
Merci d'avance pour vos idées.
Buzuzima
J'ai testé et adapté la macro qui répond parfaitement à mon besoin en allant chercher les informations dont j'ai besoin dans 2 feuilles de données.
Néanmoins je souhaiterai modifier le code afin recopier plus facilement les champs de plusieurs colonnes dans un soucis "d'élégance du code".
Sub RechercheMultiple1()
Dim rf As Range, Cible As Range
Range("a3:a" & Cells(Rows.Count, 1).End(xlUp).Row).ClearContents
Range("b3:b" & Cells(Rows.Count, 1).End(xlUp).Row).ClearContents
Range("c3:c" & Cells(Rows.Count, 1).End(xlUp).Row).ClearContents
For Each rf In Range("J2:J" & Cells(Rows.Count, 2).End(xlUp).Row)
If rf <> "" Then
With Sheets("METIER")
For Each Cible In .Range("R2:R" & .Cells(Rows.Count, 3).End(xlUp).Row)
If InStr(Cible, rf) = 0 Then
' MsgBox "Non"
Else
' MsgBox "Oui"
'ad = rf.Address
Range(rf.Address).Offset(0, -9) = .Range(Cible.Address).Offset(0, -15)
Range(rf.Address).Offset(0, -8) = .Range(Cible.Address).Offset(0, -13)
Range(rf.Address).Offset(0, -7) = .Range(Cible.Address).Offset(0, -12)
Range(rf.Address).Offset(0, -6) = .Range(Cible.Address).Offset(0, -11)
nb = nb + 1
Exit For
End If
Next Cible
End With
End If
Next rf
MsgBox "La recherche est terminée. il y a " & nb & " référence/s correspondante/s."
For Each rf In Range("I2:I" & Cells(Rows.Count, 2).End(xlUp).Row)
If rf <> "" Then
With Sheets("SMS")
For Each Cible In .Range("E2:E" & .Cells(Rows.Count, 3).End(xlUp).Row)
If InStr(Cible, rf) = 0 Then
' MsgBox "Non"
Else
' MsgBox "Oui"
'ad = rf.Address
Range(rf.Address).Offset(0, -8) = .Range(Cible.Address).Offset(0, -2)
Range(rf.Address).Offset(0, -7) = .Range(Cible.Address).Offset(0, 0)
Range(rf.Address).Offset(0, -6) = .Range(Cible.Address).Offset(0, 1)
Range(rf.Address).Offset(0, -5) = .Range(Cible.Address).Offset(0, 2)
nb = nb + 1
Exit For
End If
Next Cible
End With
End If
Next rf
MsgBox "La recherche est terminée. il y a " & nb & " référence/s correspondante/s."
End Sub
Merci d'avance pour vos idées.
Buzuzima
Bonjour,
Je souhaiterai rajouter une fonctionnalité à la macro :
Colorier le texte cible recherché dans la colonne R de la feuille METIER
For Each rf In Range("J2:J" & Cells(Rows.Count, 2).End(xlUp).Row)
If rf <> "" Then
With Sheets("METIER")
For Each Cible In .Range("R2:R" & .Cells(Rows.Count, 3).End(xlUp).Row)
If InStr(Cible, rf) = 0 Then
' MsgBox "Non"
Else
' MsgBox "Oui"
'ad = rf.Address
Range(rf.Address).Offset(0, -9) = .Range(Cible.Address).Offset(0, -15)
Range(rf.Address).Offset(0, -8) = .Range(Cible.Address).Offset(0, -13)
Range(rf.Address).Offset(0, -7) = .Range(Cible.Address).Offset(0, -12)
Range(rf.Address).Offset(0, -6) = .Range(Cible.Address).Offset(0, -11)
nb = nb + 1
Exit For
End If
Next Cible
End With
End If
Next rf
MsgBox "La recherche est terminée. il y a " & nb & " référence/s correspondante/s."
Merci d'avance pour vos idées.
Cordialement,
Je souhaiterai rajouter une fonctionnalité à la macro :
Colorier le texte cible recherché dans la colonne R de la feuille METIER
For Each rf In Range("J2:J" & Cells(Rows.Count, 2).End(xlUp).Row)
If rf <> "" Then
With Sheets("METIER")
For Each Cible In .Range("R2:R" & .Cells(Rows.Count, 3).End(xlUp).Row)
If InStr(Cible, rf) = 0 Then
' MsgBox "Non"
Else
' MsgBox "Oui"
'ad = rf.Address
Range(rf.Address).Offset(0, -9) = .Range(Cible.Address).Offset(0, -15)
Range(rf.Address).Offset(0, -8) = .Range(Cible.Address).Offset(0, -13)
Range(rf.Address).Offset(0, -7) = .Range(Cible.Address).Offset(0, -12)
Range(rf.Address).Offset(0, -6) = .Range(Cible.Address).Offset(0, -11)
nb = nb + 1
Exit For
End If
Next Cible
End With
End If
Next rf
MsgBox "La recherche est terminée. il y a " & nb & " référence/s correspondante/s."
Merci d'avance pour vos idées.
Cordialement,
Bonjour,
Ce serait plus profitable si vous mettez le fichier avec l'exemple sur https://www.cjoint.com/
et poster le lien reçu.
Ce serait plus profitable si vous mettez le fichier avec l'exemple sur https://www.cjoint.com/
et poster le lien reçu.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question