1 pièce(s) jointe(s)
[VBA] Problème avec l'évenement Worksheet_Change après un coller de données
Bonjour à tous et toutes,
J'ai besoin de vos lumières car après un collage de donnée, ma fonction vlookup (recherchev) incluse dans l'événement Worksheet_Change(ByVal Target As Range) génère une erreur.
Finalité :
Coller des références d'articles figurant dans un classeur lamba dans mon classeur [commande.xls] et qu'après le collage (spécial ou pas), la désignation de ces références s'affiche automatiquement dans la colonne à coté.
Et cela sans aucune formule dans les cellules du classeur. La recherche vlookup étant placée dans un événement Worksheet_Change qui par définition s'exécute quand des cellules sont modifiées. Pour info, le tableau avec le couple ref/designation se situe dans l'onglet "base article".[/FONT]
Le problème:
Après un collage, mon événement Worksheet_SelectionChange s'execute bien mais ma vlookup me retourne le message d'erreur 1004.
La recherche fonctionne pourtant comme il faut quand je rentre une référence manuellement.
Mon code VBA dans la feuille "commande"
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| Private Sub Worksheet_Change(ByVal Target As Range)
' Protection des erreurs
On Error GoTo err:
' Eviter que l'événement se rappelle à lui-meme lorsqu'il ajoutera les
' données dans la colonne B
Application.EnableEvents = False
' Declaration des variables
Dim sh_art As Worksheet
Dim plage As String
' Affectation,
' Ma feuille ou se situe le tableau référence/désignation des articles
Set sh_art = Worksheets("base_article")
' Plage de référence où se trouve mes données pour ma Recherchev (vlookup)
plage = "A2:B100"
' Avant de faire ma recherchev, je m'assure :
' - d'être situé dans la colonne A (target.column = 1)
' - d'être au moins sur la ligne 2 (target.row > 1)
' - ma sélection ne dépasse pas 2 colonnes sinon N/A dans les colonnes suivantes (Target.Columns.Count = 1)
' - et que target.value ne soit pas vide Target.Value <> ""
Debug.Print ("Valeur actuelle:" & Target.Value)
Debug.Print (Target.Column)
Debug.Print (Target.Row)
Debug.Print (Target.Columns.Count)
If Target.Value <> "" And Target.Column = 1 And Target.Row > 1 And Target.Columns.Count = 1 Then
' le résultat de la recherchev s'affiche dans la colonne B (Target.Offset(0, 1).Value)
Target.Offset(0, 1).Value = ""
Target.Offset(0, 1).Value = WorksheetFunction.VLookup(Target.Value, sh_art.Range(plage), 2, 0)
Target.Offset(0, 1).Font.ColorIndex = 1
Application.EnableEvents = True
End If
Exit Sub
' Si aucune reférence n'est trouvée,
' interception de l'erreur 1004 retournée par Vlookup
err:
If Target.Column = 1 And Target.Row > 1 And Target.Columns.Count = 1 Then
Target.Offset(0, 1).Value = CvErr(xlErrNa)
Target.Offset(0, 1).Font.ColorIndex = 3
Application.EnableEvents = True
End If
End Sub |
J'avoue que je sèche un peu et j'ai passé trop de temps dessus pour avoir le recul nécessaire sur la solution.
Si quelqu'un pouvait m'éclairer :)
Edit: j'ai modifié le script concernant la génération d'un vrai message d'erreur.
Le fichier "commande.xls"