Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2019 Avis macro sur classeur maître

Fanrs

XLDnaute Nouveau
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

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
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…