[Excel 2007]Fichier corrompu suite à ajout d'un onglet
Bonjour à tous,
Après des heures de recherche je me tourne vers vous car je ne sais plus comment faire pour réparer mon fichier.
Voici le contexte:
- Il s'agit d'un fichier Excel où chaque onglet est un formulaire d'inscription
Pour faciliter la vie des utilisateurs, un onglet modèle existe (il est doté de mise en forme conditionnelle et de listes de valeurs)
Pour créer un nouveau formulaire, il y a une macro qui recopie l'onglet modèle et ajoute le nouveau formulaire en tête de classeur
En fin d'année de nombreux rapports sont à produire: ce classeur est donc truffé de macros VBA... :S
Toutes les macro sont rassemblées dans un onglet de type "Tableau de bord" et activables sous forme de boutons
Ce classeur est utilisé depuis le début de l'année sans trop de soucis.
Il dépasse à présent les 13 méga. Il y a plus d'une centaine de formulaires (donc autant d'onglets).
A chaque utilisation du fichier, une sauvegarde est faite automatiquement (ouf !)
- Le 28 Novembre, le fichier a été utilisé, et sauvegardé.
Lorsque je repars de cette sauvegarde:
En ajoutant un nouveau formulaire par le biais de la macro, tout se passe bien, je sauvegarde, je ferme.
Je rouvre le fichier: j'ajoute un nouveau formulaire, je sauvegarde, je ferme.
Et ensuite: impossible de le rouvrir: fichier corrompu, et réparation Excel impossible.
J'ai bien sûr essayer de supprimer un onglet, puis 10: le comportement reste le même.
En supprimant la quasi totalité des onglets, le problème ne se produit pas. Pourtant on ne peut pas imaginer que le problème soit dû à l'un des onglets, sinon il ne serait produit au préalable.
Vous comprendrez que ce n'est pas la récupération des données qui m'intéresse: grâce à ma sauvegarde, j'ai ces données.
Cela ne m'intéresse pas non plus de tout supprimer (je saurai repartir du fichier de début d'année si besoin de toute façon) puisque c'est précisément en fin d'année que je produis des rapports.
Je cherche donc à réparer et à trouver la cause de cette corruption.
J'ai cru au début que ce serait facile car je sais "reproduire" la corruption et le plantage.
A noter: l'ajout d'un onglet vide (par le biais d'une insertion de feuille Excel) ne déclenche pas le problème.
Ca semble être un problème de capacité d'Excel mais je tourne en rond...
Merci d'avance
Toutes les macro sont rassemblées dans un onglet de type "Tableau de bord" et activables sous forme de boutons
Je ne comprends pas ce que tu veux dire, aucune macro VBA ne saurait se trouver sur une feuille !
Si je comprends bien, tu as un formulaire qui te sert à la saisie et à l'affichage des fiches.
J'ignore le volume de données que représente une fiche, mais j'aurais pour ma part procédé de la façon suivante : une feuille Base de données pour stocker les informations saisies, affichage de fiche à la demande, éventuellement saisie/modification sur Userform si cela permet une gestion plus fiable et plus rapide.
Contenu du classeur (pour la partie évoquée dans ton sujet : 2 feuilles, taille probablement de l'ordre de 500ko, fluidité d'utilisation assurée...
Cordialement.
Bonjour et merci de ta réponse,
Au sujet des macros: je voulais dire qu'elles sont en effet réparties dans des modules distincts, mais elles sont appelées via des "boutons" qui sont rassemblés sur un même onglet.
Ce sont des boutons de type "Ajout d'une fiche vierge" / "Classement des onglets par ordre alphabétique" / "Planning par mois" / "Rapport annuel" / etc...
Je ne suis pas particulièrement calé en Excel donc j'ai du mal à saisir ton conseil
Par rapport à mon fichier, j'ai besoin (en tout cas je l'ai construit ainsi) d'avoir tous les formulaires dans le même fichier.
Sur un même formulaire, il n'y a pas plus de 15 infos "variables" : noms / prénoms des parents / adresses / des dates / ...
Donc chaque fiche n'est pas spécialement lourde.
Je devrais peut-être revoir la conception pour les années qui viennent mais mon souci aujourd'hui est de résoudre le problème qui se pose à moi pour saisir les fiches jusqu'à la fin de l'année, date cruciale à laquelle je dois fournir tous les rapports: c'est ce à quoi me sert notamment ce dossier.
Comme je le disais: créer des onglets vides ne pose pas de problème, mais ajouter un nouveau formulaire empêche la ré-ouverture du fichier.
Merci à tous
Bonjour,
Faire une copie du classeur dans un nouveau classeur :
A partir de ton classeur à problème en faisant un clic droit sur la fiche modèle faire une copie de ce formulaire modèle dans le nouveau classeur.
de la même manière faire une copie de la feuille pleine de boutons.
de la même manière faire une copie d'un formulaire réel en dénaturant à peine les données modifier juste (nom adresse tel...)
de la même manière faire une copie des autres feuilles qu'il peut y avoir (page d'accueil, page de paramètres...)
Dans VBA faire glisser tous les modules macros vers le nouveau classeur.
S'il y a des macros dans les privates modules de feuilles ou dans Thisworkbook ne pas les oublier...
Joindre cette copie dans ta réponse.
A+
Bonjour,
Ce que je dis est fort simple !
Je doute que tu aies plusieurs centaines de macro... donc un (un seul !) module Standard suffit amplement, inutile de multiplier les modules.
A moins d'avoir un don particulier d'ubiquité
Tu as besoin d'une autre feuille pour y conserver les données de toutes les fiches et pouvoir les matérialiser à la demande.
Si je comptes bien, cela fait 2 feuilles ! Les autres ne font qu'alourdir et finir par bloquer l'utilisation du classeur.
Si l'on ajoute quelques feuilles nécessitées par tes rapports, on ne devrait pas excéder 5...
Si en repartant d'une sauvegarde, le problème qui rend ton classeur inutilisable se reproduit, je doute que tu puisses avoir une solution qui te permette de poursuivre dans les mêmes conditions, sans revoir complètement la conception...
Cordialement.
Rebonjour,
@MFerrand: je comprends mieux ce que tu dis et en effet ce sera la bonne idée de façon à ce qu'il n'y ait aucune mise en forme des données.
@Galopin: est-ce que ta demande consiste finalement à joindre une copie de mon fichier à problèmes dans ma prochaine réponse avec l'intégralité des onglets, à l'exception des formulaires déjà remplis (j'aurai du mal à tous les anonymiser car il y en a plus d'une centaine).
Peut-être est-ce mieux dans un message privé si cela est possible ? Mais le fichier fait un peu plus de 13 Mo actuellement.
Merci
bonjour,
Normalement une fois débarrassé de toutes les fiches inutiles, il ne devrait pas peser plus de 100 ko
200 s'il y a vraiment beaucoup de VBA...
En cas de problèmes si c'est encore trop volumineux, passe par cjoint et donne nous le lien.
A+
Bonjour à tous,
@Galopin: j'espère ne rien avoir oublié par rapport à tes demandes.
A priori les appels de macro ne fonctionnent plus du tout dans ce fichier appauvri.
Pour précision sur le modop: dans l'ongler Tableau de bord je clique sur "Création d'un formulaire vierge", l'onglet ZZ_MODELE est alors recopié vers un nouveau formulaire qui doit être rempli par l'utilisateur.
C'est après cette opération (après donc plus de 100 fiches créées) que le problème se pose.
Merci de votre aide.
Je n'ai pas du tout d'idée...
Même avec 120/130 fiches supplémentaires ce classeur ne devrait pas dépasser 1Mo...
On peut penser que tout le reste c'est des scories de ton travail de l'année.
En particulier si tu as supprimé beaucoup de lignes ou de feuilles.
Un peu de mal à évaluer tes macros à cause de ta méthode : c'est un vrai jeu de piste mais à priori, ce n'est pas VBA le problème en soit...
Juste une constatation que je considère comme une anomalie (bien que je n'ai pas testé) : il y a quelque part une suppression de lignes un peu curieuse... Je peux me tromper mais ça m'a paru zarbi.
Pour commencer, moi je ferais comme ça :
Tu devrais essayer une macro qui déplace une copie de toutes tes feuilles sur un nouveau classeur.
Normalement je ne conseille jamais de faire cela par duplication de feuille plutôt par Collage spécial Valeur puis Format mais tes formulaire ont l'air de bonne qualité. Donc tu peux essayer : c'est le plus expéditif.
Une seule réserve : si le transfert de tous les formulaires dépasse 1 Mo, c'est que tu as une ou plusieurs feuilles polluées : il faudra recommencer mais par copier/Coller de la plage A27:I27
Commence par supprimer tous les boutons (par macro) ça sera plus rapide de les copier/Coller ensuite sur chaque feuille plutôt que de chercher à rétablir les liens avec les macros
Ensuite tu fais glisser le VBA... Tu auras un petit boulot pour recréer tous les boutons mais c'est pas la cata !
Avant de commencer attend voir ce que dit Ferrand
[EDIT] Si tu enregistres ton fichier en .xlsb : ça dit quoi ? (en terme de poids et de fonctionnement)
[EDIT2] Ce que je dis ne considère que le problème. Sur le fond, au niveau de la conception bien sur c'est le raisonnement de Ferrand qui s'applique ! Et puis tes variables globales avec des noms à rallonge... Pfff ! C'est du Franquin
A+
Bonjour, Salut Galopin !
Je te laisse piloter cette opération... ! [Je t'ai déjà vu oeuvrer sur ce type de choses...
Mateo, si Galopin subodore qu'il puisse y avoir quelque chose susceptible de provoquer une anomalie, il sera toujours utile de tenter de la circonscrire et cette opération ne peut faire que du bien...
Galopin, je n'ai vu au passage qu'une suppression de lignes dont je ne suis pas sûr que ce soit celle dont tu parlais (mais j'ai parcouru vite).
Mon propos était émis dans un sens général plaidant la reconstruction du fichier... Je partage toujours ce point de vue
Cordialement.
Merci pour vos très précieux conseils.
Je ne suis pas du tout un pro et j'ai développé cet outil pour rendre service à un ami.
Le tout s'est compliqué avec le temps et je vous avoue que moi-même, avant de me remettre dans le code, il me faut un bon moment pour m'y retrouver. J'ai manqué de méthode au début et je le paie à présent.
La bonne idée est celle de Ferrand cela est certain. Pour les macros il faudra que je progresse... plus tard.
J'ai enregistré le fichier en xlsb, puis l'ai réouvert / ai ajouté une fiche / ai refermé.
A l'ouverture même message de contenu illisible.
Je vais tenter la recopie de tous les formulaires: ça me semble tout de même la meilleure idée car à la fin de l'année, seule la compilation de tous les formulaires dans un rapport annuel a de l'importance.
En dehors de toutes ces méthodes, que je vais tenter une à une
Merci
mateo06 a écrit :y-a-t-il un intérêt à ce que je tente via des outils de réparation ? (je n'en ai trouvé aucun de convaincant de toute façon).
Merci
Je ne pense pas...
Poids du xlsb ?
A+
Bonsoir à tous,
(Je n'ai pas encore commencé ma recopie)
Le xlsb pèse aussi 13 Mo...
bonjour,
tu dis que tu as une copie par jour... Ces copies augmentent-elles de volume régulièrement ou au contraire seule celle du 28 novembre augmente brutalement ?
Je t'envoie un email pour que tu puisses me mettre le fameux fichier corrompu en pièce jointe.
Joindre aussi une autre copie non corrompue de début novembre.
Vu la taille il est probable que le fichier ne passera pas en pièce jointe : Si tu as un site mets le en FTP et donne moi l'adresse sinon utilise cjoint et donne moi l'adresse également
Si tu utilises cjoint mets le en dispo 4 jours seulement. (inutile d'encombrer le site inutilement.
A+
Bonjour Galopin,
Merci pour ton aide: je vais répondre depuis l'email que tu m'as transmis en t'envoyant autre chose: le fichier vide d'où l'utilisateur est parti en début d'année.
Car je pense que le problème date de ce moment.
En fait je livre un fichier "vide" à chaque début d'année, et celui de début 2016 était déjà énorme. De même celui que j'avais préparé pour début 2017.
Je pense que si tu as une idée expliquant sa taille, ça pourrait tout résoudre simultanément.
Merci encore
Rebonjour,
Un peu plus de billes et une demande de conseils:
Je repars d'un fichier vide et je copie déjà tous les formulaires: je procède en sélectionnant tous les onglets puis clic droit et "Déplacer-Copier" => Je copie vers le fichier cible: est-ce pertinent ?
J'ai tenté cela en une fois: la totalité des formulaires est recopiée, pour un fichier qui fait 3,2 Mo... versus 13 M pour un fichier qui contient finalement la même chose + les macros.
J'en déduis que c'est la bonne solution pour finir l'année mais me reste à comprendre comment, de jour en jour, j'ai pollué mon fichier...
Bonjour,
Pour l'instant je n'ai encore rien en mail... sauf un message d'erreur en réception : Comme cela ne m'arrive jamais, je suppose que c'est toi qui provoque cette erreur; Mon Outlook est très susceptible sur la taille des fichiers joints;
passe par cjoint ou par un ftp si tu as un site.
Ce sont très souvent les suppressions qui sont la cause de ces disfonctionnements : Excel garde toujours dans un coin de sa mémoire une trace de ce que tu as supprimé. A chaque fois que tu dupliques une feuille tu dupliques également la trace invisible des suppressions qui y ont été effectuées.
Conseil : C'est le moment ou jamais de mettre en application la solution BD +Formulaire.
En même temps ça fera un lifting sérieux à ton VBA...
A+
Bonjour,
Je viens de faire une nouvelle tentative en passant par cjoint et je t'ai envoyé le lien par mail.
Il va falloir ne effet que je me penche assez vite sur une autre solution, notamment celle de la BD mais je suis pas mal autodidacte sur le sujet.
Avez-vous des "mots clés" sur le sujet BD pour que je sache dans quelle direction aller ?
Merci à tous
Bonjour à tous,
Petit update ici:
La corruption semble venir de la taille trop élevée du fichier.
En bossant avec Galopin, j'ai compris que mon erreur était que je fabrique le fichier "vide" de début d'année en supprimant tous les onglets de la fin d'année précédente.
En faisant ainsi, certes la taille du fichier diminue, mais d'année en année Excel semble conserver des scories des années précédentes, et le fichier, même quasiment vide, pèse plusieurs Méga.
Je repars donc d'un classeur quasiment vierge et je recopie tous les formulaires, par macro, vers ce nouveau fichier.
Je ne sais pas encore si cela va débloquer les utilisateurs (un peu la course en ce moment !!!) mais je suis confiant.
En tout cas un grand merci au forum car je n'étais pas très optimiste !!!