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 :

problème sur bouton quitter [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 5
    Points : 5
    Points
    5
    Par défaut problème sur bouton quitter
    Bonjour je fais appel à vous pour un problème sur lequel je bute lamentablement.
    en excel 2010 vba j'ai un userform1 avec un textbox dans lequel j'ai mis à la sortie un contrôle qui fonctionne pour obliger la saisie. Le problème est que si je veux utliser mon bouton quitter sans rien faire il revient sur le contrôle alors qu il n 'est pas utile si je veux sortir sans rien faire .
    J'ai essayé de résoudre cela sans y arriver . Peut-être que quelqu'un pourra m'aider cordialement.
    je joins un classer test
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    sans voir ton code et la structure du Userform, pas évident.

    Je pencherai pour un focus positionné par défaut sur le TextBox.

    Le plus simple serait de placer le focus sur le bouton de fermeture lors de l'initialisation du formulaire

    exemple (adapter le nom du bouton si besoin)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_Initialize()
        Me.CommandButton1.SetFocus
    End Sub

  3. #3
    Futur Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 5
    Points : 5
    Points
    5
    Par défaut excel2010
    merci pour ta réponse rapide mais cela ne fonctionne pas si on se positionne sur le textbox 1 donc la vérification faite sur le texte box1 reste activée.
    j 'ai joins un fichier test pour trouver une solution.
    résumé
    si je veux sortir avec le bouton de mon formulaire quelque soi endroit ou je suis je désire que les vérifications de texte1 soit inhibées.
    j'ai énormément de textbox et combobox et les utilisateurs peuvent aller dessus sans enregistrer et vouloir sortir sans etre obligé a remplir textbox 1
    je désirerai que la vérification soit valable que si l on rempli ce formulaire

  4. #4
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 924
    Points
    55 924
    Billets dans le blog
    131
    Par défaut
    Salut.

    Déplace le code de l'évènement Exit vers l'évènement BeforeUpdate

    NB: Exit Sub ne sert à rien dans ton code (et ne sert à rien d'une façon générale, à part écrire un code pourri )
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Tu peux effectuer le contrôle plutôt sur l'évènement click du bouton que le Exit du TextBox ?


    EDIT : bonjour Pierre, je ne pense jamais à BeforeUpdate

  6. #6
    Futur Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 5
    Points : 5
    Points
    5
    Par défaut problème non résolu
    Citation Envoyé par Pierre Fauconnier Voir le message
    Salut.

    Déplace le code de l'évènement Exit vers l'évènement BeforeUpdate

    NB: Exit Sub ne sert à rien dans ton code (et ne sert à rien d'une façon générale, à part écrire un code pourri )


    J'a imis le code de l évenement dans beforeupdate . Effectivement il n y a plus de blocage avec le bouton exit sauf que' il n y a plus de contrôle dans mon textebox. Qui peut me trouver une solution pour que le contrôle exoste sur textbox et que le bouton sortie fonctionne . Si joint fichier test pour effectuer les tests et me retourner quand cela fonctionne merci a vous désolé de vous solliciter encore
    Fichiers attachés Fichiers attachés

  7. #7
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 924
    Points
    55 924
    Billets dans le blog
    131
    Par défaut
    Ok. Je comprends mieux ton problème.

    Je n'y vois pas de solution, en tout cas sans usine à gaz, puisque l'évènement EXIT survient lorsque tu quittes le contrôle, avant qu'un autre contrôle reçoive le focus (sur l'évènement ENTER). Ca doit être pour cela que je ne fais jamais la vérification de l'absence de saisie à la sortie du contrôle, mais lorsque je vais cliquer sur Valider ou un autre bouton de sortie du userform.

    Une solution consiste à tester, lorsque tu rentres dans un contrôle, que tu viens de quitter textbox1. Le problème, c'est que tu vas devoir déployer le code pour tous les contrôles susceptibles de prendre le focus, à l'exception de ceux qui doivent permettre de sortir de textbox1 sans contrôle (dans le cas présent, juste le bouton de commande). L'idée est d'enregistrer dans une variable du module que tu rentres dans Textbox1. Lorsque tu rentres dans un autre contrôle, tu regardes d'où tu viens et si tu viens de textbox1, tu regardes s'il est vide ou pas. S'il est vide, tu y retournes, s'il ne l'est pas, tu remets la variable du module à False.

    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
    Option Explicit
     
    Private PreviousIsTextBox1 As Boolean
     
    Private Sub CommandButton1_Click()
      If MsgBox("Etes-vous sur de vouloir quitter ?", vbYesNo + vbQuestion, "Attention!!!") = vbYes Then
        Unload Me
      End If
    End Sub
     
    Private Sub TextBox1_Enter()
      PreviousIsTextBox1 = True
    End Sub
     
    Private Sub TextBox2_Enter()
      If PreviousIsTextBox1 Then TestTextBox1
    End Sub
     
    Sub TestTextBox1()
      If TextBox1.Value = "" Then
        MsgBox "Vous devez remplir textbox1"
        TextBox1.SetFocus
      Else
        PreviousIsTextBox1 = False
      End If
    End Sub


    Je suis loin d'être certain que ce sera facile à gérer pour plus de contrôles à vérifier, lorsque tu auras plus d'évènements et que ceux-ci seront plus fournis. Perso, je m'en tiendrais à la solution de vérifier lors de la demande de fermeture.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 814
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Une autre solution, peut-être plus simple, serait d'envisager une autre "porte de sortie".
    Un autre événement du TextBox1 qui autoriserait la sortie.

    Exemple avec l'événement DblClick()
    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
    Private SortieAutorisee As Boolean
     
    Private Sub CommandButton1_Click()
        If MsgBox("Etes-vous sur de vouloir quitter ?", vbYesNo + vbQuestion, "Attention!!!") = vbYes Then
            Unload Me
        End If
    End Sub
     
    Private Sub TextBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
        SortieAutorisee = True
    End Sub
     
    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
        If Not SortieAutorisee Then
            '  procedure pour obliger la saisie
            If TextBox1.Text <> "" Then
                TextBox1.BackColor = RGB(255, 255, 255)
                'si oui, que doit-il se passer
                TextBox2.SetFocus
            Else
                'si non
                TextBox1.BackColor = RGB(255, 0, 0)
                Cancel = True
                With Me.TextBox1
                    .SetFocus
                    .SelStart = 0
                    .SelLength = Len(.Text)
                End With
                MsgBox "Veuillez renseigner la rubrique  obligatoirement !"
            End If
        End If
    End Sub
    Un double-clic dans le TextBox1 en permet la sortie et donc le clic sur le bouton de commande.
    Cordialement,
    Franck

  9. #9
    Futur Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par pijaku Voir le message
    Bonjour,

    Une autre solution, peut-être plus simple, serait d'envisager une autre "porte de sortie".[...]



    MErci bien a vous tous vous êtes efficace

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

Discussions similaires

  1. Problème sur un bouton
    Par marcello2 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 20/11/2007, 19h40
  2. Problème sur bouton "Précédent"
    Par MAMANHOU dans le forum IHM
    Réponses: 2
    Dernier message: 06/07/2007, 13h29
  3. Réponses: 2
    Dernier message: 04/06/2007, 14h44
  4. Aide pour petit problème sur bouton
    Par jeanfly dans le forum Flash
    Réponses: 3
    Dernier message: 14/05/2007, 16h25
  5. [C#]Problème sur composant perso (Bouton Transparent)
    Par SLE dans le forum Windows Forms
    Réponses: 1
    Dernier message: 06/10/2005, 00h12

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