Comment copier une feuille dans un autre classeur en VBA

# Comment copier une feuille dans un autre classeur en VBA

La gestion des classeurs Excel représente une tâche quotidienne pour de nombreux professionnels manipulant des volumes importants de données. Lorsqu’il s’agit de transférer des informations entre différents fichiers, la méthode manuelle devient rapidement chronophage et sujette aux erreurs. Le langage VBA (Visual Basic for Applications) offre une solution puissante pour automatiser ces opérations répétitives, notamment la copie de feuilles de calcul d’un classeur à l’autre. Maîtriser cette compétence permet non seulement d’économiser un temps précieux, mais également de garantir la cohérence et la fiabilité de vos processus de traitement de données. Cette technique s’avère particulièrement utile dans des contextes professionnels nécessitant la consolidation régulière de rapports, la distribution de tableaux de bord ou l’archivage mensuel de résultats.

Syntaxe VBA de la méthode Worksheet.Copy pour dupliquer des feuilles entre classeurs

La méthode Worksheet.Copy constitue le fondement de toute opération de duplication de feuilles en VBA. Cette méthode appartient à l’objet Worksheet et permet de créer une copie complète d’une feuille de calcul, incluant son contenu, sa mise en forme et ses objets intégrés. La syntaxe de base s’articule autour d’une expression simple : expression.Copy(Before, After), où l’expression représente l’objet Worksheet que vous souhaitez dupliquer.

L’utilisation de cette méthode offre une flexibilité remarquable. Lorsqu’aucun paramètre n’est spécifié, Excel crée automatiquement un nouveau classeur contenant uniquement la feuille copiée. Cette particularité s’avère extrêmement pratique pour générer rapidement des fichiers autonomes à partir de données existantes. Par exemple, un responsable financier pourrait utiliser cette fonctionnalité pour extraire mensuellement les résultats d’une division spécifique et les distribuer de manière isolée.

La puissance de la méthode Copy réside également dans sa capacité à préserver l’intégrité des données. Contrairement à une simple copie de valeurs, cette approche maintient toutes les formules, les formats conditionnels, les graphiques intégrés et même les codes VBA associés à la feuille source. Cette conservation exhaustive garantit que la feuille dupliquée demeure fonctionnelle et autonome dans son nouvel environnement.

Paramètres before et after dans la méthode copy

Les paramètres Before et After représentent des arguments facultatifs mais mutuellement exclusifs qui déterminent l’emplacement de la feuille copiée dans le classeur de destination. Cette exclusivité signifie que vous ne pouvez spécifier qu’un seul de ces deux paramètres lors d’une opération de copie. Le paramètre Before indique que la feuille dupliquée doit être placée avant une feuille spécifique, tandis que After la positionne après.

Voici un exemple concret illustrant l’utilisation du paramètre After pour copier une feuille nommée « Données_Janvier » après la dernière feuille d’un classeur :

Worksheets(« Données_Janvier »).Copy After:=Workbooks(« Rapport_Annuel.xlsx »).Sheets(Workbooks(« Rapport_Annuel.xlsx »).Sheets.Count)

Cette instruction positionne stratégiquement la copie en fin de classeur en utilisant la propriété Sheets.Count qui retourne le nombre total de feuilles. Pour une insertion

avant une feuille donnée, vous auriez simplement utilisé le paramètre Before :

Worksheets(« Données_Janvier »).Copy Before:=Workbooks(« Rapport_Annuel.xlsx »).Sheets(1)

Dans cet exemple, la feuille est insérée en première position du classeur de destination. Retenez bien cette logique : Before et After ne peuvent jamais être utilisés simultanément. Si vous le faites, Excel lèvera une erreur d’exécution 1004. Lorsque vous automatisez la copie de feuilles dans un autre classeur en VBA, il est donc recommandé de toujours définir clairement le contexte (début, fin ou avant/après une feuille précise) pour éviter les comportements inattendus.

