Bonjour à tous,

Je trouve habituellement mes réponses dans les pages de cet excellent forum mais là, je suis dans une impasse…

Au boulot, nous recevons quotidiennement des fichiers csv que nous retraitons pour nos besoins.
Nous avons près de 150 ‘modèles’ en vba Excel qui fonctionnent tous sur le même principe:
  • On lance le modèle, qui lance la sub principale automatiquement :
  • le fichier csv source est identifié et traité (selon les cas : impression, envoi pas mail, enregistrement sur le réseau, application de filtre, etc)
    La sub principale en appelle d’autre en fonction des besoins.
  • puis le modèle se ferme après une demande de confirmation (‘Fermer le modèle ?’).


Avec le ‘Grand Confinement’, je me retrouve à faire le travail de plusieurs personnes je souhaite donc gagner du temps en enchainent les différents modèles automatiquement.

J’ai écrit une procédure ‘AllinOne’ qui doit lister les fichiers csv à traiter et appeler les modèles correspondants.

La boucle d’appel des modèles de ma procédure ‘AllinOne’ :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
'A ce stade, les fichiers csv sont identifiés et listés sur une feuille du classeur.
'Cells(i,3) contient le nom du modèle à appeler. Cells(i,4) indique si le modèle existe.
    i = 5
    Do While Cells(i, 3) <> ""
        If Cells(i, 4) = "connu" Then
            Modele = Thisworkbook.Path & "\MODELES\" & Cells(i, 3) & ".xlsm"
            Workbooks.Open Modele
 
            Cells(i, 4).Value = "Traité"
        End If
        i = i + 1
    Loop
La macro du modèle appelé se déroule sans incident...

MAIS, à la sortie du modèle, après avoir validé la demande de confirmation (‘Fermer le modèle ?’) la macro ‘AllinOne’ ne reprend pas.
Pas de message d’erreur.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
'Fin de la macro des modèles : 
            If MsgBox("Fermer ce modèle ?", vbYesNo) = vbYes Then
            Application.DisplayFullScreen = False
            With ThisWorkbook
                    .Saved = True
                    .Close
             End With
J’ai tenté d’utiliser la formulation ‘Application.Run Modele !Module.Procédure’ pour appeler le modèle mais le résultat est identique.

L'execution pas à pas m'a permis de voir qu'après le .Close, je reviens sur le code de la macro 'AllinOne'.
Le curseur clignote sous la ligne 'Workbooks.Open Modele' mais la macro est arrêtée.

Avez-vous une idée pour me sortir de cette ornière ?

Merci d'avance pour vos conseils.