Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i&, k, CodePdV$, sh, j
Dim D As Object, T As Variant
sh = Array("Vision PDV", "Vision PDV 1") 'ici mettre vos autres pages
For k = 0 To 1 ' modifier ici le nombre de pages suivant le nombre dans le array
'Si le changement de valeurs est en B1
If Not Intersect(Target, Range("$B$1")) Is Nothing Then
'on cré un dictionnaire
Set D = CreateObject("scripting.dictionary")
'On récupère le code choisi
CodePdV = CStr(Target.Value)
'Avec la feuille Vision PDV
With Sheets("sh(k)")
'On récupère toutes les valeurs dans un tableau
'depuis A$ (Cell(2,1)
'Jusqu'a la dernière cellule remplie en colonne T .Cells(.Rows.Count, 20).End(3))
T = .Range(.Cells(2, 1), .Cells(.Rows.Count, 20).End(3))
End With
'Pour chaque ligne de notre tableau
For i = LBound(T, 1) To UBound(T, 1)
'Si la valeur en colonne 1 est égale au code choisi
If CStr(T(i, 3)) = CodePdV Then
'On incréménte j
j = j + 1
'L'entrée J du dictionnairte est égale aux valeurs ligne i colonne 11
'et valeur ligne i colonne 20 de notre tableau
D(j) = Array(T(i, 11), T(i, 20))
'Fin de la condition
End If
'Prochaine ligne du tableau
Next i
'On vide la plage utilisée sur la feuille (UsedRange)
Cells(3, 2).Resize(UsedRange.Rows.Count, 2).ClearContents
' si J > 0 (donc si il y a des entrées dans le dictionnaire
If j Then
'on colle les vbaleurs du dictionnaire
Cells(3, 2).Resize(j, 2) = Application.Index(D.Items, , 0)
'Sinon (si le dictionnaire est vide
Else
'On annonce la situation
MsgBox "Pas de données pour ce code", 64, "Fin du traitement"
'Fin de la condition des entrée du dictionnaire
End If
'Fin de la condition du changement de cellule
End If
Next
End Sub