VBA - Macro de sauvegarde de fichier générant un nom sur base de données du fichier, le protégeant et laissant ouvert le fichier 'source'

Bonjour la communauté,

J’utilise un fichier qui me sert à rapporter les roulements des équipes de mon organisation.
ce fichier hebdomadaire de base (que l’on va appeler template) est alimenté avec des données importées à partir d’un planning annuel (Merci à FFO).

Comme je dois enchaîner les fichiers hebdomadaires, et donc pour faciliter mon traitement, je souhaiterais pouvoir par macro que je lierai à un seul bouton :

  • enregistrer le fichier avec une nomenclature fixe dans le répertoire du template
  • protéger toutes le feuilles du classeur, sans mot de passe
  • protéger la structure du classeur, sans mot de passe
  • supprimer, dans le classeur enregistré, le bouton ‹ import › du coin supérieur gauche de la première feuille du template (pour peu que ce soit possible)

mais aussi

  • laisser le fichier source ouvert (pour de nouveaux traitements)

Je joins un fichier dont la structure est identique au fichier de travail.

Par rapport au fichier joint, la nomenclature d’enregistrement souhaitée serait :

  • "PERM - " (chaîne de caractère fixe)
  • 2023-01-06 (date basse du fichier)
  • " - " (séparateur pour les deux dates)
  • 2023-01-12 (date haute du fichier)

Soit : PERM - 2023-01-06 - 2023-01-12.xlsm

Remarques:

  • Il s’agit toujours d’un fichier pour la semaine, donc entre date et date+6.
  • De ce que j’ai pu lire dans mes premières recherches pour exécuter l’enregistrement tout en laissant le fichier source ouvert, d’aucuns postulent qu’il serait plus judicieux de passer par un enregistrement du fichier et une réouverture du fichier source.

Je vous avoue avoir rapidement abandonné à tenter de bidouiller une macro moi-même.
J’ai déjà réussi de petites choses ou des adaptations mineures, mais le jeune autodidacte que je suis sèche.

Merci d’avance pour toute aide apportée.
Bonne journée.

Template Perm.xlsm (97,0 Ko)

Bonjour,
Je sais pas si j’ai bien compris,
Voici un extrait des codes que vous avez besoin :
Protéger toutes les feuilles sans mot de passe

Sub protection_feuille()

Dim feuille as Worksheet
For Each feuille In Worksheets
feuille.Protect("") 'verrouiller sans mot de passe
Next

End Sub

Cordialement

1 « J'aime »

Bonjour

Ci-joint ma proposition
Pour déterminer le premier onglet et le dernier onglet afin de construire le nom du fichier à enregistrer

" PERM - 2023-01-06 - 2023-01-12.xlsm"

et notamment la première date et la dernière date qui le compose le traitement dans les onglets jour du lundi au dimanche analyse dans chacun de ceux-ci la date en cellule « B3 »

Donc bien veiller à ce qu’elle soit présente dans tous ces onglets

L’enregistrement s’effectue dans le même répertoire que celui du fichier source

Une macro à cette fin est disponible fichier ci-joint elle porte le nom « Enregistrement »

Exécutes la et dis moi

Template Perm.xlsm (79,1 Ko)

1 « J'aime »

Merci Jacquinot_WILL-FREAD.
Je suis occupé à tester la macro de FFO qui reprend aussi la protection des feuilles du classeur.

1 « J'aime »

Bonjour FFO,
Merci (encore) pour ta proposition qui reprend toutes les actions à effectuer.

Néanmoins, suite à mes test, je rencontre deux ‹ bizarreries ›:

  • Ta macro fonctionne parfaitement sur le fichier test envoyé, à l’exception des semaines à cheval sur deux mois. J’ai une erreur à l’exécution à la ligne Selection.Delete : La méthode Delete de la classe Range a échoué.

  • Mais par contre, dans mon fichier de travail, où j’ai simplement recopié la macro, les différentes actions se succèdent mais lorsque le fichier Template se rouvre, son contenu est identique au fichier enregsitré, càd qu’il présente les même modifications apportées au fichier ‹ enregistré sous › : il est protégé (onglets et structure) et les boutons sont effacés.

J’ai passé mon après-midi à faire différents test mais je n’ai pu identifier la cause de ce comportement. Le fichier test est réalisé à partir de mon fichier de travail auquel j’ai supprimé les lignes inférieures. Je ne sais pas ce qui différencie les deux fichiers.

Une idée de pistes à explorer (sans que je veuille exagérer, hein :wink:) ?
Merci
HB

Bonjour

Merci pour cette réponse

A l’ouverture du fichier initial tu as ce message auquel il faut impérativement répondre « Non » :

Sinon cela peux expliquer ton erreur d’exécution

Quand est-il ?
Sinon peux tu me transmettre un fichier qui génère cette anomalie que je l’analyse
Finalement j’ai réussi à provoquer le défaut et apporter la correction adaptée dans la procédure fichier ci-aprés
testes le et dis moi :

Template Perm.xlsm (79,1 Ko)

« mais lorsque le fichier Template se rouvre, son contenu est identique au fichier enregsitré, càd qu’il présente les même modifications apportées au fichier ‹ enregistré sous › : il est protégé (onglets et structure) et les boutons sont effacés. »

Comment est ton fichier avant l’exécution du traitement ?

