Extraire le premier mot d'une chaîne et le comparer avec une collection

Bonjour,

Je suis à la recherche d'une solution pour extraire le premier mot d'une chaîne contenue dans chaque cellule d'une série de cellules (NbRows) et le comparer avec chacun des éléments d'une collection tierce.

Un mot donné est associé à une IDCAT comme vous pouvez le voir ci-dessous. Ex : BOISSONS a pour IDCAT 133 etc...

Voici un premier code VBA :

    'test préliminaire
    espace = InStr(1, Sheets(1).Cells(7, 9).Value, " ") 
    'test préliminaire
    world = Mid(Cells(7, 9), 1, espace)                

    Dim myData As Collection
    Set myData = New Collection

    Dim searchFor As String
    Dim iCtr As Integer

    myData.Add "133", "BOISSONS"
    myData.Add "111", "BARRES"
    myData.Add "110", "ETUI"
    myData.Add "133", "SMOOTHIE"
    myData.Add "110", "GOURDE"
    myData.Add "114", "GEL"

    itemCount = myData.Count

    For i = 2 To NbRows Step 1
        For iCtr = 1 To itemCount
            espace = InStr(1, Sheets(1).Cells(i, 9).Value, " ")
            searchFor = Mid(Cells(i, 9), 1, espace)
            If myData(iCtr) = searchFor Then           
                Sheets(1).Cells(i, 28).Value = myData(iCtr)
            End If
        Next
    Next

La première étape consistant en l'extraction du premier mot est effective. C'est à la deuxième que cela coince.

Merci de votre aide.

Bonjour Aphrodite,

Je recommanderais d'utiliser un Dictionary au lieu d'une Collection. Les Dictionary vous permettent de rechercher des clés de manière plus efficace que les Collections.
A tester :

Dim myData As Object
Set myData = CreateObject("Scripting.Dictionary")

myData.Add "BOISSONS", "133"
myData.Add "BARRES", "111"
myData.Add "ETUI", "110"
myData.Add "SMOOTHIE", "133"
myData.Add "GOURDE", "110"
myData.Add "GEL", "114"

Dim searchFor As String
Dim espace As Integer

For i = 2 To NbRows Step 1
    espace = InStr(1, Sheets(1).Cells(i, 9).Value, " ")
    searchFor = Mid(Cells(i, 9), 1, espace - 1) ' espace - 1 pour ne pas inclure l'espace dans le mot recherché
    If myData.Exists(searchFor) Then           
        Sheets(1).Cells(i, 28).Value = myData(searchFor)
    End If
Next i

Ici, les mots sont les clés et les IDCATs sont les valeurs dans le dictionnaire. La méthode Exists de Dictionary est utilisée pour vérifier si le mot existe en tant que clé dans le dictionnaire. Si c'est le cas, alors l'IDCAT correspondant est inséré dans la cellule de la colonne 28.

Bonjour,

Voici ce que je veux :

image

Voici ce que j'obtiens :

image

J'ai inséré votre code. Rien ne s''est produit.

Si j'insère la ligne Sheets(1).Cells(i, 28).Value = myData.Item("ETUI") en guise de simple test dans une boucle for, cela fonctionne bien : 110 se met sur toutes les lignes.

J'ai vérifié pas à pas avec avec MsgBox.

C'est dans ces instructions que cela coince :

If myData.Exists(searchFor) Then
'Sheets(1).Cells(i, 28).Value = myData(searchFor)
'MsgBox (searchFor)

myData(searchFor) pose problème à mon avis.

Aphrodite.

Abderrahmane, si on y arrive pas, ce n'est pas grave. On fait ce que l'on peut dans la vie.
Rechercher des sujets similaires à "extraire premier mot chaine comparer collection"