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 :

Fermeture d'une msgbox [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2014
    Messages : 35
    Par défaut Fermeture d'une msgbox
    Bonjour,
    après plusieurs recherches infructueuses, je me rapproche de vous pour solutionner mon problème.
    J'ai une USF avec un certain nombre de champs dont certains obligatoires et un bouton de validation.

    Lors du clic sur le bouton Validation, si l'un des champs obligatoires n'est pas renseigné, j'ouvre un msgbox. Lorsque je ferme cette boite de dialogue avec les boutons Ok ou annuler, j'aimerais que ma userfom reste ouverte. Actuellement le msgbox se ferme et dans le même temps, la USF disparait ce qui oblige l'utilisateur à reprendre toute la saisie.

    Voici le code de mon bouton validation

    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
    Private Sub Valide_Click()
     
    If Epave = True Then Range("c26") = "OUI"
    If Epave2 = True Then Range("c26") = "NON"
     
    If IsNull(Regulateur = "") Or (Demandeur = "") Or (Ville = "") Or (Immat = "") Then
    MsgBox "Les champs :" & Chr(10) & Chr(13) & "Régulateur, Demandeur, Ville, Marque et Immatriculation" _
    & Chr(10) & Chr(13) & "sont obligatoires", vbOKCancel + vbCritical
    End If
    'je souhaite que lorsque j'appuie sur le bouton "annuler", je revienne dans ma userform pour continuer le remplissage des champs
     
    Range("c6") = Regulateur.Value
    Range("c8") = Demandeur.Value
    Range("c9") = Date
    Range("c10") = Format(Now, "hh:mm")
    Range("c13") = Num
    Range("c14") = Voirie
    Range("c15") = Nom
    Range("c16") = Ville
    Range("c17") = RAS
    Range("c20") = Marque
    Range("c21") = Genre
    Range("c22") = Immat
    Range("c23") = Couleur1
    Range("c24") = Et
    Range("b6") = Trigramme.Value
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    Unload Me
    End Sub

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par art_bras_cames Voir le message
    Bonjour,

    Il faut terminer la macro Valide si les conditions ne sont pas réunies :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    If IsNull(Regulateur = "") Or (Demandeur = "") Or (Ville = "") Or (Immat = "") Then
     
         MsgBox "Les champs :" & Chr(10) & Chr(13) & "Régulateur, Demandeur, Ville, Marque et Immatriculation" & Chr(10) & Chr(13) & "sont obligatoires", vbOKCancel + vbCritical
     
         Exit Sub
     
    End If

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2014
    Messages : 35
    Par défaut Re
    Merci de ton aide,

    Je suis très novice en VBA, j'avais bien essayé un exit sub sauf que je l'avais posé après le End IF et bien sur ça ne fonctionnait pas.
    Bonne journée

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par art_bras_cames Voir le message
    Ce serait mieux de mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    If Epave = True Then Range("c26") = "OUI"
    If Epave2 = True Then Range("c26") = "NON"
    après la condition.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2014
    Messages : 35
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    Ce serait mieux de mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    If Epave = True Then Range("c26") = "OUI"
    If Epave2 = True Then Range("c26") = "NON"
    après la condition.
    OK merci

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    C'est le Unload Me qui ferme ton User Form.
    Si tu ne veux pas qu'il soit fermé, il faut que la macro ne passe pas par cette commande.

    Je vais apporter une modification à la proposition d'Eric KERGRESSE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    If IsNull(Regulateur = "") Or (Demandeur = "") Or (Ville = "") Or (Immat = "") Then
     
         If MsgBox "Les champs :" & Chr(10) & Chr(13) & "Régulateur, Demandeur, Ville, Marque et Immatriculation" & Chr(10) & Chr(13) & "sont obligatoires", vbOKCancel + vbCritical = vbCancel Then Unload Me
     
         Exit Sub
     
    End If
    [/QUOTE]

    Ainsi, si l'utilisateur appuie sur Cancel, il quitte le User Form mais sans que les valeurs soient transférée, ce qui laisse une porte de sortie.
    Sinon, l'option vbOKCancel de ton MsgBox ne sert à rien, autant mettre un simple vbOKOnly.

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

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