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

VBA Discussion :

répondre oui à un msgbox


Sujet :

VBA

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 88
    Points : 47
    Points
    47
    Par défaut répondre oui à un msgbox
    Bonsoir,

    j'ai crée une fonction générale qui ouvre une msgbox et par laquelle je dois répondre oui ou non.
    Mais exceptionnellement, j'ai besoin de faire appel à cette fonction mais qui mettra oui automatiquement.

    Existe t-il une commande VBA qui mais oui à la fenêtre qui s'ouvre ?

    Merci

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 44
    Points : 50
    Points
    50
    Par défaut
    Bonne soirée,

    J' avoue ne pas comprendre.....

    Tu demandes une réponse que tu forceras à OUI , ... alors pourquoi poser le question ???

    Tu devrais remonter d'un niveau dans ton algorithme, et éviter ce genre de trappe.

    A+

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    La msgbox VB est une fonction qui retourne une valeur qu'il faut intercepter pour continuer (car cette boite est modale).

    Je ne pense pas que tu puisses forcer, pour quoi ne pas créer toi même ta msgbox personnelle, aprés tu fais ce que tu veux avec.

    Starec

  4. #4
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    en utilisant les APIs j'ai fait un formulaire de CLICK-YES rudimentaire qui traque les MsgBox Excel, toi d'adapter ...

    en voici le code

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    Option Explicit
     
    Private Declare Function GetDesktopWindow Lib "user32" () As Long
     
    Private Declare Function GetWindow Lib "user32" _
      (ByVal hwnd As Long, _
       ByVal wCmd As Long) As Long
     
    Const strConst As String = "mot spécial"
     
    Private Declare Function GetWindowText Lib "user32" _
       Alias "GetWindowTextA" _
      (ByVal hwnd As Long, _
       ByVal lpString As String, _
       ByVal cch As Long) As Long
     
     
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, _
        ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
     
     
    Private Declare Function GetClassName Lib "user32" _
       Alias "GetClassNameA" _
      (ByVal hwnd As Long, _
       ByVal lpClassName As String, _
       ByVal nMaxCount As Long) As Long
     
     
    Private Const GW_HWNDFIRST = 0
    Private Const GW_HWNDLAST = 1
    Private Const GW_HWNDNEXT = 2
    Private Const GW_HWNDPREV = 3
    Private Const GW_OWNER = 4
    Private Const GW_CHILD = 5
    Private Const BM_CLICK = &HF5
    Private Const WM_CLOSE = &H10
     
     
    Private Sub Form_Load()
     
    Me.TimerInterval = 2000
    Me.OnTimer = "=TrackMsgBox()"
     
    End Sub
     
     
    Private Function TrackMsgBox()
     
    Dim h0 As Long, h1 As Long, h2 As Long
     
    ' trouve le handle d'une msgbox Excel
    h0 = FindWindowLike(0, "Excel", "#32770")  'MsgBox générée par Excel
    If h0 <> 0 Then
        ' trouve le Handle du texte recherché
        h1 = FindWindowLike(h0, strConst, "Static") 'Cherche un mot particulier sur le msgbox
        If h1 <> 0 Then
     
            ' trouve le handle du bouton Yes
            h2 = FindWindowLike(h0, "&Yes", "button") 'Bouton Yes de la message Box
     
            Debug.Print "Click YES envoyé sur " & h2 & " @" & Format(Now, "hh:nn:ss")
     
            ' click sur le bouton
            SendMessage h2, BM_CLICK, 0, 0& 'envoie un click
        Else
            Exit Function
        End If
    Else
        Exit Function
    End If
     
    End Function
     
     
    Private Function FindWindowLike(ByVal hWndStart As Long, _
                                    WindowText As String, _
                                    ClassName As String) As Long
     
       Dim hwnd As Long
       Dim sWindowText As String
       Dim sClassname As String
       Dim r As Long
       Static level As Integer
     
       If level = 0 Then
          If hWndStart = 0 Then hWndStart = GetDesktopWindow()
       End If
     
       level = level + 1
     
       hwnd = GetWindow(hWndStart, GW_CHILD)
     
       Do Until hwnd = 0
     
          Call FindWindowLike(hwnd, WindowText, ClassName)
     
          sWindowText = Space$(255)
          r = GetWindowText(hwnd, sWindowText, 255)
          sWindowText = Left(sWindowText, r)
     
          sClassname = Space$(255)
          r = GetClassName(hwnd, sClassname, 255)
          sClassname = Left(sClassname, r)
     
          If (sWindowText Like "*" & WindowText & "*") Then
             If (sClassname = ClassName) Then
     
             FindWindowLike = hwnd
     
                Exit Do
             End If
          End If
     
          hwnd = GetWindow(hwnd, GW_HWNDNEXT)
     
       Loop
     
       level = level - 1
     
    End Function
    Cependant dans ton cas, il vaut peut être mieux adapter ton code.

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Août 2009
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Réponse automatique
    Bonjour,

    je suis débutant en VBA. Je veux également répondre de façon automatique à une Msgbox qui apparait à l'ouverture d'un fichier excel. (Je ne peux pas la contourner car c'est un fichier corporate dont je ne peux changer les macros)

    Cette boite contient le mot lan et la réponse est 'Oui'.

    J'ai essayé d'adapter ton script mais je n'y arrive pas

    Pourrais-tu m'aider?
    Voici pour info le script auquel j'ai tenté d'ajouter ta fonction.

    -> la boite de dialogue s'ouvre après le "Workbooks.Open Filename:=fichier" et bloque le reste de la macro
    Fichiers attachés Fichiers attachés

  6. #6
    Nouveau membre du Club
    Inscrit en
    Février 2009
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 45
    Points : 35
    Points
    35
    Par défaut
    Sans forcer sa donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    dim reponse as string  
       reponse = MsgBox(" Voulez vous continuer ? ", vbYesNo, "Erreur : Nombre de colis insuffissant")
     
                If reponse = vbNo Then
                    "ton parametre:mouarf:"
                End If

    je ne vois pas comment forcer un Msgbox ^

  7. #7
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,

    Citation Envoyé par benoitbt Voir le message
    J'ai essayé d'adapter ton script mais je n'y arrive pas

    Pourrais-tu m'aider?
    Le code de cafeine est prévu pour fonctionner dans Access, à partir d'un formulaire qui, après son ouverture, déclenche un Timer toutes les 2 secondes, auquel est associé l'exécution de la procédure TrackMsgBox().
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Form_Load()
     
    Me.TimerInterval = 2000
    Me.OnTimer = "=TrackMsgBox()"
     
    End Sub

    Tu ne dis pas dans quel application tu exécutes ce code !!!

    Par exemple, si tu travailles directement dans Excel, alors ça ne fonctionne pas tel quel: il faut adapter le code à ton application hôte !

    Par exemple, Excel possède aussi une fonctionnalité d'exécution différée, à savoir la méthode OnTime de l'objet Application.
    Mais l'exécution n'a lieu qu'une fois (ce n'est pas répétitif), donc il faut aussi penser à la relancer.

    Avec Excel, on pourrait imaginer quelque chose dans ce genre:
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.OnTime Now + TimeValue("00:00:02"), "TrackMsgBox"
    Bon courage !
    _

  8. #8
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Citation Envoyé par RootsInternationnal Voir le message
    Sans forcer sa donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    dim reponse as string  
       reponse = MsgBox(" Voulez vous continuer ? ", vbYesNo, "Erreur : Nombre de colis insuffissant")
     
                If reponse = vbNo Then
                    "ton parametre:mouarf:"
                End If

    je ne vois pas comment forcer un Msgbox ^
    En forçant un peu, ça donne ceci... (tu peux tester !)

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Sub MsgBoxYesAuto()
        Dim reponse As String
     
        SendKeys "{ENTER}", False
     
       reponse = MsgBox(" Voulez vous continuer ? ", vbYesNo, "Erreur : Nombre de colis insuffissant")
     
        If reponse = vbNo Then
            MsgBox "ton parametre:mouarf:"
        Else
            MsgBox "OUI automatique !!!"
        End If
    End Sub
    Pour conclure: et aussi .
    _

  9. #9
    Nouveau membre du Club
    Inscrit en
    Février 2009
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 45
    Points : 35
    Points
    35
    Par défaut
    Merci =JBO=
    meme si à moi sa ne me servira pas !
    Je prend note de la commande, c'est bon à savoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        SendKeys "{ENTER}", False
    Et

  10. #10
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour RootsInternationnal !

    Citation Envoyé par RootsInternationnal Voir le message

    meme si à moi sa ne me servira pas !
    Je prend note de la commande, c'est bon à savoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        SendKeys "{ENTER}", False
    Et
    En vérité, ça ne me servira pas non plus...

    ... mais c'est un efffet "marrant" !

    Bonne journée.
    _

Discussions similaires

  1. Comment créer un MsgBox oui/non
    Par JenTry dans le forum IHM
    Réponses: 4
    Dernier message: 24/08/2016, 15h05
  2. [XL-2003] Répondre automatiquement "Supprimer" à un MsgBox
    Par exqo77 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/07/2009, 14h27
  3. Réponses: 3
    Dernier message: 20/09/2006, 13h12
  4. Répondre à une msgbox
    Par ptitepunk dans le forum Access
    Réponses: 11
    Dernier message: 19/10/2005, 11h17

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