Bonjour,
J'aimerai avoir votre avis sur un usage et la construction d'une macro maitresse qui ouvre et exécute les macros d'un classeur esclave...
Le classeur maitre est ouvert par le planificateur de taches Windows (session verrouillé) par un fichier .bat
Dans le classeur maitre Automate_RLL_Fermeture.xlsm je lance la macro de gestion du classeur esclave dans Workbook_Open
Alors ca va vous paraitre dégelasse (je suis un grand débutant, restez indulgeant s'il vous plait) d'où ma sollicitation car ca marche... mais pas tout le temps et je cherche pourquoi pas tout le temps : est ce que ca peut venir du planificateur de taches, du classeur esclave, je la synchronisation onedrive !!!
C'est assez difficile à debugger car l'exécution se fait quand je suis absent (session windows verrouillée) et quand je la teste en lancement manuel, tout est ok
Globalement, vous en pensez quoi sur le principe de fonctionnement et d'écriture ? Est ce que par exemple le Application.Wait (Now + TimeValue("0:00:30")) après l'ouverture du fichier esclave peut empêcher de temps en temps le lancement des macro esclaves...
J'espère être claire... le but est de planifier le classeur maitre pour lancer les macros du classeur esclave
Merci d'avance
J'aimerai avoir votre avis sur un usage et la construction d'une macro maitresse qui ouvre et exécute les macros d'un classeur esclave...
Le classeur maitre est ouvert par le planificateur de taches Windows (session verrouillé) par un fichier .bat
VB:
taskkill /F /IM Excel.exe
taskkill /F /IM Outlook.exe
"C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE" "C:\Users\oroy\OneDrive\2-Excel\AA-Macro en cours\Automate_RLL_Fermeture\Automate_RLL_Fermeture.xlsm"
Dans le classeur maitre Automate_RLL_Fermeture.xlsm je lance la macro de gestion du classeur esclave dans Workbook_Open
Code:
Private Function VerifClasseur(Fichier As String) As Integer
Dim x As Integer
'Fonction pour verifier le contenu du dossier
On Error Resume Next
x = FreeFile()
Open Fichier For Input Lock Read As #x
Close x
VerifClasseur = Err.Number
On Error GoTo 0
End Function
Sub Lanceur()
'Variable pour ouverture du fichier esclave
Dim Dossier As String
Dim NomFichier As String
Dim Extension As String
Dim Fichier As String
'Variable pour la verification des fichiers
Dim test As String
Dim s As String
'Excution sauf le Dimanche
If Weekday(Date) <> 1 Then
'---------------------------------------------------------------------------------------------------------------------
Application.DisplayAlerts = False
'Ouvre le classeur escalve avec un nom variable
NomFichier = "RLL_Fermeture" '/!\/!\/!\/!\/!\/!\/!\ Changer le nom du fichier esclave
Dossier = Left(ThisWorkbook.Path, InStrRev(ThisWorkbook.Path, "\") - 1)
Extension = ".xlsm"
Fichier = Dir(Dossier & "\" & NomFichier & "*" & Extension)
Workbooks.Open Filename:=Dossier & "\" & Fichier
Application.Wait (Now + TimeValue("0:00:30"))
'---------------------------------------------------------------------------------------------------------------------
'Ferme gadd, copie le fichier de configuration et lance la tache planifiée
Shell "taskkill /f /im GADDxl.exe", vbHide 'Ferme gadd
Shell "taskkill /f /im AutoGADD.exe", vbHide 'Ferme gadd
Application.Wait (Now + TimeValue("0:00:10"))
Application.Run "'" & Fichier & "'!Creation_Dossier_Fichiers" '/!\/!\/!\/!\/!\/!\/!\ Changer le nom de la macro
Application.Wait (Now + TimeValue("0:00:10"))
Application.Run "'" & Fichier & "'!Transfert_fichier_config_autogadd" '/!\/!\/!\/!\/!\/!\/!\ Changer le nom de la macro
Application.Wait (Now + TimeValue("0:00:30"))
'Lance la tache planifiée autogadd
Shell "schtasks /run /tn AutoGADD", vbHide '/!\/!\/!\/!\/!\/!\/!\ Changer le nom de la tache planifiée
Application.Wait (Now + TimeValue("0:03:00"))
'---------------------------------------------------------------------------------------------------------------------
test = 1 'variable de test
Verif:
s = ""
If VerifClasseur("C:\ProgramData\WinGADD\GADD_MHS\GADD_OUTPUT\AutoGADD\RLL\SG010_PG.xlsm") = 53 Then s = s & vbCrLf & "Fichier fichier1A.csv introuvable"
If VerifClasseur("C:\ProgramData\WinGADD\GADD_MHS\GADD_OUTPUT\AutoGADD\RLL\SLM0007a_PG.xlsm") = 53 Then s = s & vbCrLf & "Fichier fichier1A.csv introuvable"
If VerifClasseur("C:\ProgramData\WinGADD\GADD_MHS\GADD_OUTPUT\AutoGADD\RLL\OPQ_PG.xlsm") = 53 Then s = s & vbCrLf & "Fichier fichier1A.csv introuvable"
If VerifClasseur("C:\ProgramData\WinGADD\GADD_MHS\GADD_OUTPUT\AutoGADD\RLL\SG010_PG_v2.xlsm") = 53 Then s = s & vbCrLf & "Fichier fichier1A.csv introuvable"
If s <> "" Then
If test = 1 Then
Shell "taskkill /f /im GADDxl.exe", vbHide 'Ferme gadd
Shell "taskkill /f /im AutoGADD.exe", vbHide 'Ferme gadd
Application.Wait (Now + TimeValue("0:00:10"))
Application.Run "'" & Fichier & "'!Creation_Dossier_Fichiers" '/!\/!\/!\/!\/!\/!\/!\ Changer le nom de la macro
Application.Wait (Now + TimeValue("0:00:10"))
Application.Run "'" & Fichier & "'!Transfert_fichier_config_autogadd" '/!\/!\/!\/!\/!\/!\/!\ Changer le nom de la macro
Application.Wait (Now + TimeValue("0:00:30"))
'Lance la tache planifiée autogadd
Shell "schtasks /run /tn AutoGADD", vbHide '/!\/!\/!\/!\/!\/!\/!\ Changer le nom de la tache planifiée
Application.Wait (Now + TimeValue("0:03:00"))
test = 2
GoTo Verif 'refait la vérif
Else
If test = 2 Then
Set ie = CreateObject("InternetExplorer.application")
qurl = "https://theking31.eu.jeedom.link/core/api/jeeApi.php?apikey=1sjnRqWFIT0Nh8UOj0SQiG8k2LbskJxT&type=scenario&id=265&action=start"
ie.navigate qurl
Do
DoEvents
Loop Until ie.readyState = 4
Application.DisplayAlerts = True
'Tue Excel
Shell "taskkill /f /im Excel.exe", vbHide
End If
End If
Else
'MAJ lancée (avec le nom du fichier variable)
Application.Run "'" & Fichier & "'!MAJ" '/!\/!\/!\/!\/!\/!\/!\ Changer le nom de la macro
Application.Wait (Now + TimeValue("0:03:00"))
'---------------------------------------------------------------------------------------------------------------------
'Archivage lancée (avec le nom du fichier variable)
Application.Run "'" & Fichier & "'!Archive" '/!\/!\/!\/!\/!\/!\/!\Changer le nom de la macro
Application.Wait (Now + TimeValue("0:03:00"))
'---------------------------------------------------------------------------------------------------------------------
'Envoyer le mail
'Excution le Jeudi pour envoyer mail
'If Weekday(Date) = 5 Then
Application.Run "'" & Fichier & "'!Mail_avec_Pièce" '/!\/!\/!\/!\/!\/!\/!\Changer le nom de la macro
Application.Wait (Now + TimeValue("0:01:00"))
'Application.Run "'" & Fichier & "'!Supp_Archive" '/!\/!\/!\/!\/!\/!\/!\Changer le nom de la macro
'Application.Wait (Now + TimeValue("0:00:10"))
'End If
'---------------------------------------------------------------------------------------------------------------------
Application.DisplayAlerts = True
Shell "taskkill /f /im Excel.exe", vbHide
End If
Else
'Tue excel
Shell "taskkill /f /im Excel.exe", vbHide
End If
End Sub
Alors ca va vous paraitre dégelasse (je suis un grand débutant, restez indulgeant s'il vous plait) d'où ma sollicitation car ca marche... mais pas tout le temps et je cherche pourquoi pas tout le temps : est ce que ca peut venir du planificateur de taches, du classeur esclave, je la synchronisation onedrive !!!
C'est assez difficile à debugger car l'exécution se fait quand je suis absent (session windows verrouillée) et quand je la teste en lancement manuel, tout est ok
Globalement, vous en pensez quoi sur le principe de fonctionnement et d'écriture ? Est ce que par exemple le Application.Wait (Now + TimeValue("0:00:30")) après l'ouverture du fichier esclave peut empêcher de temps en temps le lancement des macro esclaves...
J'espère être claire... le but est de planifier le classeur maitre pour lancer les macros du classeur esclave
Merci d'avance