IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[VBA] Problème avec l'évenement Worksheet_Change après un coller de données


Sujet :

Macros et VBA Excel

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 49
    Par défaut [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 : 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
    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"
    Fichiers attachés Fichiers attachés

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème avec l'apostrophe dans une requête
    Par mika0102 dans le forum VBA Access
    Réponses: 7
    Dernier message: 09/03/2019, 16h51
  2. [XL-2003] VBA problème avec la une boucle for range.end(xlup).row après suppression de lignes
    Par JohnNC115 dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 25/01/2011, 10h21
  3. [VBA] Problème avec composant VB6
    Par Diablo_22 dans le forum Général VBA
    Réponses: 8
    Dernier message: 16/03/2006, 20h41
  4. j'ai un problème avec les évenement et les variables !!
    Par cvb dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 06/12/2005, 11h03
  5. [Requete SQL en VBA] Problème avec la fonction FLOOR
    Par zubral dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/07/2004, 13h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo