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
NextLa 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 iIci, 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 :
Voici ce que j'obtiens :
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.