Bonjour tout le monde,
Je suis nouveau sur Autoit,
Je cherche un moyen de récupérer dans une variable la valeur d'un textbox situé dans un Formulaire excel (userform)
Malgré mes nombreuses recherches je n'ai rien trouvé
Je n'ai trouvé que des solutions mais pour des GUI créés dans le code Autoit directement ...
Je voudrais arriver à un truc du genre :
$var1 = GUICtrlRead($TextBox1) ou $Textbox1 est un textbox dans un formulaire Excel
Le code Autoit sera lancé directement du Formulaire excel grace à un bouton.
Je ne cherche pas de solution avec des déplacements dans les textbox via des TAB et ctrl+c, ctrl+v etc
Si quelqu'un à une piste je suis preneur.
Merci pour votre aide.
Lire depuis Textbox dans un formulaire Excel
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
-
- Niveau 1
- Messages : 3
- Enregistré le : ven. 01 févr. 2019 18:08
- Status : Hors ligne
- walkson
- Modérateur
- Messages : 1020
- Enregistré le : ven. 12 août 2011 19:49
- Localisation : Hurepoix
- Status : Hors ligne
Re: Lire depuis Textbox dans un formulaire Excel
Bonjour,
Le faire directement ne me semble pas possible car Autoit ne détaille pas l'userform et par conséquence ne voit pas le Textbox. L'utilisation de ControlGetText() ou autres n'est pas possible. Dans tous les cas, $var1 = GUICtrlRead($TextBox1) est impossible.
Reste à passer par une solution intermédiaire. Soit écrire la valeur du Textbox dans une cellule et de lire cette cellule pour Autoit. Soit d'écrire la valeur dans un fichier type TXT puis le lire. Ou enfin utiliser le presse papier. C'est la dernière solution que je vous propose.
Dans un module VBA
Pour l'Userform
Et pour Autoit
Le faire directement ne me semble pas possible car Autoit ne détaille pas l'userform et par conséquence ne voit pas le Textbox. L'utilisation de ControlGetText() ou autres n'est pas possible. Dans tous les cas, $var1 = GUICtrlRead($TextBox1) est impossible.
Reste à passer par une solution intermédiaire. Soit écrire la valeur du Textbox dans une cellule et de lire cette cellule pour Autoit. Soit d'écrire la valeur dans un fichier type TXT puis le lire. Ou enfin utiliser le presse papier. C'est la dernière solution que je vous propose.
Dans un module VBA
Sub CopyText(Text As String)
'VBA Macro using late binding to copy text to clipboard.
'By Justin Kay, 8/15/2014
Dim MSForms_DataObject As Object
Set MSForms_DataObject = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
MSForms_DataObject.SetText Text
MSForms_DataObject.PutInClipboard
Set MSForms_DataObject = Nothing
End Sub
'VBA Macro using late binding to copy text to clipboard.
'By Justin Kay, 8/15/2014
Dim MSForms_DataObject As Object
Set MSForms_DataObject = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
MSForms_DataObject.SetText Text
MSForms_DataObject.PutInClipboard
Set MSForms_DataObject = Nothing
End Sub
Private Sub CommandButton_Click()
CopyText (TextBox1.Value)
sFile = ActiveWorkbook.Path & "\test.exe "
Shell sFile
End Sub
CopyText (TextBox1.Value)
sFile = ActiveWorkbook.Path & "\test.exe "
Shell sFile
End Sub
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
-
- Niveau 1
- Messages : 3
- Enregistré le : ven. 01 févr. 2019 18:08
- Status : Hors ligne
Re: Lire depuis Textbox dans un formulaire Excel
Bonsoir Walkson,
Tout d'abord merci beaucoup pour votre réponse.
J'y vois un peu plus clair ...
Le seul hic c'est que j'ai besoin de garder en mémoire plusieurs informations .
Le projet global est de collecter des informations client depuis le Userform d'excel (Nom, Prenom, Adresse, Code postal etc)
et ensuite de pouvoir les rentrer dans un autre logiciel (Microsoft Dynamic NAV) dans une fiche client.
A l'heure actuelle ma technique est de naviguer grace à Autoit avec les raccourcis clavier dans le Userform excel et de faire un copier coller des valeures Textbox puis d'en faire des variables dans autoit.
Ensuite j'ouvre NAV et tour à tour je copie les variables dans le clipboard et les colle dans NAV à la bonne place (toujours à coup de TAB, ctrl+c, ctrl+v etc)
Ce la fonctionne mais prend énormément de temp et n'est pas toujours précis.
L'idee serait donc de collecter en une seule fois les données du userform pour gagner du temps (et pourquoi pas tout coller d'un coup dans NAV si possible).
Le presse papier ne pouvant garder qu'une seule info à la fois je ne vois pas comment faire ...
Avez vous une idée ?
Merci mille fois de prendre le temps pour mon probleme.
Tout d'abord merci beaucoup pour votre réponse.
J'y vois un peu plus clair ...
Le seul hic c'est que j'ai besoin de garder en mémoire plusieurs informations .
Le projet global est de collecter des informations client depuis le Userform d'excel (Nom, Prenom, Adresse, Code postal etc)
et ensuite de pouvoir les rentrer dans un autre logiciel (Microsoft Dynamic NAV) dans une fiche client.
A l'heure actuelle ma technique est de naviguer grace à Autoit avec les raccourcis clavier dans le Userform excel et de faire un copier coller des valeures Textbox puis d'en faire des variables dans autoit.
Ensuite j'ouvre NAV et tour à tour je copie les variables dans le clipboard et les colle dans NAV à la bonne place (toujours à coup de TAB, ctrl+c, ctrl+v etc)
Ce la fonctionne mais prend énormément de temp et n'est pas toujours précis.
L'idee serait donc de collecter en une seule fois les données du userform pour gagner du temps (et pourquoi pas tout coller d'un coup dans NAV si possible).
Le presse papier ne pouvant garder qu'une seule info à la fois je ne vois pas comment faire ...
Avez vous une idée ?
Merci mille fois de prendre le temps pour mon probleme.
- walkson
- Modérateur
- Messages : 1020
- Enregistré le : ven. 12 août 2011 19:49
- Localisation : Hurepoix
- Status : Hors ligne
Re: Lire depuis Textbox dans un formulaire Excel
Bonjour,
Il suffit de compiler tous les infos dans une seule donnée
Ce qui donne pour Autoit
Les Msgbox() ou les _ArrayDisplay() ne sont pas indispensables mais permettent de visualiser le résultat
Je vous joints le classeur Excel pour la partie VBA
Sur la partie Autoit, la suite du code pourrait être
Mais là, je travaille en aveugle n'ayant pas le logiciel.
Pour vous aider à retrouver les "Class" ou les "Edit" il y a l'outil Au3info (depuis scite ctrl+F6) où vous glissez le Finder Tool sur le contrôle désiré du programme. Toutes les infos devraient s'afficher.
Il suffit de compiler tous les infos dans une seule donnée
Private Sub CommandButton_Click()
val1 = TextBox1.Value
val2 = TextBox2.Value
val3 = TextBox3.Value
val4 = TextBox4.Value
ensemble = val1 & "|" & val2 & "|" & val3 & "|" & val4
CopyText (ensemble)
sFile = ActiveWorkbook.Path & "\test.exe "
Shell sFile
End Sub
val1 = TextBox1.Value
val2 = TextBox2.Value
val3 = TextBox3.Value
val4 = TextBox4.Value
ensemble = val1 & "|" & val2 & "|" & val3 & "|" & val4
CopyText (ensemble)
sFile = ActiveWorkbook.Path & "\test.exe "
Shell sFile
End Sub
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile=test.exe
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <Array.au3>
$maval = ClipGet()
MsgBox(0,"",$maval)
$array = StringSplit($maval,"|")
_ArrayDisplay($array)
#AutoIt3Wrapper_Outfile=test.exe
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <Array.au3>
$maval = ClipGet()
MsgBox(0,"",$maval)
$array = StringSplit($maval,"|")
_ArrayDisplay($array)
Je vous joints le classeur Excel pour la partie VBA
Sur la partie Autoit, la suite du code pourrait être
ShellExecute("Microsoft Dynamic NAV")
Do
$hWnd = WinActive ( "[CLASS:Microsoft Dynamic NAV]" , "" )
Until $hWnd <> 0
ControlSetText($hWnd, "", "Edit1", $array[1])
ControlSetText($hWnd, "", "Edit2", $array[2])
ControlSetText($hWnd, "", "Edit3", $array[3])
ControlSetText($hWnd, "", "Edit4", $array[4])
Do
$hWnd = WinActive ( "[CLASS:Microsoft Dynamic NAV]" , "" )
Until $hWnd <> 0
ControlSetText($hWnd, "", "Edit1", $array[1])
ControlSetText($hWnd, "", "Edit2", $array[2])
ControlSetText($hWnd, "", "Edit3", $array[3])
ControlSetText($hWnd, "", "Edit4", $array[4])
Pour vous aider à retrouver les "Class" ou les "Edit" il y a l'outil Au3info (depuis scite ctrl+F6) où vous glissez le Finder Tool sur le contrôle désiré du programme. Toutes les infos devraient s'afficher.
- Fichiers joints
-
- lienAutoit.xlsb
- (23.51 Kio) Téléchargé 138 fois
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
-
- Niveau 1
- Messages : 3
- Enregistré le : ven. 01 févr. 2019 18:08
- Status : Hors ligne
Re: Lire depuis Textbox dans un formulaire Excel
@walkson
J'ai un dernier soucis :
Je me suis inspiré de ton code mais je n'arrive pas à me débarrasser de cette erreur lorsque je lance mon script autoit via SciTE :
Voici ce que j'ai fait :
Dans un Module de mon fichier excel :
Dans le UserForm excel :
et dans AUTOIT :
Je n'arrive pas à le faire confectionner pourtant je ne vois pas ou est l'erreur ...
Merci encore de ton aide.
J'ai un dernier soucis :
Je me suis inspiré de ton code mais je n'arrive pas à me débarrasser de cette erreur lorsque je lance mon script autoit via SciTE :
>"C:\Program Files (x86)\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\Users\Home\test.au3"
Voici ce que j'ai fait :
Dans un Module de mon fichier excel :
Code : Tout sélectionner
Sub Autoit()
MaCommande = "C:\Program Files (x86)\AutoIt3\AutoIt3_x64.exe"
MonFichier = "C:\Users\Home\test.au3"
Shell Chr(34) & MaCommande & Chr(34) & " " & Chr(34) & MonFichier & Chr(34)
End Sub
Code : Tout sélectionner
Private Sub Button_Click()
VarNom = TextBox2
VarPrenom = TextBox3
Open "C:\Users\Home\test.txt" For Output As #1
Print #1, VarPrenom
Print #1, VarNom
Close #1
Call Autoit
End Sub
et dans AUTOIT :
Local $file=FileOpen("C:\Users\Home\test.txt", 0)
; Check if file opened for reading OK
If $file = -1 Then
MsgBox(0, "Error", "Unable to open file.")
Exit
EndIf
; Read in lines of text until the EOF is reached
While 1
Local $varnom = FileReadLine($file, 1)
$varprenom = FileReadLine($file, 2)
If @error = -1 Then ExitLoop
WEnd
FileClose($file)
Opt("WinTitleMatchMode",2)
$hWnd2 = WinWait("New - ")
Opt("WinTitleMatchMode",2)
WinActivate($hWnd2)
Sleep(1000)
ControlFocus("New - Fiche contact", "", "[CLASS:WindowsForms10.EDIT.app.0.190610d_r6_ad1; INSTANCE:5]")
ControlSend("New - Fiche contact", "", "[CLASS:WindowsForms10.EDIT.app.0.190610d_r6_ad1; INSTANCE:5]",$varnom)
; Check if file opened for reading OK
If $file = -1 Then
MsgBox(0, "Error", "Unable to open file.")
Exit
EndIf
; Read in lines of text until the EOF is reached
While 1
Local $varnom = FileReadLine($file, 1)
$varprenom = FileReadLine($file, 2)
If @error = -1 Then ExitLoop
WEnd
FileClose($file)
Opt("WinTitleMatchMode",2)
$hWnd2 = WinWait("New - ")
Opt("WinTitleMatchMode",2)
WinActivate($hWnd2)
Sleep(1000)
ControlFocus("New - Fiche contact", "", "[CLASS:WindowsForms10.EDIT.app.0.190610d_r6_ad1; INSTANCE:5]")
ControlSend("New - Fiche contact", "", "[CLASS:WindowsForms10.EDIT.app.0.190610d_r6_ad1; INSTANCE:5]",$varnom)
Je n'arrive pas à le faire confectionner pourtant je ne vois pas ou est l'erreur ...
Merci encore de ton aide.