Découper fichier Excel avec plusieurs feuilles en plusieurs fichiers
Bonjour à tous,
En comprenant très vaguement le langage VBA, j'arrive très souvent à trouver des adaptations grâce à vos contributions sur ce site internet, un grand merci ! :) Aujourd'hui je vous contacte car je ne trouve pas la solution parfaite. Mon objectif : découper un fichier Excel contenant plusieurs feuilles en plusieurs fichiers Excel par entité.
Pour vous que vous puissiez m'aider, je vous ai mis un exemple assez "simple" avec 5 onglets : Intro / Synthèse / Données / Données supp. / Conclusion.
La logique est la suivante, il faudrait que:
- La feuille "Intro" & "Conclusion" soient présentes dans chaque fichier et ne subissent aucune modification (c'est uniquement du blabla)
- La feuille "synthèse" est.. une synthèse de la feuille "Données" --> il faudrait uniquement conserver les lignes où chaque entité concernée est présente
- La feuille "Données" et "Données supp." suivent la même logique
Dans un monde idéal, le nom de chaque fichier devrait être : "Exemple - entité A.xlsx" / "Exemple - entité B.xlsx" / "Exemple - entité C.xlsx" / et enregistré sur mon bureau.
Est-ce que ça vous parait facile ou c'est un projet fastidieux ?
Merci d'avance & bon week-end
Salut,
Je te propose une solution assez ''tiré par les cheveux'' mais qui fonctionne bien. Les nouveaux fichiers créés le sont au même endroit que où se trouve ce fichier de base. Afin d'enregistrer sous d'autres noms ou à un autre emplacement que le fichier de base, il faudra adapter la macro. Si tu as beaucoup de feuilles différentes, ça risque d'être compliqué. Ici, j'ai dû traiter chacune des 3 feuilles variables individuellement.
Cordiales salutations.
Avec quelques améliorations.
Salut Yvouille,
Ton VBA fonctionne au top avec l'exemple !
Je suis à deux doigts de réussir à l'adapter à mon fichier Excel "réel" qui comprend un nombre important de colonnes et de formules.
Il faudrait que la feuille "synthèse" suive la même logique que les feuilles "Données" et "Données supp.", soit conserver uniquement les lignes où chaque entité concernée est présente. En d'autres termes, il faudrait enlever la formule SUMIFS du VBA mais plutôt prendre la formule SUMIFS qui existe déjà dans la feuille.
Est-ce que c'est jouable ?
Un grand merci!
Comme le fichier est plusieurs fois ''Enregister sous'', les liaisons se perdent - ou plutôt les données sont supprimées puis remises en place - raison pour laquelle il a fallu remettre les formules en place après-coup et à plusieurs endroit. Mais ça reste les mêmes formules, non ?
Si c'est un problème d'adaptation du code à ton fichier réel, il faudrait me fournir ton fichier réel avec une explication de ton problème.
Ah oui, avec l'exemple la formule SUMIFS perdrait sa référence si j'ai bien compris.
Concernant mon fichier "réel", il a en plus des averageifs & vlookup qui se baladent un peu dans tous les sens... Je ne vais pas te demander de l'aide là-dessus car c'est long et tu m'as montré la voie pour y arriver
En revanche, peut-être qu'il existe une solution qui évite justement de perdre les références ? Cela me permettrait d'un côté de gagner du temps en tentant d'écrire le VBA et de l'autre de pouvoir réutiliser facilement cette macro pour d'autres usages
Si je savais écrire du VBA, la logique suivante serait peut-être la solution ?
- Etape 1 - Faire une copie du fichier (plutôt que des feuilles)
- Etape 2 - Dans cette copie classer la data d'entités de mes feuilles par ordre alphabétique (en faisant en sorte que le filtre s'applique de la colonne A à ZZ)
- Etape 3 - Définir Y & X comme la 1ère ligne du tableau à lire et dès que la data d'entité change : modifier la valeur de X et supprimer les lignes jusqu'en bas (pour les 3 feuilles concernées)
- Etape 4 - Enregistrer le fichier comme "Exemple - Entité A" et le fermer.
- Etape 5 - Reloop pour faire l'entité B et pour l'étape 3 ajouter une condition pour supprimer de Y à X-1 pour enlever l'entité A (et ainsi de suite pour l'entité C, D, E...)
Si ce n'est pas possible ou long, c'est pas grave je reste sur ta 1ère suggestion :)
Tes idées :
Etape 1 - Faire une copie du fichier - C'est ce que je fais, ce ne sont pas seulement des feuilles qui sont dupliquées.
Etape 5 - Reloop : comment fais-tu pour faire un reloop sur un fichier qui a été fermé ?
.
D'où ma solution :
- Enregistrer le fichier de base "Exemple_V2" sous le nom "Entité A" (le fichier "Exemple_V2" est refermé automatiquement)
- Effectuer des copies (masquées) des feuilles qui seront modifiées
- Modifier les feuilles à modifier, y compris la remise en place des formules perdues
- Enregistrer les modifications
- Effacer les feuilles modifiées et les remplacer par les feuilles complètes mises en réserve
- Enregistrer le fichier ''Entité A" sous le nom "Exemple_V2" (les dernières modifications ne sont pas enregistrées / l'ancien fichier "Exemple_V2" est remplacé par un nouveau / le fichier "Entité A" est refermé automatiquement)
- Enregistrer le fichier de base "Exemple_V2" sous le nom "Entité B" (le fichier "Exemple_V2" est refermé automatiquement)
- Effectuer des copies (masquées) des feuilles qui seront modifiées
- etc.
- etc.
- Enregistrer le fichier ''Entité Xx" sous le nom "Exemple_V2" (l'ancien fichier "Exemple_V2" est remplacé par un nouveau / le fichier "Entité Xx" est refermé automatiquement)
- Remise en place des formules perdues
Je ne sais pas le faire autrement
A ta disposition si tu as besoin d'aide pour la remise en place des formules ou pour d'autres problèmes. En fait, si les résultats obtenus par ces formules suffit, on pourrait placer directement ces résultats aux bons endroits plutôt que de placer des formules qui ne calculeront peut-être plus rien de nouveau à l'avenir.
Ok très clair ton explication !
Je souhaite conserver les formules, je vais donc partir sur ta version et bidouiller pour y arriver :)
Un grand merci pour ton temps, ça fait plaisir
Bonne fin de week-end à toi !