Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Général VBA
Général VBA Forum général VBA . Pour les logiciels spécifiques (Access, Excel, Word, ...), postez dans les bons sous forums.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/07/2007, 22h50   #1
Futur Membre du Club
 
Inscription : août 2006
Messages : 85
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 85
Points : 16
Points : 16
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
jeje22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2007, 01h38   #2
Membre du Club
 
Inscription : mars 2007
Messages : 44
Détails du profil
Informations personnelles :
Localisation : France, Yvelines (Île de France)

Informations forums :
Inscription : mars 2007
Messages : 44
Points : 40
Points : 40
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+
durdesfois est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2007, 04h52   #3
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 625
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 625
Points : 30 922
Points : 30 922
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
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
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/07/2007, 16h11   #4
Expert Confirmé Sénior

 
Avatar de cafeine
 
Inscription : juin 2002
Messages : 3 882
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 3 882
Points : 4 500
Points : 4 500
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 :
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.
__________________
Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème

Développez une application de gestion des comptes bancaires dans Access de A à Z
Déjà 12 tutoriels, le dernier en date : Comment faire un TextBox auto-extensible dans un formulaire ?


cafeine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/08/2009, 15h42   #5
Invité de passage
 
Inscription : 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
Type de fichier : doc Macro.doc (35,5 Ko, 4 affichages)
benoitbt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2009, 12h39   #6
Membre à l'essai
 
Inscription : février 2009
Messages : 45
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 45
Points : 21
Points : 21
Sans forcer sa donne
Code :
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 ^
RootsInternationnal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2009, 22h07   #7
En attente de confirmation mail
 
Inscription : février 2005
Messages : 1 731
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : février 2005
Messages : 1 731
Points : 2 010
Points : 2 010
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 :
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 :
Application.OnTime Now + TimeValue("00:00:02"), "TrackMsgBox"
Bon courage !
_
=JBO= est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2009, 22h15   #8
En attente de confirmation mail
 
Inscription : février 2005
Messages : 1 731
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : février 2005
Messages : 1 731
Points : 2 010
Points : 2 010
Citation:
Envoyé par RootsInternationnal Voir le message
Sans forcer sa donne
Code :
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 :
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 .
_
=JBO= est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2009, 09h16   #9
Membre à l'essai
 
Inscription : février 2009
Messages : 45
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 45
Points : 21
Points : 21
Merci =JBO=
meme si à moi sa ne me servira pas !
Je prend note de la commande, c'est bon à savoir
Code :
    SendKeys "{ENTER}", False
Et
RootsInternationnal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2009, 09h32   #10
En attente de confirmation mail
 
Inscription : février 2005
Messages : 1 731
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : février 2005
Messages : 1 731
Points : 2 010
Points : 2 010
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 :
    SendKeys "{ENTER}", False
Et
En vérité, ça ne me servira pas non plus...

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

Bonne journée.
_
=JBO= est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h21.


 
 
 
 
Partenaires

Hébergement Web