Utilisation de l’objet workbooks pour cibler le classeur de destination

Pour copier une feuille dans un autre classeur, vous devez impérativement cibler ce dernier via l’objet Workbooks. Cet objet représente la collection de tous les classeurs ouverts dans l’instance d’Excel. En combinant Workbooks() avec la méthode Copy, vous contrôlez précisément où la feuille sera insérée.

Voici un exemple simple où l’on copie la feuille « Tableau_de_Bord » du classeur courant vers un classeur déjà ouvert nommé « Suivi_Annuel.xlsx » :

ThisWorkbook.Worksheets(« Tableau_de_Bord »).Copy _ After:=Workbooks(« Suivi_Annuel.xlsx »).Sheets(Workbooks(« Suivi_Annuel.xlsx »).Sheets.Count)

Ici, ThisWorkbook désigne le classeur contenant le code VBA (nous y reviendrons), tandis que Workbooks("Suivi_Annuel.xlsx") pointe vers le fichier cible. Cette approche est beaucoup plus robuste que de s’appuyer uniquement sur le classeur actif, surtout lorsque plusieurs fichiers sont ouverts. En production, où les utilisateurs manipulent souvent plusieurs classeurs simultanément, cette précision évite de nombreux bugs difficiles à diagnostiquer.

Gestion des références absolues avec ThisWorkbook et ActiveWorkbook

En VBA, la distinction entre ThisWorkbook et ActiveWorkbook est fondamentale lorsque vous copiez des feuilles entre classeurs. ThisWorkbook désigne toujours le classeur dans lequel le code VBA est enregistré, alors que ActiveWorkbook fait référence au classeur actuellement actif dans l’interface Excel. Ces deux notions coïncident parfois, mais pas systématiquement.

Imaginez que votre macro, stockée dans un classeur de pilotage, ouvre un autre fichier puis lance une copie de feuille. Si vous utilisez ActiveWorkbook sans précaution, vous risquez de copier depuis ou vers le mauvais fichier. En revanche, en combinant les deux références, vous fiabilisez l’opération :

‘ Classeur contenant la macroDim wbSource As WorkbookSet wbSource = ThisWorkbook’ Classeur ouvert dynamiquementDim wbDest As WorkbookSet wbDest = Workbooks(« Reporting_2024.xlsx »)wbSource.Worksheets(« Synthèse »).Copy _ After:=wbDest.Sheets(wbDest.Sheets.Count)

En procédant ainsi, vous éliminez toute ambiguïté sur l’origine et la destination de la copie. Cette bonne pratique devient cruciale dans les projets complexes où plusieurs macros interagissent avec différents fichiers, parfois ouverts en arrière-plan.

Différences entre copy en tant que nouvelle feuille ou dans un classeur existant

La même méthode Copy permet de créer soit un nouveau classeur, soit d’ajouter une feuille à un classeur existant. La différence repose uniquement sur la présence ou non des paramètres Before ou After. Si aucun de ces deux arguments n’est renseigné, Excel crée un nouveau classeur contenant uniquement la feuille copiée.

Par exemple, l’instruction suivante génère un fichier autonome avec la feuille « Budget » :

Worksheets(« Budget »).Copy

À l’inverse, dès que vous indiquez un paramètre de position, la feuille est dupliquée dans un classeur déjà ouvert :

Worksheets(« Budget »).Copy After:=Workbooks(« Consolidation.xlsx »).Sheets(1)

On peut comparer cela à un photocopieur : soit vous imprimez une nouvelle brochure (nouveau classeur), soit vous insérez des pages supplémentaires dans un document existant. Selon votre besoin (archivage mensuel, consolidation multi-sources, envoi ciblé à un client), vous choisirez l’une ou l’autre de ces stratégies, voire une combinaison des deux dans un même projet VBA.

Ouverture et manipulation de classeurs avec VBA avant la copie de feuilles

