Problème programation vba fonction like

[Résolu/Fermé]
Signaler
-
 kmaillet -
Bonjour à tous,
Je vais essayer de vous présenter mon problème le plus clairement possible.
J'ai trois feuilles dans mon fichier excel :

- Opérations
- Equipements
- Sites test

J'ai 3 colonnes (avec des chaînes de caractère) que j'aimerais comparer :

- La colonne A de la feuille « Equipements »
- La colonne E de la feuille « Opérations ». Les chaînes de caractère de chaque cellule proviennent d'une liste à choix multiple qui marche très bien (les différents choix possibles correspondent aux cellules de la colonne A de la feuille « Equipements »).
- La colonne J de la feuille « Sites test ». Les chaînes de caractère de chaque cellule proviennent d'une liste à choix multiple qui marche très bien ((les différents choix possibles correspondent aux cellules de la colonne A de la feuille « Equipements »).


Je voulais que dès qu'un des résultats de la cellule E[n] d'«Opérations » est égal à un des résultats de la cellule J[i] de « Sites Test » alors la cellule K[i] de « Sites Test » est égal à la cellule A[n] d' « Opérations ».
La difficulté provient du fait que l'on a plusieurs chaînes de caractère par cellule pour les cellules E[n] et J[i], j'ai donc voulu comparer E[n] et J[i] aux cellules A[t] de la feuille « Equipements » puisque les chaînes composant les cellules E[n] et J[i] sont des A[t].
Voici donc le code que j'ai fait

Private Sub Affectation()
For i = 2 To 100
For n = 2 To 140
For t = 1 To 60
If Worksheets("Sites test").Range("J" & i) = Empty Then
ElseIf Worksheets("Opérations ").Range("E" & n) = Empty Then
ElseIf Worksheets("Opérations ").Range("E" & n).Value Like "*" + Worksheets("Equipements").Range("A" & t).Value + "*" And Worksheets("Sites test").Range("J" & i).Value Like "*" + Worksheets("Equipements").Range("A" & t).Value + "*" Then
Worksheets("Sites test").Range("K" & i).Value = Worksheets("Sites test").Range("K" & i).Value & " ; " & Worksheets("Opérations ").Range("A" & n).Value
End If
Next t
Next n
Next i

End Sub

Premièrement ce code est super long à exécuter (triple boucle), de plus il ne marche pas alors que le même code sans le deuxième «*» + ..... + « * » (donc juste avec ....) marche parfaitement. Je me suis donc dis que « * » devait en quelque sorte enregistrer une valeur, ce qui fausse totalement la deuxième partie de la condition if.
J'ai essayer ce code avec la fonction Instr , même résultat, j'ai aussi essayé de mettre des «* » & au lieu des « * »+, ça ne marche pas non plus.

Je suis arrivé à court d'idée. Pourriez vous m'aider à trouver ce qu'il ne va pas ? Et éventuellement comment faire la même chose avec un code moins long à exécuter ?

Merci d'avance





1 réponse

Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 642
Bonjour,

Il y a quelque chose que je ne saisis pas bien.
Si vos cellules col E feuille Opérations et col J feuille Sites tests sont remplies à l'aide de listes déroulantes basées sur les valeurs de la col A feuille Equipements, les chaînes de caractères devraient être identiques.
Du coup, je ne comprends pas bien :
on a plusieurs chaînes de caractère par cellule pour les cellules E[n] et J[i]
Bonjour pijaku,
Merci pour votre réponse.
Les cellules des colonnes E feuille Opérations et j feuille Sites tests sont remplies à l'aide de d'une liste à choix multiples. Le contenu de ces cellules est donc de la forme suivante (si l'on sélectionne plusieurs choix):
chaîne de caractères n°1
chaîne de caractères n°2
etc etc

Il y a une liste pour chaque colonne, elles sont indépendantes, les chaînes de caractères des cellules col E feuille opérations et col J feuille Sites tests ne sont donc pas forcément les même.

J'espère avoir bien répondu à votre question.
Je viens de régler le problème: certaines cellules de ma colonne A feuille "Equipements" étaient "Empty", ça faisait beuguer le tout. J'ai donc créé une condition if supplémentaire qui ne renvoie sur rien:
If Whorksheets("Equipements").Range("A"&t).Value = Emty Then
ElseIf......