Programme qui s'arrête

inouekun

XLDnaute Nouveau
Bonjour,
Je développe une macro sous excel 2010, cependant, j'ai un problème, à un moment donné, j'appuie sur un bouton, et de ce bouton, une pop-up apparait, où je souhaiterai cliquer sur "yes" dessus. De là, pas de problème, je sais comment faire, mais au moment où la pop-up apparait, le programme s'arrête et attends que je ferme manuellement la fenêtre et au bout d'un moment j'ai ce msg d'erreur qui apparait :
"Microsoft excel attend la fin de l'exécution d'une action OLE d'une autre application"
Il attends la fin de l'exécution de la pop-up sur laquelle j'aimerai avoir la main....
Alors si vous avez une idée pour que je puisse cliquer sur le "Yes" de la pop-up, car je ne peux pas demander à l'utilisateur de le faire, et je ne veux pas kill le processus, car j'ai besoin de valider cette fenêtre pour enregistrer les changements opérés
J'ai essayé en simulant le clavier dans le programme avant (après, ça ne sert à rien, vu que le programme ne continue pas)
Si vous avez une idée pour cliquer sur yes, ou continuer le programme, je vous en remercie

Code:
               Application.Wait Now + 10 / 3600 / 24
                        Application.SendKeys ("~")
                        
                        Application.DisplayAlerts = False
                        Call IE.document.parentWindow.execScript("popUpServParam('AcceptLvo?ID=" & id & "')", "JavaScript")
                        Application.SendKeys ("~")
                        Application.Wait Now + 2 / 3600 / 24
                        Application.SendKeys ("~")


Voilà, merci beaucoup pour votre aide.
Inouekun
 

inouekun

XLDnaute Nouveau
Re : Programme qui s'arrête

