Microsoft 365 enregistrement copie du classeur ouvert avec mot de passe et incrémentation

meyscal

XLDnaute Occasionnel
Bonsoir le forum,

je trouve régulièrement les réponses à mes questions ici mais là mon besoin est si spécifique que je fais appel à vous.

Enregistrement donc d'une copie du classeur ouvert mais avec :

- code si possible sans option explicit si possible car la plus grosse partie du code est déjà écrite sans (à moins que ça ne pose pas problème)
- nom du fichier reprendra les valeurs de 2 cellules (1 nom-prénom + 1 date) séparées par " - " et précédées par "NDF - ". Exemple : NDF - valeur A1 - valeur B1.xlsm = NDF - Jean Dupont - 31-03-2023.xlsm
- protection par mot de passe pour ne pas être ouvert par n'importe qui (pas de lecture seule)
- enregistré sur le bureau (Special Folders) donc enregistrable sur n'importe quel PC toujours au même endroit)
- l'enregistrement se fait en arrière plan sans ouverture de la copie ensuite

Pour information, je vous ai dit que j'avais déjà écrit le plus gros du code donc voici ce qu'il comprend. Pour commencer, déclenchement de l'enregistrement par 1 bouton dans un userform puis :

- enregistrement d'une feuille du classeur en PDF (celle-ci est pour l'utilisateur mais pas la copie que je veux créer). Voici ce que j'ai pour la création du PDF :
Dim sNomFic As String, sRep As String, WshShell As Object
- remplissage automatique du formulaire en PDF avec les données réparties dans 4 tableaux (1 feuille par tableau) différents puis remise à 0 (effacement complet des 4 tableaux). ATTENTION : ma copie enregistrée doit être faite avant l'effacement des tableaux
- 2 ou 3 autres bricoles


Voilà, je n'ai pas encore une grande expérience mais j'ai déjà réussi à faire tout ça en récupérant des bouts de code sur ce forum et plus rarement avec l'enregistreur de macro.
J'ai essayé aussi pour ça et je trouve des réponses mais il faut déjà que ça colle avec ce que j'ai.

Je suis débrouillard et je saurai adapter , j'ai juste besoin d'un exemple par forcément qu'on fasse le job à ma place :rolleyes:

Merci à vous.
Me dire si besoin que je fasse parvenir un fichier exemple ou le code déjà écrit. C'est juste que je veux éviter de partager des données potentiellement sensibles et que j'ai déjà tellement de données que ça va être très long de tout anonymiser ...
 
Solution
Bonsoir @meyscal , le fil

@meyscal
Tu parles d'une copie au format Excel ou une copie au format PDF ?

Ce code fonctionne chez moi
(O365)
La copie est bien sur le bureau et demande un mot de passe à l'ouverture

VB:
Sub Copie_Avec_MDP()
Dim sNomFic$
sNomFic = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\" & "copyPW.xlsx"
Application.DisplayAlerts = False
Application.ScreenUpdating = False
ActiveSheet.Copy
ActiveWorkbook.SaveAs sNomFic, FileFormat:=xlOpenXMLWorkbook, Password:="St@pLe$", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
ActiveWorkbook.Close
End Sub
NB: Mais comme indiqué précédemment le mot de passe est en clair dans le code VBA.
Ce n'est donc pas sécure.

Staple1600

XLDnaute Barbatruc
Bonjour @meyscal

Me dire si besoin que je fasse parvenir un fichier exemple ou le code déjà écrit.
Pour info: on ne joint jamais le fichier original ou son appli originale

Mais on créé un classeur exemple ex nihilo avec quelques données "bidons"
C'est très simple et rapide à faire avec l'aide d'Excel et son VBA
Exemple avec ce petit code
(à tester sur un classeur vierge)
Code:
Sub Bidonnons_les_datas()
[A1:F1] = Array("Nom", "Prénom", "Adresse", "CP", "Ville", "Tel")
[A2:F2] = 1
Range("A2:E2").Formula = "=R1C&"" ""&ROW()-1"
Range("F2").Formula = "=(""0""&MOD(ROW(),4)+1&RANDBETWEEN(9999999,13070854))*1"
Range("A2:F30").FillDown
Cells(1).CurrentRegion = Cells(1).CurrentRegion.Value
Cells(1).CurrentRegion.Borders.Value = 1
End Sub
[/QUOTE]
 