Pour copier une feuille dans un autre classeur en VBA, celui-ci doit être chargé en mémoire. Autrement dit, le fichier cible doit être ouvert par Excel, même si cela se fait de manière invisible pour l’utilisateur. C’est ici que la méthode Workbooks.Open entre en jeu, couplée à des vérifications préalables du chemin et de l’existence du fichier. Sans cette étape, toute tentative de copie vers un classeur fermé se solderait par une erreur d’exécution.

Méthode Workbooks.Open pour charger le fichier de destination en mémoire

La méthode Workbooks.Open permet d’ouvrir un classeur à partir de son chemin complet. Une fois le fichier ouvert, il devient membre de la collection Workbooks et peut recevoir des feuilles copiées depuis d’autres classeurs. Voici un exemple basique illustrant cette séquence complète :

Dim wbDest As WorkbookSet wbDest = Workbooks.Open(Filename:= »C:ReportsRapport_Annuel.xlsx »)ThisWorkbook.Worksheets(« Tableau_de_Bord »).Copy _ After:=wbDest.Sheets(wbDest.Sheets.Count)

Une bonne pratique consiste à stocker la référence à ce classeur dans une variable objet (wbDest ici). Cela rend le code plus lisible et moins sujet aux erreurs en cas de renommage ultérieur du fichier. Dans un environnement professionnel où les structures de dossiers évoluent régulièrement, cette approche facilite également la maintenance du code VBA.

Vérification de l’existence du classeur cible avec dir et FSO

Avant d’appeler Workbooks.Open, il est prudent de vérifier que le fichier cible existe réellement, sous peine de provoquer une erreur. Pour cela, vous pouvez utiliser la fonction Dir, légère et native, ou l’objet FileSystemObject (FSO) de la bibliothèque Scripting, plus riche mais nécessitant une référence supplémentaire.

Voici un exemple utilisant Dir pour sécuriser l’ouverture du classeur :

Dim cheminFichier As StringcheminFichier = « C:ReportsRapport_Annuel.xlsx »If Dir(cheminFichier) = «  » Then MsgBox « Le fichier de destination est introuvable :  » & cheminFichier, vbCritical Exit SubEnd IfDim wbDest As WorkbookSet wbDest = Workbooks.Open(cheminFichier)

Avec FSO, la logique est similaire mais un peu plus verbeuse. L’avantage est de pouvoir gérer des scénarios plus avancés (création de dossiers, vérification de droits d’accès, etc.). Dans la plupart des cas d’usage liés à la copie de feuilles, la fonction Dir reste toutefois suffisante, rapide et simple à mettre en œuvre.

Gestion du chemin absolu versus chemin relatif avec Application.Path

Une autre question cruciale concerne le type de chemin utilisé : absolu (chemin complet) ou relatif (par rapport à un répertoire de référence). Pour rendre votre macro portable d’un poste à l’autre, il est recommandé de construire des chemins dynamiques à partir de ThisWorkbook.Path ou Application.Path. Cela évite de « câbler » en dur des dossiers spécifiques au poste du développeur.

Par exemple, si le classeur cible se trouve dans le même dossier que le fichier contenant la macro, vous pouvez écrire :

Dim cheminDossier As String, cheminFichier As StringcheminDossier = ThisWorkbook.PathcheminFichier = cheminDossier & « Rapport_Annuel.xlsx »Set wbDest = Workbooks.Open(cheminFichier)

Si, au contraire, vous utilisez Application.Path, vous faites référence au dossier d’installation d’Office, ce qui est rarement approprié pour des rapports métiers. En pratique, on préfèrera donc ThisWorkbook.Path pour rester au plus proche du fichier « maître » et faciliter le déploiement de la solution VBA sur plusieurs machines sans retoucher le code.

Paramètres ReadOnly et UpdateLinks lors de l’ouverture