Bonjour,
Merci pour ta réponse, mais je ne comprends pas trop ce que tu veux dire.
Même sans les sendKey, ça bloque. (La macro s'arrête au niveau de la ligne qui ouvre la pop-up ou dialogue page, je ne suis pas sûre du nom)
Quand tu veux dire que sendkey ne fonctionne pas, tu veux dire que ça n'envoie pas le caractère ?
A toi de chercher ( indice , tape ça dans google Application.Wait Now + 2 / 3600 / 24)
Je dois avouer que je ne vois pas du tout quoi chercher.
Je suis un peu (beaucoup) perdue. :(
Car bon, je ne vois pas comment je peux envoyer une donnée à une page alors que la macro bloque totalement au moment de son ouverture.
Je suis désolée de t'embêter ^^"
Merci beaucoup pour ton aide, et pour l'indice que je ne comprends pas.
Bonne fin de journée
 

herve62

XLDnaute Barbatruc
Supporter XLD
Re : Programme qui s'arrête

En fait pour l'indice google , tu arrives sur une liste de site ( normal !!)
dedans au début il y a 2 sites à lire qui pourraient t'inspirer :
Developper.net et Géneration-nt
car comme par hasard ton temps du Wait est exactement le même que l'exemple ??
UN parle de perdre le FOCUS ce qui veut dire que le Pg boucle et t'as pu la main !!! ( ça ressemble ?)
disons que si j'avais à paramétrer le temps il y a par exemple: + timevalue ("00:00:10") pour 10sec
donc pourquoi exactement + 2/3600/24, pure coïncidence ?
Mais comme on a pas ton fichier , je ne peux pas voir si l'on peut faire un rapprochement
Donc le mettre pour continuer ..comme tu veux !
 

inouekun

XLDnaute Nouveau
Re : Programme qui s'arrête

Du coup, pour le wait, c'est une personne avec qui j'ai parlé de ça qui m'a conseillé de le mettre.
Et je perds le focus même sans le wait.
Je peux mettre un bout du code, mais je ne peux passer tout, car c'est confidentiel, comme le site sur lequel je travail (c'est pour le boulot)
Il n'y a pas d'autre moyen pour simuler le clavier que sendkey ?
Et pouvoir par exemple; dire à la macro avant d'ouvrir la page "je veux que tu envoies fasse cette ligne une fois la page ouverte"
Et c'est pas le wait qui bloque, car je viens d'enlever tous les wait et sendkey qui étaient avant mon ouverture, et ça bug toujours autant.

Merci beaucoup pour l'aide.
 

inouekun

XLDnaute Nouveau
Re : Programme qui s'arrête

Bonjour Herve,
J'ai déjà copié la partie qui cause problème dans mon premier post,
Mais je pense que j'ai trouvé une solution à mon problème :
https://www.youtube.com/watch?v=G-2khNFYQl8
(Je met le lien vers ceux qui voudrons avoir la solution, c'est en anglais !)
Le code à mettre dans le vba : (au début du code)
Shell "wscript.exe ""C:\Users\gjqf5108\Desktop\vba\LVO\moi\LVO_script.vbs"""
Vers le fichier
Le code à mettre dans le fichier :
Code:
Set wshShell = CreateObject("WScript.shell")

Do
	ret = wshShell.AppActivate("Nom de la page")
	
	Loop until ret = True
		WScript.sleep 500
		ret = wshShell.AppActivate("Nom de la page")
		If ret = True Then
			ret = wshShell.AppActivate("Nom de la page")
			WScript.Sleep 10
			wshShell.SendKeys "{enter}"
		End if
		WScript.Sleep 500

Nom de la page : Remplacer pas le nom de votre page (obvious)
J'ai un problème avec le code, le script est bloqué (la ligne avec shell....) dans vba, comme il faut le lancer avec l'autorisation de l'administrateur. Il me suffit plus qu'à trouver comment faire, si je trouve, je vous l'envoie
Mais je pense que ça marche.
Alors je dis bonne chance à ceux qui auront ce problème
 

inouekun

XLDnaute Nouveau
Re : Programme qui s'arrête

Je reviens donner les modifications qui j'ai fait sur mon code.
Du coup, pour la ligne que je met dans VBA, je l'ai changé, car j'ai une erreur comme quoi je ne peux pas l'exécuter, (droit d'admin...)
Donc, j'utilise ces lignes à la place :
Code:
Dim ObjShell As Object
Set ObjShell = CreateObject("Shell.Application")
ObjShell.ShellExecute "Wscript", _
"C:\Users\gjqf5108\Desktop\vba\LVO\moi\LVO_script.vbs", "", "runas", 0

Ensuite, j'ai un petit peu modifié le code vbs, car quand j'arrivais sur la page, je perdais le focus sur le bouton "yes" ce qui faisait que mon programme faisait "enter" dans le vide, comme je n'ai que 2 boutons dans ma page, je fais 2 fois tabulation, la première m'amène sur no, puis la deuxieme sur yes, car de base, je suis sur yes, même si je n'ai pas le focus
Code:
Set wshShell = CreateObject("WScript.shell")

Do
	ret = wshShell.AppActivate("Nom de la page")
	
	Loop until ret = True
		WScript.sleep 1000
		ret = wshShell.AppActivate("Nom de la page")
		If ret = True Then
			ret = wshShell.AppActivate("Nom de la page")
			WScript.Sleep 1000
			wshShell.SendKeys "{TAB}"
			WScript.Sleep 1000
			wshShell.SendKeys "{TAB}"
			WScript.Sleep 1000
			wshShell.SendKeys "{ENTER}"
	

		End if
		WScript.Sleep 500

(Dans mon premier message, le enter était en minuscule, je pense que ça ne marche pas si ce n'est pas en MAJ)
Si vous n'aimez pas enter, vous pouvez mettre "~" : ce revient au même
 
Dernière modification par un modérateur:

herve62

XLDnaute Barbatruc
Supporter XLD
Re : Programme qui s'arrête

Oui pour le code mais dans un fichier plus élaboré ... on aurait pu faire tourner !!
sinon un truc qui me chiffonne : Le SHELL
j'ai programmé en Shell il y a plus de 20 ans mais sous environnement UNIX ( Krosoft buvait encore le biberon)
et là on retrouve des similitudes en VBA ? ,et surtout de Pb !!
Y a t-il relation ou pas ?
en tout cas bon courage ... et au moins un membre qui cherche et n'attends pas le tout cuit > Mention Bien
 

inouekun

XLDnaute Nouveau
Re : Programme qui s'arrête

Merci pour la mention bien, ça me fait plaisir x)
J'aime pas attendre le tout cuit, j'aime bien pouvoir me dire, "j'ai trouvé toute seule, yay"
Je ne sais pas s'il y a relation ou pas... Je sais juste que je ne suis pas la seule à avoir ce problème. (pour krosoft, yavait pas que lui qui buvait le biberon ya 20 ans xD)
Tu sais comment on met un sujet en résolu ? x)
Petite question sinon, car je bloque sur un boucle dans vbs.
(Pour le fichier, je n'ai pas le droit de donner les urls, donc tu n'aurais pas pu reproduire l'erreur)
Code:
Set wshShell = CreateObject("WScript.shell")
Dim compte
compte = 0
ret = False
	Do	
		Do	
			compte= compte +1
		
			WScript.sleep 1000
			
			ret = wshShell.AppActivate("ma page")		
		Loop until ret = True
			WScript.sleep 1000
			ret = wshShell.AppActivate("ma page")
			If ret = True Then
				ret = wshShell.AppActivate("ma page")
				WScript.Sleep 10
				wshShell.SendKeys "{TAB}"
				WScript.Sleep 10
				wshShell.SendKeys "{TAB}"
				WScript.Sleep 10
				wshShell.SendKeys "{ENTER}"
				ret = False

			End if
			WScript.Sleep 500
		Msgbox (FormatNumber(compte) < 7200)
	Loop Until FormatNumber(compte) < 7200 
	msgbox "je sors" & compte & " ret : " & ret & " " & (FormatNumber(compte) < 7200)

Dans le code, je fais d'abord une boucle qui dure 2 heures, puis une qui regarde si ma page s'ouvre.
(Car je dois ouvrir x pages, je ne connais pas le nombre d'avance. Et comme le temps d'exécution est assez long...
Je pense mettre une autre exception après, comme si j'ouvre cette page, alors, j'arrête l'execution en mettant le compteur à 7200)

Mais je n'arrive pas à rester dans la boucle x)
à chaque fois que je trouve la 1ère page, je sors de toutes les boucles, j'ai essayé compte > 7200 compte < 7200 compte <> 7200 ...

Je sais pas si c'est ma méthode qui n'est pas bonne, peut-être que comme l'appli n'arrive pas à comparer le chiffre avec la variable, ça met true par défaut, mais j'ai tenté de mettre FormatNumber autour de compte, pour que ça passe en chiffre (que je cast) mais ça fait pareil.
Je ne peux pas mettre dim compte as integer au début, car ça me met une erreur.

cf : Déclaration de variables en VBS (c'est pas moi, mais le problème est le même, j'ai fait comme dans la réponse, mais bon, ça résoud pas mon problème :p)

Donc, si quelqu'un a une solution à me proposer, je suis preneuse :)
Merci !
 

inouekun

XLDnaute Nouveau
Re : Programme qui s'arrête

Je me réponds encore x)
J'ai trouvé comment faire
Code:
Set wshShell = CreateObject("WScript.shell")
Dim compte
Dim max
compte = 0
max = 2700
ret = False
	Do	
		Do	
			compte= compte +1
		
			WScript.sleep 1000
					
			
			ret = wshShell.AppActivate("Accept Lvo")		
		Loop until ret = True
			WScript.sleep 1000
			ret = wshShell.AppActivate("Accept Lvo")
			If ret = True Then
				ret = wshShell.AppActivate("Accept Lvo")
				WScript.Sleep 10
				wshShell.SendKeys "{TAB}"
				WScript.Sleep 10
				wshShell.SendKeys "{TAB}"
				WScript.Sleep 10
				
				ret = False

			End if
			WScript.Sleep 500
		
		Msgbox (FormatNumber(compte) < FormatNumber(max)) &" "& (FormatNumber(compte) > FormatNumber(max)) & " " & (FormatNumber(compte) <> FormatNumber(max)) & "  "  & compte 
	Loop Until (FormatNumber(compte) < FormatNumber(max))
	msgbox "je sors" & compte & " ret : " & ret
Je crée une variable max, que je mets à 2700, et je compare les 2, avec FormatNumber, ça fonctionne très bien
 

herve62

XLDnaute Barbatruc
Supporter XLD
Re : Programme qui s'arrête

Des Loop imbriquées tu m'étonnes que ça dure !!!
et une appli structurée ainsi , en Debug .... bonjour l'ambiance
Sinon on voit bien l'appli industrielle ( du costaud) et ici malgré le haut niveau qui parfois m'échappe aussi
c'est pas évident si on a pas le fichier
Donc si tu juges RESOLU :
Edite ton 1er message > Modif > et met entre [] puis enregistrer ( le motif est facultatif)
Bonne continuation
 

Discussions similaires

Réponses
6
Affichages
266
Réponses
2
Affichages
354
Réponses
8
Affichages
595