[R] Importer puis executer vba sur fichier excel fermé

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
JulienBoul
Niveau 4
Niveau 4
Messages : 80
Enregistré le : ven. 04 déc. 2015 13:55
Status : Hors ligne

[R] Importer puis executer vba sur fichier excel fermé

#1

Message par JulienBoul » mer. 13 mars 2019 09:24

Bonjour,

J'ai 3 fichiers sur mon bureau, dont mon script

XXX.xlsx avec 2 onglets, l'onglet AAA et l'onglet BBB
YYY.bas qui contient ma macro
ZZZ.au3 qui est mon script

Je cherche a importer ma macro (dans le fichier YYY.bas) directement dans mon fichier XXX.xlsx, sachant que celui ci sera un fichier qui changera chaque semaine.
Je pense donc qu'une inputbox avec le nom du fichier serait à utiliser à l'avenir (je l'ai inscrit dans le dur pour le moment pour travailler le script).

Peut on partir d'un fichier xlsx classique (ou faut il convertir en xlsm?), importer ma macro, l’exécuter sur l'onglet BBB puis ouvrir le fichier (excel) en version finale?

Chaque semaine, je lancerai mon script, et celui-ci s'exécuterai sur le nouveau fichier que j'aurai placé sur mon bureau.


J'ai regardé plusieurs forums et suis arrivé à cette version de script (qui n'est pas de moi), mais il reste des zones d'ombres, je ne comprend pas tout ce que je fais, je débute en vba, du coup le mix des deux, je galère un peu. SI à cela on ajoute l'udf Excel.au3 que je maîtrise mal... J'suis un peu pommé la.

#include <excel.au3>
Global $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc")
Global $oExcel = _Excel_Open(@ScriptDir &"\XXX.xlsx")
;msgbox(0,0,@ScriptDir &"\XXX.xlsx")
$oExcel.VBE.ActiveVBProject.VBComponents.Import(@ScriptDir & "\YYY.bas")
$oExcel.Run("Positionsdaten")
Exit
; User's COM error function. Will be called if COM error occurs
Func _ErrFunc($oError)
    ; Do anything here.
    ConsoleWrite("err.number is: " & @TAB & $oError.number & @CRLF & _
            "err.windescription:" & @TAB & $oError.windescription & @CRLF & _
            "err.description is: " & @TAB & $oError.description & @CRLF & _
            "err.source is: " & @TAB & $oError.source & @CRLF & _
            "err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _
            "err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _
            "err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _
            "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
            "err.retcode is: " & @TAB & $oError.retcode & @CRLF & @CRLF)
EndFunc   ;==>_ErrFunc
Modifié en dernier par JulienBoul le mer. 13 mars 2019 14:37, modifié 1 fois.

Avatar du membre
walkson
Modérateur
Modérateur
Messages : 670
Enregistré le : ven. 12 août 2011 18:49
Localisation : Essonne
Status : Hors ligne

Re: [..] Importer puis executer vba sur fichier excel fermé

#2

Message par walkson » mer. 13 mars 2019 13:40

Bonjour,
Je ne comprends pas très bien votre démarche !? Pourquoi voulez vous copier une macro alors qu'il est possible de lancer une macro modifiant un classeur (xlsx) à partir d'un autre classeur (xslm) ou d'autoit ?
A titre d'exemple, ma macro est enregistrée dans YYY.xlsb et je modifie XXX.xlsx (les 2 classeurs cote à cote)
Sub AA()
Workbooks.Open Filename:=ThisWorkbook.Path & "\XXX.xlsx", ReadOnly:=False

ActiveWorkbook.Sheets(1).Select
With ActiveSheet
Range("A1").Value = "AAA1"
Range("B1").Value = "BBB1"
End With

End Sub
Même opération en lançant à partir d'Autoit
#include <Excel.au3>

Local $oExcel = _Excel_Open(True)
Local $oWorkbook = _Excel_BookOpen($oExcel, @ScriptDir & "\XXX.xlsx")
_Excel_RangeWrite($oWorkbook,Default, "AAA", "A1")
_Excel_RangeWrite($oWorkbook, Default, "BBB", "B1")
;_Excel_BookSave($oWorkbook)
D'autre part, pour lancer une macro d'Excel, le classeur doit être en xlsm ou xslb. Pour Autoit, cela n'a pas d’importance puisque la macro est convertie en langage Autoit et lancer d'Autoit
On peut avoir un code vba ou Autoit qui modifie une multitude de classeurs
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi

JulienBoul
Niveau 4
Niveau 4
Messages : 80
Enregistré le : ven. 04 déc. 2015 13:55
Status : Hors ligne

Re: [..] Importer puis executer vba sur fichier excel fermé

#3

Message par JulienBoul » mer. 13 mars 2019 14:36

Hello Walkson,

Merci pour ton aide.
Je t'avoue que j'ai mis du temps à comprendre, mais comme quoi, avec de la persévérance. Je manque des bases, donc des choses qui peuvent te paraître évidentes, me demandent beaucoup de concentration et de tests ^^.

Bref, oui, au début j 'avais choisi autoit pour tout faire avec un *.exe et ouvrir le fichier final automatiquement.
Par méconnaissance du VBA, je ne pensais pas qu'on pouvait faire aussi simple. Disons que je mettrai un bouton pour actionner la macro, qu'elle demandera le nom du fichier, puis fermera le fichier xlsm et ouvrira le xlsx à la fin. C'est à mon gout un peu moins clean mais d'après mes premiers tests, je suis sur la bonne voie.
Aucun intérêt de mettre le code ici, car c'est du VBA dédié uniquement à mon projet donc inutilisable pour ceux qui lirons ce fil. Je passe en Résolu.

Encore merci!

Répondre