La méthode Workbooks.Open propose de nombreux paramètres optionnels, dont ReadOnly et UpdateLinks, particulièrement utiles dans le cadre de la copie de feuilles dans un autre classeur. Le paramètre ReadOnly permet d’ouvrir le fichier en lecture seule, évitant tout risque de modification accidentelle. Quant à UpdateLinks, il contrôle la mise à jour automatique des liaisons externes.

Voici un exemple plus complet :

Set wbDest = Workbooks.Open( _ Filename:=cheminFichier, _ ReadOnly:=True, _ UpdateLinks:=0)

Dans cet exemple, le classeur est ouvert en lecture seule et les liens externes ne sont pas mis à jour (UpdateLinks:=0). Ce paramétrage est particulièrement pertinent lorsque vous utilisez un classeur cible uniquement comme conteneur pour vos feuilles archivées. Vous limitez ainsi les temps d’ouverture et les risques de messages d’alerte interrompant l’exécution de la macro.

Gestion des noms de feuilles et résolution des conflits de duplication

Lorsque vous copiez une feuille dans un autre classeur en VBA, la gestion des noms devient rapidement un sujet central. Excel impose en effet l’unicité des noms de feuilles dans un même classeur. Si une feuille portant déjà ce nom existe dans le fichier cible, une erreur d’exécution 1004 sera générée. Pour garantir une automatisation fiable, vous devez donc anticiper, détecter et résoudre ces conflits de nommage.

Renommage automatique avec la propriété Worksheet.Name après copie

Une première approche consiste à laisser Excel copier la feuille, puis à la renommer immédiatement après l’opération. La feuille nouvellement créée devient automatiquement la feuille active, ce qui simplifie le code : vous pouvez utiliser ActiveSheet.Name sans avoir à rechercher explicitement la référence de la nouvelle feuille.

Voici un exemple où l’on renomme la feuille copiée à partir d’une valeur de cellule, par exemple la date du rapport :

ThisWorkbook.Worksheets(« Synthèse »).Copy _ After:=Workbooks(« Rapport_Annuel.xlsx »).Sheets(Workbooks(« Rapport_Annuel.xlsx »).Sheets.Count)On Error Resume NextActiveSheet.Name = Format(ThisWorkbook.Worksheets(« Synthèse »).Range(« B2 »).Value, « mmmm_yyyy »)On Error GoTo 0

Dans ce scénario, si le nom généré est invalide (caractères interdits, doublon, longueur excessive), Excel lèvera une erreur que nous neutralisons temporairement avec On Error Resume Next. Vous pouvez ensuite prévoir une stratégie de repli, par exemple en ajoutant un suffixe numérique ou en avertissant l’utilisateur via un message. Cette logique de renommage automatique est très utile pour créer des archives mensuelles ou des rapports par client.

Détection des doublons avec une boucle for each worksheet

Pour aller plus loin, vous pouvez vérifier à l’avance si un nom de feuille existe déjà dans le classeur de destination. L’idée est de parcourir la collection Worksheets avec une boucle For Each afin de détecter d’éventuels doublons et adapter votre comportement. Vous évitez ainsi les erreurs au moment de la copie ou du renommage.

Voici une fonction utilitaire très simple, que vous pouvez réutiliser dans de nombreux projets :

Function FeuilleExiste(wb As Workbook, nomFeuille As String) As Boolean Dim ws As Worksheet FeuilleExiste = False For Each ws In wb.Worksheets If LCase(ws.Name) = LCase(nomFeuille) Then FeuilleExiste = True Exit Function End If Next wsEnd Function

Vous pourrez ensuite l’exploiter lors de la copie :

Dim nomSouhaité As StringnomSouhaité = « Synthèse_ » & Format(Date, « yyyymm »)If FeuilleExiste(wbDest, nomSouhaité) Then nomSouhaité = nomSouhaité & « _2″End IfThisWorkbook.Worksheets(« Synthèse »).Copy _ After:=wbDest.Sheets(wbDest.Sheets.Count)ActiveSheet.Name = nomSouhaité

