Trouver une chaine de caractère pour avoir une valeur de cellule
Bonjour,
J'ai un fichier provenant d'une DB dans lequel se trouve sur chaque ligne des informations sur des produits. Il y a entre autre, le code fournisseur colonne Y et un code unique colonne Z.
Je désire faire une recherche du code fournisseur et avoir comme résultat le UNIQUEID (colonne Z).
Le Problème est que parfois, il y a plusieurs codes fournisseurs dans la même cellule ce qui m’empêche de faire un match sur la cellule.
ex: je dois recherche le code 88504 dans un cellule comportant 2258,088504C.
J'ai pensé à InStr mais je sèche ...
Voici ma macro :
Sub InjcetUNIQUEID()
Dim d As Object, e As Object, n&, i&
Set d = CreateObject("Scripting.Dictionary")
Set e = CreateObject("Scripting.Dictionary")
wbs = ActiveSheet.Range("G1")
With Workbooks(wbs).Worksheets(1)
n = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = 1 To n
d(.Cells(i, 1).Value) = .Cells(i, 26)
e(.Cells(i, 1).Value) = .Cells(i, 25)
Next i
End With
With ThisWorkbook.Worksheets("Feuil1")
n = .Cells(.Rows.Count, 1).End(xlUp).Row
Application.ScreenUpdating = False
For i = 2 To n
Matchd = d(.Cells(i, 1).Value)
Matche = e(.Cells(i, 1).Value)
If .Cells(i, 1).Value <> "" Then If InStr(1, e(.Cells(i, 1).Value), .Cells(i, 1)) > 0 Then .Cells(i, 2) = d(.Cells(i, 1).Value)
Next i
End With
End SubJe vous joint un extrait du fichier
Merci pour vos aides ...
Loadlucas
Bonjour Loadlucas et le forum,
Sans tenir compte du code j'ai rajouté une colonne après la colonne Y pour extraire le code fournisseur tel que vous le recherchez. Peut-être que cela vous conviendrait?
Bonjour,
Merci pour votre réponse mais dans le fichier db les colonnes A et B n'existent pas ...
il faudrait que je gère cela via un autre fichier dans lequel j'ai la macro me permettant d'effectuer ce match.
J'encoderais tous mes codes en colonne A du fichier et la macro irait faire la concordance dans le fichier DB en comparant mon code colonne A à la cellule du fichier DB colonne 25
Donc :
Fichier OUTILS :
COLONNE A = 88504
Fichier DB :
COLONNE Y = 2542,088504C, 45487
=> 88504 se trouve bien dans la cellule COLONNE Y du fichier donc :
Fichier OUTILS :
renvoi de l'information de la cellule Z du fichier DB
Je profite pour corriger le fichier DB
et voici donc ma macro adaptée (qui ne fonctionne toujours pas) :
Sub InjectUNIQUEID()
Dim d As Object, e As Object, n&, i&
Set d = CreateObject("Scripting.Dictionary")
Set e = CreateObject("Scripting.Dictionary")
wbs = ActiveSheet.Range("G1")
With Workbooks(wbs).Worksheets(1)
n = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = 1 To n
d(.Cells(i, 1).Value) = .Cells(i, 24)
e(.Cells(i, 1).Value) = .Cells(i, 23)
Next i
End With
With ThisWorkbook.Worksheets("Feuil1")
n = .Cells(.Rows.Count, 1).End(xlUp).Row
Application.ScreenUpdating = False
For i = 2 To n
Matchd = d(.Cells(i, 1).Value)
Matche = e(.Cells(i, 1).Value)
If .Cells(i, 1).Value <> "" Then If InStr(1, e(.Cells(i, 1).Value), .Cells(i, 1)) > 0 Then .Cells(i, 2) = d(.Cells(i, 1).Value)
Next i
End With
End Sub
Merci
Bonjour,
Je vais simplifier ma demande.
J'ai revu ma macro et je l'ai simplifiée.
Elle fonctionne mais avec un .Exists
J'aimerais remplacer le .Exists par un Instr afin de savoir si la chaine de caractère recherchée existe dans la string :
Voici ma macro :
Sub InjectUNIQUEID02()
Dim d As Object, n&, i&, wbf$
Set d = CreateObject("Scripting.Dictionary")
' Comparaison dans un fichier dont le nom est spécifié dans G1 :
wbs = ActiveSheet.Range("G1")
With Workbooks(wbs).Worksheets(1)
n = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = 1 To n
d(.Cells(i, 23).Value) = .Cells(i, 24)
Next i
End With
With ThisWorkbook.Worksheets("Feuil1")
n = .Cells(.Rows.Count, 1).End(xlUp).Row
Application.ScreenUpdating = False
For i = 2 To n
If .Cells(i, 1).Value <> "" Then If d.exists(.Cells(i, 1).Value) Then .Cells(i, 2) = d(.Cells(i, 1).Value)
Next i
End With
End SubJe désire donc remplacer le .Exists de cette ligne par in Instr :
For i = 2 To n
If .Cells(i, 1).Value <> "" Then If d.exists(.Cells(i, 1).Value) Then .Cells(i, 2) = d(.Cells(i, 1).Value)
Next iMerci