[..] changement d'une variable en temps réel par rapport a une cellule excel

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
bazin
Niveau 2
Niveau 2
Messages : 24
Enregistré le : ven. 09 sept. 2016 22:59
Status : Hors ligne

[..] changement d'une variable en temps réel par rapport a une cellule excel  

#1

Message 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 $idComboBox

Global Const $xlDown = -4121
Global $Form1
If 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
   EndSwitch
WEnd

Func _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
Modifié en dernier par orax le ven. 30 sept. 2016 17:00, modifié 1 fois.
Avatar du membre
parazitenew
Niveau 7
Niveau 7
Messages : 310
Enregistré le : sam. 10 déc. 2011 15:08
Localisation : Algerie
Status : Hors ligne

Re: changement d'une variable en temps réel par rapport a une cellule excel

#2

Message 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:
AdlibRegister ( "function" [, time] )
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.
bazin
Niveau 2
Niveau 2
Messages : 24
Enregistré le : ven. 09 sept. 2016 22:59
Status : Hors ligne

Re: changement d'une variable en temps réel par rapport a une cellule excel

#3

Message 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
bazin
Niveau 2
Niveau 2
Messages : 24
Enregistré le : ven. 09 sept. 2016 22:59
Status : Hors ligne

Re: changement d'une variable en temps réel par rapport a une cellule excel

#4

Message par bazin »

peux tu juste me donner un exemple stp
Avatar du membre
parazitenew
Niveau 7
Niveau 7
Messages : 310
Enregistré le : sam. 10 déc. 2011 15:08
Localisation : Algerie
Status : Hors ligne

Re: changement d'une variable en temps réel par rapport a une cellule excel

#5

Message par parazitenew »

#include <GUIconstants.au3>

$gui = GUICreate("",200,200)
GUISetState(@SW_SHOW)

beeper()

AdlibRegister("beeper", 3000)



While 1

   $msg = GUIGetMsg()

   Select

      Case $msg = $GUI_EVENT_CLOSE
         Exit

   EndSelect
WEnd


Func beeper()
   Beep(500,1000)
EndFunc
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:
GUICtrlSetData ( controlID, data [, default] )
Tu dois réserver un emplacement sur le GUI avec un label, à qui tu dois obligatoirement donner une variable.
bazin
Niveau 2
Niveau 2
Messages : 24
Enregistré le : ven. 09 sept. 2016 22:59
Status : Hors ligne

Re: changement d'une variable en temps réel par rapport a une cellule excel

#6

Message 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 !
Avatar du membre
parazitenew
Niveau 7
Niveau 7
Messages : 310
Enregistré le : sam. 10 déc. 2011 15:08
Localisation : Algerie
Status : Hors ligne

Re: changement d'une variable en temps réel par rapport a une cellule excel

#7

Message 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:
$zone_texte = GUICtrlCreateLabel("text", left, top [Options])
Pour afficher le résultat:
GUICtrlSetData($zone_texte , $variable)
Il met comme texte sur notre zone de texte, le contenu de la varialbe $variable, soit le contenu de la cellule.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: changement d'une variable en temps réel par rapport a une cellule excel

#8

Message 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
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
bazin
Niveau 2
Niveau 2
Messages : 24
Enregistré le : ven. 09 sept. 2016 22:59
Status : Hors ligne

Re: changement d'une variable en temps réel par rapport a une cellule excel

#9

Message 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
bazin
Niveau 2
Niveau 2
Messages : 24
Enregistré le : ven. 09 sept. 2016 22:59
Status : Hors ligne

Re: changement d'une variable en temps réel par rapport a une cellule excel

#10

Message 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 $idComboBox

Global Const $xlDown = -4121
Global $Form1
If 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 Excel
Local $oBook = _Excel_BookOpen($oExcel, @DesktopDir & "\Essai.xlsx", True) ; ouvre le classeur en mode lecture seule
Local $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
   EndSwitch
WEnd

Func _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
Modifié en dernier par orax le ven. 30 sept. 2016 17:01, modifié 1 fois.
Raison : Ajout de la balise de code
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: changement d'une variable en temps réel par rapport a une cellule excel

#11

Message 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......
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Répondre