Avec cette approche, vous maîtrisez complètement la logique de nommage et évitez que l’utilisateur se retrouve face à des messages d’erreur techniques, parfois déroutants pour un non spécialiste.

Suppression conditionnelle avec Application.DisplayAlerts false

Dans certains cas, vous souhaiterez peut-être écraser systématiquement une feuille existante dans le classeur cible avant de copier la nouvelle version. Pour cela, vous pouvez supprimer la feuille portant le même nom, puis procéder à la copie. Excel affiche normalement un message de confirmation lors de la suppression d’une feuille, mais vous pouvez le neutraliser temporairement via Application.DisplayAlerts.

Voici un schéma de code complet :

Dim nomFeuille As StringnomFeuille = « Synthèse_Mensuelle »If FeuilleExiste(wbDest, nomFeuille) Then Application.DisplayAlerts = False wbDest.Worksheets(nomFeuille).Delete Application.DisplayAlerts = TrueEnd IfThisWorkbook.Worksheets(« Synthèse »).Copy _ After:=wbDest.Sheets(wbDest.Sheets.Count)ActiveSheet.Name = nomFeuille

En désactivant les alertes uniquement sur la courte portion de code concernée, vous évitez toute interaction manuelle sans pour autant perturber le reste du comportement d’Excel. Cette technique s’avère très efficace pour des processus récurrents, par exemple la régénération quotidienne d’un onglet de synthèse dans un classeur partagé.

Préservation des formats, formules et objets VBA lors de la copie

L’un des grands avantages de la méthode Worksheet.Copy par rapport à un simple copier-coller de cellules réside dans la préservation complète de la feuille. Lorsque vous copiez une feuille dans un autre classeur en VBA, vous emportez avec vous non seulement les valeurs, mais aussi les formules, la mise en forme conditionnelle, les graphiques, les segments (slicers), les tableaux croisés dynamiques et les noms de plages associés.

Concrètement, cette approche fonctionne comme un « clonage » de la feuille. Toutes les propriétés sont conservées, y compris le code VBA éventuellement contenu dans le module de code de feuille (événements Worksheet_Change, Worksheet_BeforeDoubleClick, etc.). C’est un point souvent méconnu : si votre projet utilise des feuilles « intelligentes » avec du code événementiel, ce comportement sera reproduit dans le classeur de destination, tant que la copie se fait au sein de la même instance d’Excel.