Celui-ci prépare le fichier ouvert tel que souhaité (protection onglets structure boutons à effacer) avant de l’enregistrer sous le nouveau nom

Donc en d’autre terme cette préparation ne peux concerner que le fichier enregistré seul lui est enregistré et non celui initial qui lui ne subit aucun enregistrement
Si à son ouverture il se trouve dans le même état c’est qu’il est déjà de base
Pas d’autre possibilité car aucun enregistrement par le traitement n’est effectué à son sujet

Donc ton fichier initial avant l’exécution de la macro doit être sans protection onglet et structure et avec son bouton « IMPORT »

Vérifies cet état corriges ce qui doit l’être pour l’avoir enregistres puis tu exécutes seulement après la macro « Enregistrement »

Fais des essais et dis moi

1 « J'aime »

Bonjour,
On avance…
Merci pour l’adaptation de la macro qui fonctionne parfaitement sur les semaines à cheval sur deux mois.

Je pense avoir par ailleurs identifié la cause du dysfonctionnement de la macro sur mon fichier de travail.

J’avais déjà vérifié hier l’état du fichier (onglets et structure sans protextion, bouton présent) mais sans succès.
Ce matin j’ai fait d’autres essais.

Reprenons:

  • Ta macro fonctionne sur les fichiers tests envoyés.
  • Ta macro ne fonctionne pas sur mes fichiers de travail.
  • A chaque fois, les onglets et structures sont non protégés et les boutons sont bien présents.
  • Je me suis donc interrogé sur ce qui différenciait les fichiers. Et notamment le fait que pour envoyer les fichiers tests j’avais supprimé les données personnelles via l’inspecteur de document/propriétés du document et informations personnelles.

Et bingo… la macro fonctionne sur mon fichier de travail si je refais la même manipulation de suppression des informations personnelles.

Sais-tu pourquoi cette suppression des données personnelles pose problème ? Je me demande si ce n’est pas une question de chemin d’accès absolu au classeur et/ou les propriétés du serveur de document.

Bref, si une solution existe, je prends volontiers. Sinon, je verrai dans quelle mesure cela pourrait me poser problème.

La bonne journée.
HB

Bonjour

Merci pour cette réponse détaillée
Concernant ton travail
Si ceci est vérifié donc correspond au fichier à son ouverture :

" * A chaque fois, les onglets et structures sont non protégés et les boutons sont bien présents."

Sachant que le traitement ne réalise qu’un enregistrement celui du fichier traité avec le nom « Perm-date début-date fin.xlsm » en laissant donc intact celui qui à servi à le confectionner si celui-ci à sa réouverture n’est plus exactement le même c’est un élément extérieur qui en est la cause pas son exécution

« Et notamment le fait que pour envoyer les fichiers tests j’avais supprimé les données personnelles via l’inspecteur de document/propriétés du document et informations personnelles. »

Je ne connais pas cette fonctionnalité et donc pourrais difficilement t’apporter des éléments la concernant

Tu pourrais faire un essai sur un de tes fichiers de travail qui engendre ce phénomène mais de ton PC personnel chez toi peut être l’environnement informatique est à incriminer

A voir

Je ne peux hélas t’en dire plus il faudrait que je sois confronter à la situation pour l’analyser et tenter de la résoudre ce qui n’est pas le cas

A ta disposition pour d’autres interrogations si je peux

Merci pour ton retour,

J’ai encore procédé à quelques vérifications. Le problème se situe bien au niveau de l’environnement informatique.

La macro s’exécute correctement en local quelque soit le paramètre de confidentialité (suppression ou non des données personnelles). Sous drive Office365, elle ne fonctionne correctement que si l’enregistrement des données personnelles est désactivé.

Ton deuxième fichier fait donc le taf. Beau boulot et merci. Je passe en solutionné.
Bonne journée.
HB

Merci
J espère que tu trouveras la bonne façon de l utiliser dans ce contexte
Je reste à ta disposition en cas de besoin
Au plaisir

Bonjour,
Je repasse ici avec des infos complémentaires quant au comportement erratique du code sous drive O365.

J’ai terminé mon fichier et il est prêt à entrer en production. Pendant que je le finalisais, j’ai constaté que le mauvais fonctionnement du fichier n’était pas lié aux paramètres de confidentialité comme évoqué. Il s’agit en fait d’une conséquence de cet état, conséquence qui est … l’enregistrement automatique.

  • En local, pas d’enregistrement automatique : le code fonctionne, le fichier ne se corrompt pas.
  • Sous O365, paramètres de confidentialité activés (et donc pas d’enregistrement automatique) : le code fonctionne, le fichier ne se corrompt pas.
  • Sous O365, paramètres de confidentialité désactivés (et donc enregistrement automatique activé) : le fichier perdait les boutons. En fait, un enregistrement du template intervenait avant que le fichier de sortie ne soit enregistré et avant que le template ne soit de nouveau ouvert.

J’ai donc un peu joué avec les autosaveon False/True pour éluder le problème et les messages perturbants pour les utilisateurs.

Je peux donc utiliser le fichier et faire tourner la macro sans aucun problème.
Merci encore

Bonjour
Merci pour tout ce compte rendu
Ravi que tu puisses fonctionner dans ton environnement avec cette macro
N hesites pas pour tout besoin
Au plaisir de te lire

2 « J'aime »

Ce sujet a été automatiquement fermé après 30 jours. Aucune réponse n’est permise dorénavant.