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 :

[E-03] Répétition Msgbox avec Worksheet_Change


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2008
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 240
    Par défaut [E-03] Répétition Msgbox avec Worksheet_Change
    Bonsoir,

    J'ai créé une base avec des renseignements sur une liste de clients de mon entreprise sur un onglet A, et une fiche sur un onglet B. Dans une des cellules de l'onglet B, les utilisateurs doivent indiquer un code client, et mon code va rechercher des renseignements concernant ce client sur l'onglet B et les reporte.
    Sachant que le code client comporte obligatoirement six chiffres, je fais apparaître une Msgbox au cas où l'utilisateur entre un code au mauvais format, ou un code qui n'existe pas.

    Pour tout cela, j'utilise l'événement Worksheet_Change.
    Tout fonctionne correctement sauf que la boîte qui indique le mauvais format apparaît deux fois en cas d'erreur. Une fois au moment où l'utilisateur change de cellule après avoir tapé son code, et une fois quand je réactive la cellule où il doit entrer le code.

    Malheureusement, je n'ai pas le code sur mon ordinateur personnel, mais est-ce que vous sauriez comment éviter ce détail?

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut neiluj26n et le forum
    Devant le manque d'information on ne peut que spéculer!
    Je suppose qu'en cas de mauvais code tu effaces la donnée ce qui déclenche un deuxième événement _Change.
    - Soit tu mets une variable globale qui se met à vrai, interdisant le traitement pour l'effacement
    - Soit tu ne traite pas si la cellule est vide
    - Soit tu bloques les évènements en entrée de macro et les débloques en sortie (Gestion d'erreurs impératives à mon sens).
    A+

  3. #3
    Membre éclairé
    Inscrit en
    Octobre 2008
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 240
    Par défaut
    Bonjour Gorfael et le forum.

    Effectivement, il n'y a pas beaucoup d'infos dans ma question.

    De mémoire, mon code donne ceci ("Fiche" étant la feuille que l'utilisateur doit remplir et "Clients" la feuille ou j'ai mis ma base) :

    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
     
    Private Sub Worksheet_Change(ByVal Target as Range)
     
    If Sheets("Fiche").Range("A2")<>"" then
       If Range("A2").Characters.Count = 6 Then
          With Sheets("Clients").Range("A2:A500")
             Set C = .Find (Sheets("Fiche").Range("A2")
                If Not C Is Nothing then
                   Sheets("Fiche").Range("B2") = Sheets("Clients").Cells(C.Row,2)
                End if
          End with
       Else
          MsgBox "Le code client doit être formé de six chiffres. Merci de le vérifier"
          Sheets("Fiche").Range("A2").Activate
       End if
    End if
    Bon, je suis encore un débutant, hein?

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut neiluj26 et le forum
    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
    Private Sub Worksheet_Change(ByVal Target as Range)
    dim C as range
    If intersect(target,[A2]) is nothing then exit sub
    'si les cellules modifiées ne concerne pas A2 on sort
    If Range("A2")<>"" then
    'on est sur la feuille "fiche"
       If Range("A2").Characters.Count = 6 Then
          With Sheets("Clients").Range("A2:A500")
             Set C = .Find (Sheets("Fiche").Range("A2")
             If Not C Is Nothing then [B2] = Sheets("Clients").Cells(C.Row,2)
          End with
       Else
          MsgBox "Le code client doit être formé de six chiffres. Merci de le vérifier"
          [A2].clearcontents
          'on efface A2
          [A2].select
       End if
    End if
    end sub
    Si ton code est bien celui proposé, pas grand chose à modifier, sauf le fait que la macro ne se lance que si A2 est concernée et qu'elle n'est pas vide. Pour le code erroné, je préfères effacer.

    Si ça persiste, mets un point d'arrêt sur la ligne de titre et effectue-la en pas-à-pas avec F8, en regardant à quel moment tu la relances.
    A+

  5. #5
    Membre éclairé
    Inscrit en
    Octobre 2008
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 240
    Par défaut
    Merci,

    j'ai un peu modifié ton code selon mes besoins, mais ça marche. Effectivement, si on efface la cellule, la msgbox ne se répète pas.

    Merci!

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

Discussions similaires

  1. MsgBox avec un titre
    Par Nounours1 dans le forum VBA Access
    Réponses: 1
    Dernier message: 06/12/2007, 21h21
  2. MSGBOX avec affichage de la valeur d'une ligne de formulaire
    Par quinquin59 dans le forum VBA Access
    Réponses: 1
    Dernier message: 22/11/2007, 18h39
  3. MsgBox avec RecordSet et requete
    Par binouzzz19 dans le forum VBA Access
    Réponses: 2
    Dernier message: 03/05/2007, 10h02
  4. Débutante - Code VBA pour MsgBox avec actions multiples
    Par kisscool35 dans le forum Access
    Réponses: 5
    Dernier message: 22/08/2006, 17h43
  5. [Débutant] MsgBox avec un zone de texte ?
    Par Cyphen dans le forum Access
    Réponses: 8
    Dernier message: 03/07/2006, 09h52

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