Attention toutefois à deux limitations fréquentes. D’une part, si votre feuille fait appel à des plages nommées ou des liaisons vers d’autres feuilles qui n’existent pas dans le classeur cible, certaines formules pourront renvoyer des erreurs (#REF!). D’autre part, si vous tentez de copier des feuilles entre deux instances différentes d’Excel (ouvertes via deux icônes distinctes, par exemple), la méthode Copy échouera avec une erreur 1004 car elle ne supporte pas ce scénario. Dans ce cas, il faudra passer par un copier-coller de plages plutôt que de l’onglet entier.

Automatisation complète avec gestion des erreurs on error resume next

Dès que l’on dépasse quelques lignes de code, la gestion des erreurs devient incontournable pour fiabiliser une macro de copie de feuilles. Vous devez anticiper plusieurs cas : fichier cible introuvable, nom de feuille déjà existant, classeur ouvert en exclusif par un autre utilisateur, ou encore rupture de connexion réseau si le fichier se trouve sur un partage. Sans gestion d’erreur, la moindre anomalie interrompra brutalement l’exécution, laissant parfois les classeurs dans un état instable.

Structure Try-Catch en VBA avec GoTo ErrorHandler

VBA ne dispose pas de structure Try...Catch native comme d’autres langages, mais vous pouvez reproduire un comportement similaire avec On Error GoTo et une étiquette d’erreur. Cette structure centralise le traitement des exceptions et vous permet de nettoyer proprement les ressources ouvertes (classeur, objets, etc.).

Voici un exemple de procédure complète illustrant cette logique pour copier une feuille dans un autre classeur :

Sub CopierFeuilleDansClasseur() Dim wbSource As Workbook Dim wbDest As Workbook Dim cheminFichier As String On Error GoTo GestionErreur Set wbSource = ThisWorkbook cheminFichier = wbSource.Path & « Rapport_Annuel.xlsx » If Dir(cheminFichier) = «  » Then Err.Raise vbObjectError + 1, , « Classeur de destination introuvable. » End If Set wbDest = Workbooks.Open(cheminFichier, ReadOnly:=False) wbSource.Worksheets(« Synthèse »).Copy _ After:=wbDest.Sheets(wbDest.Sheets.Count) wbDest.Save wbDest.Close Set wbDest = Nothing Set wbSource = Nothing Exit SubGestionErreur: MsgBox « Erreur lors de la copie :  » & Err.Description, vbCritical On Error Resume Next If Not wbDest Is Nothing Then wbDest.Close SaveChanges:=False Set wbDest = Nothing Set wbSource = NothingEnd Sub

Dans cette structure, nous déclenchons volontairement une erreur personnalisée si le classeur cible n’existe pas. Le bloc GestionErreur centralise l’affichage d’un message clair pour l’utilisateur et assure la fermeture propre des objets éventuellement ouverts. Même si cela peut sembler plus verbeux au départ, cette architecture « try-catch » améliore fortement la robustesse des automatisations VBA.

Fermeture sécurisée des classeurs avec la méthode close SaveChanges

Lorsqu’un classeur est ouvert par votre macro uniquement pour servir de réceptacle à une feuille copiée, il est essentiel de le refermer proprement en spécifiant clairement si vous souhaitez enregistrer ou non les modifications. La méthode Close accepte le paramètre SaveChanges, qui prend les valeurs True, False ou omise (dans ce cas, Excel peut afficher une boîte de dialogue).

Dans un scénario automatisé, il est préférable d’éviter toute interaction manuelle. Vous choisirez donc explicitement :

‘ Enregistrer et fermer le classeur de destinationwbDest.Close SaveChanges:=True’ Ou, si vous ne voulez pas modifier le fichierwbDest.Close SaveChanges:=False

Combiné à une bonne gestion des erreurs, ce paramètre garantit que le fichier cible n’est jamais laissé ouvert en arrière-plan, ce qui pourrait créer des conflits de verrouillage pour d’autres utilisateurs. Dans des environnements multi-utilisateurs, où plusieurs macros manipulent les mêmes fichiers sur un serveur, cette rigueur fait la différence entre un processus stable et un système source d’incidents récurrents.

Libération de la mémoire avec set object nothing

Enfin, même si Excel gère automatiquement la mémoire via son ramasse-miettes, il reste de bonne pratique de libérer explicitement les objets que vous avez instanciés. Pour cela, il suffit de les réaffecter à Nothing à la fin de votre procédure ou dans votre bloc de gestion d’erreur. Cette discipline est particulièrement recommandée lorsque vous enchaînez plusieurs opérations lourdes sur des classeurs volumineux.

La logique est très simple :

Set wbDest = NothingSet wbSource = Nothing

En libérant ces références, vous indiquez clairement au moteur VBA que ces objets ne sont plus nécessaires. C’est un peu comme ranger vos dossiers dans une armoire une fois le travail terminé, plutôt que de les laisser ouverts sur votre bureau. Dans les longs traitements (consolidations mensuelles, archivages annuels, etc.), cette bonne pratique contribue à limiter la consommation mémoire et à réduire les risques de plantage.

Cas pratiques avancés de copie de feuilles multiples et consolidation de données

Après avoir posé toutes ces bases techniques, il est intéressant de voir comment combiner ces éléments dans des scénarios plus avancés. Dans de nombreux contextes professionnels, vous ne copiez pas une seule feuille, mais une série d’onglets issus de plusieurs classeurs pour alimenter un fichier de consolidation. La méthode Copy, associée à des boucles et à une gestion intelligente des noms, devient alors un véritable outil de « récolte » automatisée de données.

Un premier cas fréquent consiste à dupliquer en une fois plusieurs feuilles d’un même classeur vers un autre. Pour cela, vous pouvez utiliser une sélection de feuilles via un tableau de noms :

Dim wbSource As Workbook, wbDest As WorkbookSet wbSource = ThisWorkbookSet wbDest = Workbooks.Open(wbSource.Path & « Consolidation.xlsx »)wbSource.Worksheets(Array(« Janvier », « Février », « Mars »)).Copy _ After:=wbDest.Sheets(wbDest.Sheets.Count)

Dans cet exemple, les trois feuilles « Janvier », « Février » et « Mars » sont copiées d’un seul bloc dans le classeur de consolidation. Vous gagnez ainsi un temps considérable par rapport à une copie feuille par feuille. Vous pouvez ensuite renommer ces onglets, les réorganiser ou les exploiter dans des tableaux croisés dynamiques de synthèse.

Un autre scénario courant est celui de la consolidation multi-fichiers : vous disposez d’un classeur par site, par agence ou par filiale, et vous souhaitez regrouper automatiquement leurs feuilles de synthèse dans un classeur maître. Une boucle sur une liste de fichiers (par exemple issue d’une feuille de paramétrage) permet d’enchaîner les opérations d’ouverture, de copie et de fermeture :

Dim i As Long, dernier As LongDim wbSite As Workbook, wbMaster As WorkbookDim chemin As String, nomFichier As StringSet wbMaster = ThisWorkbookchemin = wbMaster.Path & « Sites »dernier = wbMaster.Worksheets(« Param »).Cells(Rows.Count, « A »).End(xlUp).RowFor i = 2 To dernier nomFichier = wbMaster.Worksheets(« Param »).Cells(i, « A »).Value If Dir(chemin & nomFichier) <> «  » Then Set wbSite = Workbooks.Open(chemin & nomFichier, ReadOnly:=True) wbSite.Worksheets(« Synthèse »).Copy _ After:=wbMaster.Sheets(wbMaster.Sheets.Count) ActiveSheet.Name = « Synth_ » & wbSite.Worksheets(« Synthèse »).Range(« B1 »).Value wbSite.Close SaveChanges:=False End IfNext i

Avec cette macro, vous créez en quelques secondes une consolidation centralisée de toutes les synthèses locales, chacune étant renommée de manière explicite (par exemple avec le code site ou la région stockée en B1). Vous pouvez ensuite ajouter une étape de consolidation des données (somme, moyenne, indicateurs) à partir de ces nouvelles feuilles, ou alimenter automatiquement un tableau de bord global.

Enfin, dans certains cas, vous ne souhaitez pas conserver les formules des feuilles copiées, mais uniquement les valeurs « figées » pour archive. Une combinaison de Worksheet.Copy puis de collage spécial valeurs permet d’obtenir le meilleur des deux mondes : la structure complète de la feuille d’origine, mais sans dépendance aux sources dynamiques. Voici un schéma possible :

ThisWorkbook.Worksheets(« Suivi_Mois »).CopyWith ActiveSheet.UsedRange .Value = .ValueEnd With

En une seule instruction, vous transformez toutes les formules en valeurs dans la feuille nouvellement créée. Vous pouvez ensuite enregistrer ce classeur sous un nom horodaté, l’envoyer par e-mail ou le stocker dans un dossier d’archive. Cette technique est très utilisée pour les clôtures mensuelles ou les rapports réglementaires, où il est crucial de conserver une photographie fidèle des données à une date donnée, sans qu’elles continuent à évoluer au fil du temps.

Plan du site