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 Sub

Je 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 Sub

Je 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 i

Merci

Rechercher des sujets similaires à "trouver chaine caractere valeur"