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


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    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

  2. #2
    Expert éminent
    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
    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

    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 remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    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...
    Vous avez apprécié la réponse? =>
    ---------------

  5. #5
    Expert éminent
    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
    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

  7. #7
    Responsable
    Office & Excel

    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 remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    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...
    Vous avez apprécié la réponse? =>
    ---------------

  8. #8
    Membre expert
    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
    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

###raw>template_hook.ano_emploi###