Erreur d'éxécution avec instruction Shellexecute

Cjvg Messages postés 330 Date d'inscription mercredi 6 décembre 2000 Statut Membre Dernière intervention 26 octobre 2017 - 8 juil. 2012 à 10:00
Cjvg Messages postés 330 Date d'inscription mercredi 6 décembre 2000 Statut Membre Dernière intervention 26 octobre 2017 - 8 juil. 2012 à 11:36
Bonjour,

J'ai un Projet "A" qui ne contient que les instructions suivantes:

Private Sub Form_Load()
Call ShellExecuteA(0, "", App.Path & "\Think2Asie1.exe", "", "", 1)
End
End Sub


J'ai un projet B qui affiche une carte de l'Asie et qui permet à l'utilisateur lorsqu'il clique sur un pays d'afficher la carte des villes de ce pays.
Lorsque j'exécute directement, ce projet fonctionne correctement

------------------------------------------------------------------------------------------

Lorsque le projet A lance l'exécution du projet B, la carte de l'Asie s'affiche correctement. Lorsque l'utilisateur clique sur un pays, le programme tombe en erreur:
Erreur exécution 340
L'élément du groupe de contrôles '23' n'existe pas.


Si je place une instruction MSGBOX "***1***" dans la procédure Load d'une Form, cette form s'affiche alors correctement (Toutes les autres tombent en erreur)


Si je place cette instruction MSGBOX dans la procédure principale comme présenté ci-dessous, le programme fonctionne parfaitement.

MsgBox "** 1 **"

If Parm1 = 2 Then Think2Asie1F2.Show vbModal ' Chine Régions .
If Parm1 = 3 Then Think2Asie1F3.Show vbModal ' Chine .
If Parm1 = 4 Then Think2Asie1F4.Show vbModal ' Inde .
If Parm1 = 5 Then Think2Asie1F5.Show vbModal ' Mongolie .
If Parm1 = 6 Then Think2Asie1F6.Show vbModal ' Russie .
If Parm1 = 7 Then Think2Asie1F7.Show vbModal ' Kazakhstan .
If Parm1 = 8 Then Think2Asie1F8.Show vbModal ' Iran .
If Parm1 = 9 Then Think2Asie1F9.Show vbModal ' Arabie Saoudite .
If Parm1 = 10 Then Think2Asie1F10.Show vbModal ' Turkménistan .
If Parm1 = 11 Then Think2Asie1F11.Show vbModal ' Afghanistan .
Etc....................................


Impossible de trouver l'erreur. Comment remplacer ce MSGBOX par une autre instruction ????

Par avance Merci

5 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
8 juil. 2012 à 10:27
Salut

Puisque tu lances un EXE, ShellExecute ne se justifie pas.
Essaye d'utiliser Shell.

Call Shell(App.Path & "\Think2Asie1.exe", vbNormalFocus)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
8 juil. 2012 à 10:53
Il est fortement déconseillé de mettre un End dans un Form_Load :
Déjà parce que End n'est pas correct (mieux vaut un Unload Me), trop violent.
Ensuite parce que lors du Form_Load, l'affichage de tous les éléments graphiques de ton appli A ne sont pas encore complètement terminé.
Alors oui, ça ne semble pas avoir beaucoup d'importance dans ton cas, mais mieux vaudrait faire comme ceci :
# Tu places un Timer sur ta forme (Timer1)
# En config de ce Timer1, tu mets le Enabled à False et Interval à 200 (mSec)
# Dans le Form_Load, tu démarres le Timer :
Timer1.Enabled = True
# Dans la procédure du Timer (Timer1_Timer()), tu y mets :
- Timer1.Enabled = False, pour que le Timer ne s'exécute qu'une fois
- ta commande Shell
- un DoEvents, histoire que tout ait le temps d'être exécuté avant de sortir
- le Unload Me pour terminer le programme

"[i]Erreur exécution 340
L'élément du groupe de contrôles '23' n'existe pas./i"
Est-ce que le groupe 23 te dit quelque chose dans ton programme ?
(parce que vu d'ici ...)

Éventuellement, remplace ta MsgBox par un DoEvents.
Est-ce que l'affichage graphique de ton le projet B est terminé au moment où tu cliques sur le pays ?
0
Cjvg Messages postés 330 Date d'inscription mercredi 6 décembre 2000 Statut Membre Dernière intervention 26 octobre 2017
8 juil. 2012 à 10:59
J'utilisais call Shell.
Pour trouver l'erreur j'ai réduit le projet "A" à sa plus simple expression et j'ai fais un essais avec shellexecute.


J'ai refais un nouvel essais en emplaçant le Msgbox par une similation d'entrée clavier
(Enter) ---> Keybd 13, 0, 0, 0 --> ça marche

C'est mieux que le Msgbox mais j'aimerais bien trouver l'erreur.
0
Cjvg Messages postés 330 Date d'inscription mercredi 6 décembre 2000 Statut Membre Dernière intervention 26 octobre 2017
8 juil. 2012 à 11:04
Éventuellement, remplace ta MsgBox par un DoEvents.
J'avais essayé ---> ça ne marche pas !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Cjvg Messages postés 330 Date d'inscription mercredi 6 décembre 2000 Statut Membre Dernière intervention 26 octobre 2017
8 juil. 2012 à 11:36
J'ai refais un nouvel essais en remplaçant le Msgbox par une simulation d'entrée clavier
(Enter) ---> Keybd 13, 0, 0, 0 --> ça marche
Je me suis trompé, ça ne marche pas

-----------------------------------------------------------------------------------------

J'ai refais un autre essais qui semble marcher

Keybd 13, 0, 0, 0 ' Pour neutraliser l'affichage du Msgbox
MsgBox " "
0
Rejoignez-nous