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"
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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"
Partager