Lire depuis Textbox dans un formulaire Excel

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
NickTriman
Niveau 1
Niveau 1
Messages : 3
Enregistré le : ven. 01 févr. 2019 18:08
Status : Hors ligne

Lire depuis Textbox dans un formulaire Excel

#1

Message par NickTriman »

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.
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: Lire depuis Textbox dans un formulaire Excel

#2

Message par walkson »

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
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
Pour l'Userform
Private Sub CommandButton_Click()
CopyText (TextBox1.Value)
sFile = ActiveWorkbook.Path & "\test.exe "
Shell sFile
End Sub
Et pour Autoit
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile=test.exe
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
$maval = ClipGet()
MsgBox(0,"",$maval)
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
NickTriman
Niveau 1
Niveau 1
Messages : 3
Enregistré le : ven. 01 févr. 2019 18:08
Status : Hors ligne

Re: Lire depuis Textbox dans un formulaire Excel

#3

Message par NickTriman »

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.
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: Lire depuis Textbox dans un formulaire Excel

#4

Message par walkson »

Bonjour,
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
Ce qui donne pour Autoit
#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)
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
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])
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.
Fichiers joints
lienAutoit.xlsb
(23.51 Kio) Téléchargé 135 fois
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
NickTriman
Niveau 1
Niveau 1
Messages : 3
Enregistré le : ven. 01 févr. 2019 18:08
Status : Hors ligne

Re: Lire depuis Textbox dans un formulaire Excel

#5

Message par NickTriman »

@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 :

>"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
Dans le UserForm excel :

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)

Je n'arrive pas à le faire confectionner pourtant je ne vois pas ou est l'erreur ...

Merci encore de ton aide.
Répondre