Cjvg
Messages postés330Date d'inscriptionmercredi 6 décembre 2000StatutMembreDernière intervention26 octobre 2017
-
8 juil. 2012 à 10:00
Cjvg
Messages postés330Date d'inscriptionmercredi 6 décembre 2000StatutMembreDernière intervention26 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 ????
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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 ?
Cjvg
Messages postés330Date d'inscriptionmercredi 6 décembre 2000StatutMembreDernière intervention26 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