Microsoft 365 Attente entre 2 sendkeys

Laurent78

XLDnaute Occasionnel
Bonjour à Tous,
Quelqu'un ici saura-t-il m'expliquer le fonctionnement bizarre que j'obtiens avec le code ci-dessous.

VB:
Sub aaa()
'    Application.Wait (Now + TimeValue("0:00:02"))
    Call CTRL_P
'    DoEvents
'    Application.Wait (Now + TimeValue("0:00:05"))
    For i = 1 To 100000000
    Next i
    Call ESC
End Sub

Sub CTRL_P()
Dim Wsh As Object
    Set Wsh = CreateObject("WScript.Shell")
    Wsh.SendKeys "^p", True
    Set Wsh = Nothing
End Sub

Sub ESC()
Dim Wsh As Object
    Set Wsh = CreateObject("WScript.Shell")
    Wsh.SendKeys "{ESC}", True
    Set Wsh = Nothing
End Sub

Lorsque j'appelle la macro aaa depuis une feuille Excel (ALT + F8), je n'obtiens pas l'effet souhaité : je voudrais ouvrir la fenêtre d'Impression, attendre un peu, puis la fermer en envoyer la touche ESC. L'attente se fait directement au début et non pas entre les deux SendKeys.
Par ailleurs, si je fais un DoEvents juste après le "Call CTRL_P", alors, j'ai la très vieille fenêtre d'impression qui s'affiche.
J'ai essayé avec le SendKey de l'application, même résultat. Idem sur différentes versions d'Excel et 32 ou 64 bits.
Bref, c'est très bizarre.

Si quelqu'un a une idée ...
Merci

PS : je suis tombé sur ce problème en essayant de cocher "Accès approuvé au modèle d'objet du projet VBA" dans les options d'Excel.

Bonne semaine,
Laurent
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Laurent,
Je pense qu'il manque un DoEvents dans le Ctrl_P.
En PJ vos macros instrumentées avec des impression Timer dans les deux macros.
Sans ce DoEvents les deux macros s'exécutent puis rendent la main à l'ouverture de fenêtre impression. ( vous pouvez tester en mettant le DoEvents en commentaire )
Avec le DoEvents on exécute le Ctrl_P puis on rend la main avant d'exécuter la seconde macro.
 

Pièces jointes

  • Sentkeys.xlsm
    15.7 KB · Affichages: 9

Laurent78

XLDnaute Occasionnel
Bonjour, tout d'abord merci de me donner un coup de main. Malheureusement, cela ne fonctionne pas, la macro ouvre la vieille fenêtre d'impression et non pas la nouvelle, c'est très étrange.
1607358258270.png
 

Laurent78

XLDnaute Occasionnel
Pour être plus précis : CTRL + P affiche la fenêtre d'impression avec l'aperçu et le senKeys ^p affiche la "petite" fenêtre d'impression avec les choix d'imprimante etc, mais pas l'aperçu. Et le truc vraiment bizarre, c'est que lorsque j'exécutais la macro sans le SendKey ESC, j'arrivais bien sur la fenêtre d'aperçu et plus maintenant. J'ai l'impression d'avoir un fonctionnement assez aléatoire.
 

job75

XLDnaute Barbatruc
Bonsoir Laurent78, sylvanu,
VB:
Sub aaa()
CTRL_P
Application.OnTime Now + 5 / 86400, "ESC" 'attente 5 secondes
End Sub

Sub CTRL_P()
CreateObject("WScript.Shell").SendKeys "^p"
End Sub

Sub ESC()
CreateObject("WScript.Shell").SendKeys "{ESC}"
End Sub
A+
 

Laurent78

XLDnaute Occasionnel
c'est exactement ca pour obtenir la fentre #5
Bonsoir, merci pour l'idée, mais en fait, comme précisé dans mon PS du premier post, c'est pour aller cocher "Accès approuvé au modèle d'objet du projet VBA" dans les options d'Excel. Malgré plusieurs jours d'essais infructueux, cela ne veut pas fonctionner et semble assez instable. Du coup, j'ai réduis le problème, mais sans succès.
 

Laurent78

XLDnaute Occasionnel
Pour ceux qui essaient de me donner un coup de main, je vais essayer d'être un peu plus clair :
Le but final est d'aller cocher une case dans les options d'Excel. Mais comme cela ne fonctionnait pas, j'ai réduis le problème, à savoir, faire un SendKeys CTRL+p pour ouvrir l'aperçu, patientez quelques instants et refaire un SendKeys ESC pour fermer l'aperçu. Mes essais ne sont pas concluants. Merci.