meyscal

XLDnaute Occasionnel
Bonjour Staple1600

C'est exactement ce que je voulais dire par un fichier exemple et plus loin je parlais bien d' "anonymiser"
Mais comme dit je pense pouvoir m'en sortir avec un fichier exemple si qqun a la gentillesse de m'en fournir 1 ...
Je fais ce boulot en bénévolat pour une association mais avec mon petit niveau ça me prend un temps dingue

Merci à vous
 

Staple1600

XLDnaute Barbatruc
Re

Euh ??
L'usage sur le forum c'est que ce soit le demandeur qui prenne le temps de créér un fichier exemple.

Et un fichier exemple allégé avec seulement un trentaine de ligne suffit amplement.

En plus tu as déjà le code VBA comme indiqué dans ton 1er message.

Donc à tout casser, ca doit 1/2 heure de faire un fichier exemple illustratif de la problématique évoquée dans ton message#1
 

Staple1600

XLDnaute Barbatruc
Compléments
- nom du fichier reprendra les valeurs de 2 cellules (1 nom-prénom + 1 date) séparées par " - " et précédées par "NDF - ". Exemple : NDF - valeur A1 - valeur B1.xlsm = NDF - Jean Dupont - 31-03-2023.xlsm
(de nombreux exemples de code VBA dans les archives du forum)
- protection par mot de passe pour ne pas être ouvert par n'importe qui (pas de lecture seule)
(Ne sert à rien - facilement outrepassable
- enregistré sur le bureau (Special Folders) donc enregistrable sur n'importe quel PC toujours au même endroit)
(de nombreux exemples de code VBA dans les archives du forum)
- l'enregistrement se fait en arrière plan sans ouverture de la copie ensuite

Pour consulter les archives du forum, c'est ici
 

Staple1600

XLDnaute Barbatruc
Re

Pour le nom du fichier, c'est pas compliqué
En guise de mise de pied à l'étrier ;)
VB:
Sub test()
Dim Nom_Fic$
If Application.CountA(Range("A1:B1")) Then
Nom_Fic = "NDF_" & [A1].Text & " " & [B1].Text & ".xlsm"
MsgBox Nom_Fic
Else
MsgBox "Nom de fichier invalide!", vbCritical
End If
End Sub
Il suffit de reprendre cette trame avec le code d'enregistrement d'un classeur)
(que tu peux obtenir avec l'aide de l'enregistreur de macros)
 

meyscal

XLDnaute Occasionnel
Ok oui pas de problème je vais faire ça.
Juste que je vois souvent des gens venir avec 1 problématique et sans rien proposer non plus et qui obtiennent réponse quand-même.
Peut-être que c'était sur un autre forum ...

Bref pas d'énervement je posais la question en passant mais je comprends et c'est même normal ainsi que le demandeur soit acteur et non pas juste spectateur.

Je reviens vers vous bientôt avec l'exemple en PJ.
SVP ne me jugez pas sur le code que j'ai rédigé c'est vraiment de l'amateurisme ... Mais je suppose qu'on est tous passé par là !
 

meyscal

XLDnaute Occasionnel
Ok oui pas de problème je vais faire ça.
Juste que je vois souvent des gens venir avec 1 problématique et sans rien proposer non plus et qui obtiennent réponse quand-même.
Peut-être que c'était sur un autre forum ...

Bref pas d'énervement je posais la question en passant mais je comprends et c'est même normal ainsi que le demandeur soit acteur et non pas juste spectateur.

