Boucle sur Vlookup génération d'erreur
Bonjour à tous,
Je souhaite effectuer un Vlookup sur chaque nombres d'une cellule qui contient plusieurs nombres séparés par un ";" ex : ( 165;164;204 ) pour voir si chaque nombres est bien présent dans une liste de nombre que j'ai dans une autre feuille.
J'effectue au préalable un split de cette cellule (B2 dans le code) pour pouvoir séparer les nombres des ";" ils sont alors dans un tableau puis je lance une boucle Vlookup sur les nombres afin de savoir si ils sont bien présent dans la liste (en feuil2).
Au final mon objectif est juste de savoir si les nombres dans cette cellule sont bien présent dans ma liste et si non que cela me sorte une erreur.
Actuellement avec le code ci dessous j'ai bien une boucle sur le vlookup qui s'effectue mais peu importe que le nombre soit dans la liste de nombre en Feuil 2 il compte tout comme une erreur.
Pourriez vous m'aider sur le sujet ?
Dim s As String
Dim a1() As String
Dim a2() As Variant
Dim t As Integer
If Sheets("Feuil1").Range("A2") = "Supervisor" Then
If IsEmpty(Sheets("Feuil1").Range("B2")) Then
Sheets("Feuil1").Range("B2").Borders.ColorIndex = 3
count = count + 1 'décompte d'erreur qui est présent sur d'autre ligne de code'
Else
s = Sheets("Feuil1").Range("B2").Value
a1 = Split(s, ";")
ReDim a2(LBound(a1) To UBound(a1))
For t = LBound(a1) To UBound(a1)
a2(t) = Application.VLookup(Trim(a1(t)), Sheets("Feuil2").Range("A2:A107"), 1, False)
If IsError(a2(t)) Then
MsgBox Err.Number
Sheets(nomTrigger).Range(Letter & y).Borders.ColorIndex = 3
count = count + 1
Else
Sheets(nomTrigger).Range(Letter & y).Borders.LineStyle = xlLineStyleNone
End If
Next
End If
End IfBonjour
Peut être un problème de type, si d'un coté on a des string et de l'autre des double?
Sinon :
Sub verifPresence()
Dim tb()
Dim dc As Object
Dim i!
Set dc = CreateObject("Scripting.Dictionary")
tb = Application.Transpose(Array(Split(Sheets("Feuil1").Range("B2").Value, ";")))
For i = 2 To 108
dc(CStr(Sheets("Feuil2").Range("A" & i).Value)) = ""
Next i
ReDim Preserve tb(1 To UBound(tb), 1 To 2)
For i = 1 To UBound(tb)
If dc.exists(CStr(tb(i, 1))) Then tb(i, 2) = 1 Else tb(i, 2) = 0
Next i
Sheets("Feuil1").Range("D2").Resize(UBound(tb, 1), 2) = tb
End SubBonjour yal_excel,
En effet le problème concernait les types.
Merci beaucoup pour la proposition elle m'a été utile !