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

Problème macro qui s'exécute en boucle

GTT-76

XLDnaute Nouveau
Bonjour à la communauté !
Voici mon souci.
J'ai un classeur principal dans lequel j'importe les données d'autres classeurs secondaires, chacun de ces classeurs ayant un tableau identique, donc faciles à importer pour ne faire qu'un seul tableau dans le classeur principal.
Je me sers de la macro suivante (qui fonctionne parfaitement), qui ouvre chaque classeur secondaire, copie les données, les importe dans le classeur principal, ferme le classeur secondaire et passe au suivant, jusqu'à ce qu'il n'y ait plus rien à ouvrir dans le dossier spécifié :
VB:
    sousRépertoire = "Ateliers"
    [B4].CurrentRegion.Offset(1, 0).Clear
    Set maitre = ActiveWorkbook
    Repertoire = ThisWorkbook.Path
    nf = Dir(Repertoire & "\" & sousRépertoire & "\*.xlsm")
    Do While nf <> ""
        Workbooks.Open Filename:=Repertoire & "\" & sousRépertoire & "\" & nf
    '--- RETRAIT DE LA PROTECTION ---
    ActiveSheet.Unprotect
    Range("B4").Select
        ActiveSheet.ShowAllData
        n = [B5].CurrentRegion.Rows.Count - 1
        [B5].CurrentRegion.Offset(1, 0).Copy _
        maitre.Sheets(1).[B2000].End(xlUp).Offset(1, 0)
        ActiveWorkbook.Close False
        nf = Dir
    Loop

Je n'ai jamais eu de souci avec ça...
Dans chaque classeur secondaire, j'ai installé une "minuterie", qui fonctionne elle aussi parfaitement, afin qu'ils s'enregistrent et se ferment automatiquement au bout de 15 minutes, pour éviter que les utilisateurs ne les laissent ouverts (étant donné que plusieurs utilisateurs différents doivent les renseigner).
Dans le module 1 :
Code:
Option Explicit

Public Activity0 As Date

Sub Début()
Activity0 = Now + TimeValue("00:15:00")
Application.OnTime Activity0, "Fermeture"
End Sub

Sub Fermeture()
With ThisWorkbook
    .Save
    .Close
End With
End Sub

Sub fin()
On Error Resume Next
Application.OnTime Activity0, "Fermeture", , False
End Sub

Dans ThisWorkbook :
Code:
Private Sub Workbook_Open()
Call Début
End Sub

Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
Call fin
Call Début
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Call fin
Call Début
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Call fin
Call Début
End Sub

Le hic, c'est qu'une la macro de regroupement des données exécutée une première fois, les classeurs secondaires vont vouloir s'ouvrir et se fermer au bout du temps imparti, et ce indéfiniment si je ne ferme pas le classeur principal (ou même si un autre classeur excel est ouvert en parallèle... J'ai eu beau rajouter un code obligeant les utilisateurs à activer les macros des classeurs secondaires à l'ouverture de ces derniers, pensant que ça pouvait venir de là si l'un d'eux ne le faisait pas, mais le problème demeure...

Auriez-vous une idée de ce qui ne fonctionne pas correctement ?

Merci de vous pencher sur mon problème.
David
 

GTT-76

XLDnaute Nouveau
Bon sang de bonsoir... Mais c'est bien sûr !!!

Bonsoir @Dranreb et merci pour la solution ultra-simple et logique mais ô combien impossible à trouver pour moi depuis, depuis, depuis.........
C'est magique, ça fonctionne parfaitement, merci beaucoup !!!

Longue vie à cette communauté qui m'apprend tous les jours un peu plus à me dépatouiller avec Excel...

David
 

Discussions similaires

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