Page 1 sur 1
[..] changement d'une variable en temps réel par rapport a une cellule excel
Posté : mar. 27 sept. 2016 15:39
par bazin
Bonjour à tous !
je recherche depuis un moment comment avoir dans une ma fenêtre "Form2" de mon script si dessous un chiffre qui depend d'une cellule (F2) dans mon fichier excel nommé Essai le soucis c'est que j'aimerai qu'elle change en temps réel si la cellule F2 change de valeur
merci d'avance de votre aide
#include <ButtonConstants.au3>#include <GUIConstantsEx.au3>#include <WindowsConstants.au3>#include <Excel.au3>Global $idComboBoxGlobal Const $xlDown = -4121Global $Form1If FileExists(@DesktopDir & "\Essai.xlsx") = 0 Then Exit MsgBox(0, "Error", "dossier inexistant")Local $oExcel = _Excel_Open(False)Local $oBook = _Excel_BookOpen($oExcel, @DesktopDir & "\Essai.xlsx")$Form1 = GUICreate("Inventaire ", 450, 288, 385, 350)GUICtrlCreateLabel("Nom Du Mainteneur", 20, 15, 433, 33)$idComboBox = GUICtrlCreateCombo("Odeolis", 140, 50, 135, 20)GUICtrlSetData($idComboBox, "Effage|LABBE", "Effage")GUISetState(@SW_SHOW)$Form2 = GUICreate("Saisie", 450, 288, 385, 350)$Button4 = GUICtrlCreateLabel("Saisir les Informations Produit ", 20, 15, 433, 33, $WS_GROUP)GUICtrlSetFont(-1, 18, 100, 0, "MS Sans Serif")GUICtrlCreateLabel('N°De Serie', 20, 83, 305, 105)$Nserie = GUICtrlCreateInput("", 140, 80, 137, 21)HotKeySet("{ENTER}", "_excel")While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE _Excel_BookSave($oBook) _Excel_Close($oExcel) Exit Case $idComboBox $sComboRead = GUICtrlRead($idComboBox) GUISetState(@SW_HIDE, $Form1) GUISetState(@SW_SHOW, $Form2) Case $Nserie EndSwitchWEndFunc _excel
() $value = GUICtrlRead($Nserie) If $value = "" Then MsgBox(0, "Erreur", 'pas de données') Return SetError(1) EndIf $oExcel.Sheets(1).Select $oExcel.Range("B1").Select $oExcel.Selection.End($xlDown).Select $oExcel.ActiveCell.Offset(1, 0).Select $oExcel.ActiveCell.Value = $value GUICtrlSetData($Nserie, "")EndFunc ;==>_excel
Re: changement d'une variable en temps réel par rapport a une cellule excel
Posté : mar. 27 sept. 2016 19:07
par parazitenew
Bonjour,
Ce qui me vient à l'esprit, c'est de créer une fonction qui servira uniquement à lire et à afficher le contenu de la cellule sur la fenêtre, puis d'appeler cette fonction périodiquement.
On peut même rajouter une condition (facultative) afin de vérifier si la valeur a changé avant de l’afficher.
La fonction qui permet d'appeler une autre est:
Où time est le délai de rafraîchissement en milliseconde.
Après, ça dépend ce qui va changer cette valeur dans l'excel, est ce l'utilisateur? Un script autoit? Un événement spécifique? car on pourrait trouver une autre façon de faire.
Re: changement d'une variable en temps réel par rapport a une cellule excel
Posté : mar. 27 sept. 2016 21:10
par bazin
avant tout merci parazitenew pour ta réponse
et pour ta question la valeur dépend du script autoit mais via ce que l'utilisateur saisie dans l'inputbox Nserie
mais je vais essayer avec ce que tu m'as donné et je te tiens au courant
Re: changement d'une variable en temps réel par rapport a une cellule excel
Posté : mar. 27 sept. 2016 21:20
par bazin
peux tu juste me donner un exemple stp
Re: changement d'une variable en temps réel par rapport a une cellule excel
Posté : mer. 28 sept. 2016 18:03
par parazitenew
Voilà pour que t'aies une idée, j'ai crée une fonction qui joue un son, un beep, je l'ai enregistré avec adlibregister() en haut, je l'appelle toute les 3000 ms soit 3s.
Tu remplaces le beep par (lecture de la cellule à partire de l'excel + affichage sur le GUI avec:
Tu dois réserver un emplacement sur le GUI avec un label, à qui tu dois obligatoirement donner une variable.
Re: changement d'une variable en temps réel par rapport a une cellule excel
Posté : jeu. 29 sept. 2016 09:12
par bazin
merci parazitenew !
c'est plus la com avec excel et autoit sur laquel je but
j'ai pu grâce à l'aide d'autoit mais pour récupérer ma cellule D1 je galère au niveau de la syntaxe
d'une pour aller chercher sur la cellule sa valeur et l'enregistrer comme variable
et deux pour créer un compteur avec cette variable qui change dans ma fenêtre "$Form2"
si j'avais ça il serai quasi terminé
désolé de te solliciter encore , après je ne t'embête plus promis !
Re: changement d'une variable en temps réel par rapport a une cellule excel
Posté : jeu. 29 sept. 2016 15:48
par parazitenew
Hello,
Voici la syntaxe pour lire la cellule D1:
#include <excel.au3>global $Variable$oExcel = _ExcelBookOpen
(@ScriptDir & "\Classeur1.xlsx",0)$variable = _ExcelReadCell
($oExcel,1, 4)_ExcelBookClose
($oExcel)MsgBox(0,"",$variable)
On appelle la bibliothèque Excel, on déclare notre variable (qui va contenir le résultat). On ouvre l'excel, en spécifiant le chemin d'accès et le "0" pour l'ouvrir en mode invisible (attention tu dois modifier le chemin et le nom de l'excel bien sûr).
La ligne qui suit, lit
la Ligne 1 de l'excel et
la colonne 4 donc D1 et enregistre la valeur de la cellule dans la variable $variable.
J'ai ajouté le msgbox uniquement pour vérifier le bon fonctionnement du script en affichant le résultat dans une petite boite de dialogue.
Une fois fait, il ne reste plus qu'à l'afficher sur le GUI. Il faut préalablement avoir crée une zone de texte:
Pour afficher le résultat:
Il met comme texte sur notre zone de texte, le contenu de la varialbe $variable, soit le contenu de la cellule.
Re: changement d'une variable en temps réel par rapport a une cellule excel
Posté : jeu. 29 sept. 2016 18:31
par walkson
Bonjour,
pour faire un compteur, c'est relativement simple
En début de script: Global $compteur = 0
Dans la fonction surveillée $compteur += 1
A chaque appel de la fonction, $compteur s'incrémente
A titre indicatif on peut avoir $compteur &= $maval & @cr ===> msgbox(0,"", $compteur)
Là, on a une réponse "texte", chaque élément étant à la ligne
Re: changement d'une variable en temps réel par rapport a une cellule excel
Posté : jeu. 29 sept. 2016 19:09
par bazin
merci parazitenew !! avec tout ça je pense que ça devrai le faire
tes explications sont très détaillées et claires
merci pour tout
merci à toi aussi walkson
j'essaye tout ça
Re: changement d'une variable en temps réel par rapport a une cellule excel
Posté : ven. 30 sept. 2016 14:59
par bazin
Hello !
Bon ! voici mon script , il fonctionne
il ne me reste plus qu'à passer à la deuxième partie qui est d'afficher le changement en temps réel la valeur de cette valiable"$valeur" dans ma deuxieme fenêtre Form2
walkson m'a donné une piste , je vais essayer de la suivre ce soir
#include <ButtonConstants.au3>#include <GUIConstantsEx.au3>#include <WindowsConstants.au3>#include <Excel.au3>Global $idComboBoxGlobal Const $xlDown = -4121Global $Form1If FileExists(@DesktopDir & "\Essai.xlsx") = 0 Then Exit MsgBox(0, "Error", "dossier inexistant")Local $oExcel = _Excel_Open(False)Local $oBook = _Excel_BookOpen($oExcel, @DesktopDir & "\Essai.xlsx")$Form1 = GUICreate("Inventaire ", 450, 288, 385, 350)GUICtrlCreateLabel("Nom Du Mainteneur", 20, 15, 433, 33)$idComboBox = GUICtrlCreateCombo("Odeolis", 140, 50, 135, 20)GUICtrlSetData($idComboBox, "Effage|LABBE", "Effage")GUISetState(@SW_SHOW)$Form2 = GUICreate("Saisie", 450, 288, 385, 350)$Button4 = GUICtrlCreateLabel("Saisir les Informations Produit ", 20, 15, 433, 33, $WS_GROUP)GUICtrlSetFont(-1, 18, 100, 0, "MS Sans Serif")GUICtrlCreateLabel('N°De Serie', 20, 83, 305, 105)$Nserie = GUICtrlCreateInput("", 140, 80, 137, 21)HotKeySet("{ENTER}", "_excel")Local $oExcel = _Excel_Open() ; crée l'objet 'application ExcelLocal $oBook = _Excel_BookOpen($oExcel, @DesktopDir & "\Essai.xlsx", True) ; ouvre le classeur en mode lecture seuleLocal $valeur = _Excel_RangeRead($oBook, Default, "D1") ; la plage est ici de 'D1' à 'D1'If @error Then Exit MsgBox($MB_SYSTEMMODAL,GUICtrlCreateLabel('UC', 80, 200, 305, 105)$zone_texte = GUICtrlCreateLabel(" ", 100, 200)GUICtrlSetData($zone_texte, $valeur)While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE _Excel_BookSave($oBook) _Excel_Close($oExcel) Exit Case $idComboBox $sComboRead = GUICtrlRead($idComboBox) GUISetState(@SW_HIDE, $Form1) GUISetState(@SW_SHOW, $Form2) Case $Nserie EndSwitchWEndFunc _excel
() $value = GUICtrlRead($Nserie) If $value = "" Then MsgBox(0, "Erreur", 'pas de données') Return SetError(1) EndIf $oExcel.Sheets(1).Select $oExcel.Range("B1").Select $oExcel.Selection.End($xlDown).Select $oExcel.ActiveCell.Offset(1, 0).Select $oExcel.ActiveCell.Value = $value GUICtrlSetData($Nserie, "")EndFunc ;==>_excel
Re: changement d'une variable en temps réel par rapport a une cellule excel
Posté : ven. 30 sept. 2016 16:07
par walkson
Bonjour,
S'il vous plait, quand vous publiez du code, utilisez les balises en cliquant sur le bouton bleu à gauche. C'est plus agréable à lire et aussi pour tester votre code.
Mais si je me permets d'intervenir, c'est surtout que votre code n'est pas bon et vous aurez des problèmes à terme.
Vous ne pouvez pas gérer 2 Form ainsi. Soit vous passez par $nMsg = GUIGetMsg(1)
qui vous renvoie un array (voir l'aide), soit vous passez par le mode évènementiel qui est beaucoup plus simple et souple (voir GUI Reference - OnEvent Mode dans l'aide) en mettant Opt("GUIOnEventMode", 1)
au début du code.
Vous pouvez générer une GUI en mode évènementiel avec Koda: Outils => Générer avec options => cocher Générer le code évènementiel et cocher Générer les évènements pour tous les contrôles
ça vous donnera un bon exemple si vous vous sentez perdu......