XL 2010 auto destruction d'un fichier a une date précise pour un fichier .xltm

sebbbbb

XLDnaute Impliqué
Bonjour

je souhaiterai qu'un code d'auto destruction d'un fichier se lance à l'ouverture pour un fichier a une date bien précise (pour éviter que le fichier soit utilisé à l'extérieur de l'entreprise par ancien stagiaire ou ancien collègues).

j'ai bien trouvé le code ci-dessous :

1600610349626.png




mais lors de l'enregistrement j'ai toujours un message d'erreur qui s'affiche à l'ouverture (voir ci-dessous)

1600610112781.png


merci a vous par avance

seb
 

Pièces jointes

  • 1600610193700.png
    1600610193700.png
    235.4 KB · Affichages: 41

soan

XLDnaute Barbatruc
Inactif
J'ai vu le post #1 ; nouvelle version :
VB:
Option Explicit

Private Sub AutoDestroy()
  Application.DisplayAlerts = False
  'ici, ce que tu veux faire : par exemple simplement fermer le fichier ;
  'ou pire : par exemple autodestruction du fichier Excel .xlsm.
  ThisWorkbook.Close savechanges:=False
  Application.DisplayAlerts = True
End Sub

Private Sub Workbook_Open()
  Dim DateExpiration As Date: Application.ScreenUpdating = False
 
  DateExpiration = DateSerial(2020, 9, 20) 'expiration au 20 Septembre 2020
  If Date >= DateExpiration Then AutoDestroy
 
  'suite du code habituel de la sub Workbook_Open(), s'il y en a un,
  'car c'est pas obligatoire : c'est selon ce que tu veux faire !
 
  'inutile de mettre Application.ScreenUpdating = True car
  'c'est fait automatiquement juste avant sortie de la sub
End Sub
soan
 

sebbbbb

XLDnaute Impliqué
Merci Soan

le Hic c'est que j'ai un userform avant le fermeture du fichier qui contrarie le script

tu me diras j'ai qu'à l'enlever mais c'est pas aussi simple ; y a t il un moyen de zpper également ce script seulement au cas ou la date fatidique est passée ?

ci-dessous mon message . evidemment si l'utilisateur clique sur non celà ouvre le fichier normaleme,nt

1600625172188.png
 

soan

XLDnaute Barbatruc
Inactif
Pour la 2ème ligne de ton UserForm, il manque un mot ; ça doit être :

« SVP, MERCI DE CONFIRMER QUE VOUS AVEZ : »

-------------------------------------------------------------------------------------------------

Tu as écrit : « j'ai un UserForm avant la fermeture du fichier »

Or comme ce UserForm n'est pas lancé dès l'ouverture du fichier, il y a bien un moment,
avant la fermeture du classeur, où tu demandes l'affichage de ce UF ; par exemple :


UserForm1.Show

Aussi, tu peux ajouter une condition au lancement, la condition inverse
de celle qui lance la sub AutoDestroy() :


If Date < DateExpiration Then UserForm1.Show

Ainsi, le UF sera affiché seulement si la Date d'Expiration n'est pas atteinte ;
mais d'un autre côté, si la Date d'Expiration est atteinte ou dépassée, ça
ne devrait même pas arriver au stade de UserForm1.Show puisque dans
ce cas, la sub AutoDestroy() est appelée, qui ferme le fichier sans aucun
avertissement, et sans sauvegarde des changements.


soan
 

soan

XLDnaute Barbatruc
Inactif
ben dans ce cas, même traitement : If Date < DateExpiration Then MsgBox "..."

... et même remarque à propos du stade d'exécution : ça ne devrait même pas
arriver jusqu'ici vu que la sub AutoDestroy() se déclenche, et ferme le fichier
(cela dans le cas où la Date d'Expiration est atteinte ou dépassée).


soan
 

patricktoulon

XLDnaute Barbatruc
bonsoir
si je ne me trompe pas on parle d'un xltm(fichier modele) et a la base on ne peut les modifier sauf si ouvert en mode modifiable
il faut donc quand tu es sur la copie xlsm l'ouvrir modifiable et là tu peux faire ce que tu veux
dessus
'l'argument "Modifiable" (Editable) doit être à vrai pour ouvrir l'original
Set Classeurxltm = Workbooks.Open(Chemin & fichierxltm, , , , , , , , , True)
 

ToF62

XLDnaute Nouveau
Bonjour,

Par sécurité moi je rajouterai que si tu ouvre ton programme avec ton username alors pas besoin de supprimer ton fichier.


VB:
Private Sub Workbook_Open()
If environ(USERNAME) = "ton username" Then
Else
Application.ScreenUpdating = False
DateExpiration = DateSerial(2022, 1, 1)
If DateExpiration <= Date Then
Dim NomComplet As String
NomComplet = Application.ActiveWorkbook.FullName
ActiveWorkbook.Saved = True
Application.ActiveWorkbook.ChangeFileAccess xlReadOnly
Kill NomComplet
Application.ActiveWorkbook.Close False
Else
End If
Application.ScreenUpdating = True
End If
End Sub


ToF
 

fanch55

XLDnaute Barbatruc
Bonsoir à tous,
Bizarre, c'est une demande récurrente !!:rolleyes:
 

Victor21

XLDnaute Barbatruc
Bonsoir, fanch55
Bonsoir à tous,
Bizarre, c'est une demande récurrente !!:rolleyes:
S l'on devait ignorer les demandes récurrentes, il n'y aurait -presque- plus de XLD.
:)
 

Discussions similaires

Réponses
5
Affichages
422
Compte Supprimé 979
C

Statistiques des forums

Discussions
312 305
Messages
2 087 077
Membres
103 455
dernier inscrit
saramachado