Bonjour,
Je suis en train de créer un programme qui va permettre à l'utilisateur de choisir parmi 4 onglets (4 services d'une entreprise) et sur chaque onglet de choisir le mois et l'année qu'il souhaite. Il valide avec un bouton OK. Une petite vérification est effectuée, au cas ou il ne renseigne pas le champ mois ou année (MsgBox)
En fait j'apprends un peu à me servir des fonctions, du coup voici comment j'ai fait :
J'ai inclus mes bibliothèques, puis ensuite j'ai directement appelé ma fonction, et la j'ai tapé tout mon code, dans cette seule et même fonction.. ce qui ne présentait donc peu d'intérêt à mes yeux, après réflexion !
Ça devait ressembler à ça :
Code : Tout sélectionner
#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <ExcelCOM_UDF.au3>
Opt('MustDeclareVars', 1)
fonction()
Func fonction()
GuiCreate ....
xxx
xxx
xxx
Je précise que jusque la, tout marchait impeccable....
Mais j'ai eu envie de "séparer " mon code pour le rendre plus fonctionnel, pratique, léger enfin ce que vous voulez, donc en créant plusieurs fonctions.
Et la... c'est le drame !
En gros, j'ai créé ma structure, donc la fenêtre principale, avec les 4 onglets :
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <ExcelCOM_UDF.au3>
GUICreate("Statistikor v2", 300, 280, 400, 300)
$tab = GUICtrlCreateTab(30, 70, 238, 199)
$tab0 = GUICtrlCreateTabItem("Préparation")
$periode = GUICtrlCreateLabel("Veuillez choisir la période :",55,110,300,20)
GUICtrlSetFont($periode, 12, 800, 4, "Calibri")
Guictrlsetcolor($periode, 0xED0000)
$tab0_combo_annee=GUICtrlCreateCombo ("Année", 40,150,100,120)
GUICtrlSetData(-1,"2009|2010|2011|2012", "Année")
$tab0_combo_mois=GUICtrlCreateCombo ("Mois",155,150,100,120)
GUICtrlSetData(-1,"Janvier|Février|Mars|Avril|Mai|Juin|Juillet|Août|Septembre|Octobre|Novembre|Décembre", "Mois")
$tab0_bouton=GUICtrlCreateButton ("OK", 123,230,50,20)
GUICtrlSetFont($tab0_bouton, 11, 800)
Guictrlsetcolor($tab0_bouton, 0xED0000)
$tab1 = GUICtrlCreateTabItem("Stock Négoce")
$tab2 = GUICtrlCreateTabItem("SAV")
$tab3 = GUICtrlCreateTabItem("Achats")
GUICtrlCreateTabitem ("")
GUISetState()
Puis je me suis dit que c'est seulement au moment ou ma fenêtre et mes onglets seraient créés que j'allais appeler ma fonction qui réaliserai ensuite ce que j'attends (les saisies utilisateurs, choix dans les menus déroulant)
J'ai donc appelé ma fonction à cet endroit, et je l'ai définie immédiatement après (je n'en suis qu'au début du projet)
► Afficher le texte
Code : Tout sélectionner
*** SUITE du code ci-dessus ***
choix_periode()
Opt('MustDeclareVars', 1)
Func choix_periode()
Local $choix_service
Local $msg
Local $tab0_bouton
Local $choix_annee, $choix_mois
Local $tab0_combo_mois, $tab0_combo_annee
Local $box
Local $excelopen
Local $prepa_gal_2009 = "Z:\Stats Générales\STATS GENERALES v2\PREPARATION\2009\Préparation 2009.xlsm"
While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
$choix_service = GUICtrlRead($tab)
Switch $choix_service
Case 0
If $msg = $tab0_bouton Then
$choix_annee = GUICtrlRead($tab0_combo_annee)
$choix_mois = GUICtrlRead($tab0_combo_mois)
Switch $choix_annee
Case "Année"
MsgBox(48, "SAISIE INCORRECTE", "Veuillez sélectionner l'année, SVP")
Case "2009"
Switch $choix_mois
Case "Mois"
MsgBox(48, "SAISIE INCORRECTE", "Veuillez sélectionner le mois, SVP")
Case "Janvier"
$box = MsgBox(1, "[ ------------- CONFIRMATION ------------- ]", "Veuillez confirmer votre choix : " & $choix_mois & $choix_annee)
If $box = 1 Then
$excelopen = _ExcelBookOpen($prepa_gal_2009)
EndIf
Case "Février"
Case "Mars"
EndSwitch
Case "2010"
MsgBox(0, "", "2010")
Case "2011"
MsgBox(0, "", "2011")
Case "2012"
MsgBox(0, "", "2012")
EndSwitch
EndIf
Case 1
Case 2
Case 3
EndSwitch
WEnd
EndFunc
Le problème c'est que ma MsgBox s'affiche directement, celle qui renvoit une erreur lorsque l'utilisateur valide avec le bouton OK sans avoir choisi le mois ou l'année :
Code : Tout sélectionner
MsgBox(48, "SAISIE INCORRECTE", "Veuillez sélectionner l'année, SVP")
J'ai beau appuyer sur OK pour la faire disparaître, elle se répète "à l'infini".
Ou est l'erreur ???
Je vous joins le fichier, ça sera surement plus parlant !
Merci d'avance pour votre aide !
Cordialement,
Wink