Je reviens vers vous bientôt avec l'exemple en PJ.
SVP ne me jugez pas sur le code que j'ai rédigé c'est vraiment de l'amateurisme ... Mais je suppose qu'on est tous passé par là !
PS : merci pour le début de piste. Effectivement je trouve des réponses à mes questions par ci par là mais ce que j'ai encore du mal à faire c'est combiner le tout.
 

Staple1600

XLDnaute Barbatruc
Re

@meyscal
Je ne suis pas énervé
Juste présent sur ce forum depuis plus de 15 ans.
Et je te dis juste
Que quand un demandeur prend le temps dès son 1er message de joindre un fichier exemple en général, cela amène des réponses rapides.

C'est d'ailleurs inscrit dans le marbre de la charte du forum ;)
La Charte¸ à jeun et lucidement à dit:
2.5 – La possibilité de joindre des fichiers est donnée sur ce forum. Ne pas hésiter à utiliser cette fonction, tout en veillant à ce que les données soient fictives et donc qu’aucune donnée confidentielle, nominative ne soit dans le fichier.
 

meyscal

XLDnaute Occasionnel
Re

@meyscal
Je ne suis pas énervé
Juste présent sur ce forum depuis plus de 15 ans.
Et je te dis juste
Que quand un demandeur prend le temps dès son 1er message de joindre un fichier exemple en général, cela amène des réponses rapides.

C'est d'ailleurs inscrit dans le marbre de la charte du forum ;)
Re-bonjour,

voici le fichier en question, j'ai enlevé toutes les informations nominatives, bancaires, coordonnées, etc ... et même le thème personnalisé spécialement créé ! D'où les couleurs un peu fadasses 😅

J'ai laissé sinon tous les userform, feuilles ... pour être sûr qu'il n'y ait pas de pb, juste enlevé le code Workbook-open dans ThisWorkbook car j'avais défini en application.false

Si demande de mdp j'ai mis "Bonjour" partout.

Le code en question se trouve dans l'userform9 et j'ai mis le bouton en rouge ;)

@Staple1600 : je comprends bien qu'après 15 ans tu as l'habitude de voir mieux et je ferai mieux à l'avenir, promis ! Bon j'avoue que la charte du forum j'ai dû la lire y a quelques années et difficile de s'en souvenir mais tu fais bien de la rappeler. Les règles ne sont pas là pour rien :)
 

Pièces jointes

  • Sauvegarde 3 - Note de frais.xlsm
    457.9 KB · Affichages: 2

Staple1600

XLDnaute Barbatruc
Re

Sauf erreur, cela peut suffire pour ton Export PDF
(ici ce n'est qu'un test)
Le code est lancé depuis la copie de la feuille Document
VB:
Sub Export_PDF()
Dim sNomFic As String
sNomFic = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\" & "Notes de frais.pdf"
Range("$A$1:$M$54").ExportAsFixedFormat Type:=0, Filename:=sNomFic, Quality:=xlQualityMinimum, IncludeDocProperties:=0, IgnorePrintAreas:=0, OpenAfterPublish:=0
End Sub

PS: Pourquoi la présence de ce code dans la feuille Document ?
Private Sub Worksheet_Activate()
ThisWorkbook.RefreshAll
End Sub
 

meyscal

XLDnaute Occasionnel
Merci @Staple1600 ! Pour rafraîchissement des TCD à la sélection de l'onglet.
Au départ je partais sur 1 fichier standard en xls mais je me suis dit tiens 1 petite macro pour rafraîchir automatiquement puis une autre et après tu te retrouves avec cette usine à gaz 😅

Mais les utilisateurs qui sont des personnes majoritairement défavorisés et peu habitués à l'informatique préfèrent largement le côté programme... plus intuitif !

Bref pour en revenir au sujet, ok pour le PDF je vais test ça. Bon tu l'auras compris j'ai pas 1 niveau de fou ...
 

Discussions similaires

Statistiques des forums

Discussions
315 094
Messages
2 116 154
Membres
112 670
dernier inscrit
Flow87