Limiter dans le temps l'usage d'un fichier EXCEL

Résolu
RG14 Messages postés 77 Statut Membre -  
RG14 Messages postés 77 Statut Membre -
Bonjour,
J'ai créé un fichier ayant des macros, des fonctions de calcul etc..(excel 2010)
Certaines cellules sont verrouillées (feuille protégée avec code) pour ne pas perturber malencontreusement le bon fonctionnement.
Ce fichier, je désire en limiter son usage dans le temps (selon les cas 1 semaine, ou 1 mois etc..) aux personnes à qui je le transmet.
pouvez vous m'aider sur la procédure à appliquer
cordialement
RG14

8 réponses

  1. RG14
     
    Bonjour les experts
    Désolé mais tous vos documents présentés sont refusés (échec de l'activation produit -pro?) je suis en 2010
    Votre aide est donc vaine. Le degré de protection que je recherche est très basique ..juste un arrêt d'utilisation vers des utilisateurs basique. Le fichier ne contient aucune donnée spéciale mais c'est un contenu qui intéresse des sportifs..
    merci à vous
    RG14
    3
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      Une autre manière: cacher toutes les feuilles sauf une si la date est dépassée. Même si l'on refuse l'exécution des macros, on n'aura pas accès à toutes les feuilles
      .
      Bien sur il faut protéger les macros.
      Allez dans Outils-Propriétés VBAProject-Protection et mettre le mot de passe

      Voici le code à mettre dans ThisWorkbook:


      Option Explicit
      Dim datefin As Date
      Dim k As Integer
      Dim nom As String
      Private Sub Workbook_Open()
      nom = Left(ThisWorkbook.Name, InStrRev(ThisWorkbook.Name, ".") - 1) 'nom fichier sans l'extension
      datefin = "28 / 10 / 2018" 'mettre la date de dernière utilisation
      If datefin < Date Then
      MsgBox "La date est dépassée!", vbCritical, nom
      ThisWorkbook.Close
      Else
      MsgBox "Il vous reste:  " & DateDiff("d", #10/28/2018#, Date) & " jours", vbInformation, nom   'mettre la date de dernière utilisation
      'en ouvertture on démasque par macro,si pas activé....... rien
      For k = 1 To Sheets.Count
      Sheets(k).Visible = True
      Next
      End If
      End Sub
      Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
      For k = 1 To Sheets.Count
      If Sheets(k).CodeName <> "Feuil1" Then 'adapter le nom de la feuille visible
      Sheets(k).Visible = xlSheetVeryHidden 'feuilles cachées même par clic droit
      End If
      Next
      End Sub
      


      Voilà

      @+ Le Pivert
      0
  2. RG14 Messages postés 77 Statut Membre 2
     
    Bonjour le Pivert
    J'ai exécuté toutes les directives et TOUT fonctionne comme souhaité. Le temps d'ouverture des droits est parfaitement programmable ce qui limite à un usage accordé vers des utilisateurs "petits profiteurs"
    encore MERCI de cette aide particulièrement précieuse.
    cordialement
    RG14
    1
  3. Utilisateur anonyme
     
    Bonjour,
    Peut être en mettant une petite macro cachée qui se déclencherait à une certaine date et effacerait les plages de données et de formules...
    Mais je n'ai jamais essayé cette manip' !
    Cordialement,
    Alain
    0
  4. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Bonjour,

    Il faut savoir que les classeurs Excel sont facilement crackables ( quand on a les codes c'est très facile de contrer l'interdiction). L'exemple en pièce jointe a 2 classeurs Excel:

    Une clé d'activation qui met la date de fin d'activité dans le registre et s'auto détruit
    Et le classeur proprement dit.

    Bien suivre les instructions, c'est un peu complexe pour une personne qui ne maîtrise pas le vba

    https://www.cjoint.com/c/HIrjOOIsx7Q
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. RG14 Messages postés 77 Statut Membre 2
     
    Je ne métrise pas en effet (je suis un bricoleur perso...)
    je ne trouve pasWorbook_BeforeClose
    comment faire??
    merci
    0
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      Tout est expliqué dans le classeur

      Faire Alt F11 pour accéder à l'éditeur

      Mettre le mot de passe pour accéder aux macros qui se trouvent dans ThisWorkbook

      Allez en haut à gauche et dérouler l'arborescence pour atteindre ThisWorkbook que vous sélectionnez.

      Vous verrez apparaître le code;

      Cette instruction est à faire pour les essais seulement ( évite de détruire le classeur).

      Allez dans Sub creer_vbs sur cette ligne : f.write ("Dim nomfichier: nomfichier = ""Activation.xls"" ") & vbCrLf changer le nom et renommer le classeur à ce nom ensuite après avoir fermé


      Dans le classeur a protéger allez aussi dans ThisWorkbook pour mettre la date de validation

      suivez bien les instructions

      voir ceci en image

      https://www.excel-pratique.com/fr/vba/introduction.php

      @+
      0
  7. RG14 Messages postés 77 Statut Membre 2
     
    Bon voilà où j'en suis ...voir le lien copie écran ..pas facile
    Aussi, je n'ai rien sur le fichier classeur mais OK activation
    https://www.cjoint.com/c/HIrqn23bUfO
    RG14
    0
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      Il faut que tu ouvres le classeur: Classeur_essai

      que tu ailles dans ThisWorkbook et que tu copies tout le code dans ton classeur client (ThisWorkbook) en modifiant la date de dernière utilisation simplement.

      dans le classeur: Activation,

      ce n'est pas nécessaire de le détruire, supprime cela:

      Dim oWsh
      'creer_vbs ' a activer
      Set oWsh = CreateObject("Shell.Application")
      'oWsh.ShellExecute Workbooks(ActiveWorkbook.Name).Path & "\delete_file.vbs" ' a activer
      Set oWsh = Nothing
      End Sub
      Private Sub creer_vbs()
       Dim fso, f
         Set fso = CreateObject("Scripting.FileSystemObject")
         Set f = fso.OpenTextFile(Workbooks(ActiveWorkbook.Name).Path & "\delete_file.vbs", ForWriting, True)
       f.write ("On Error Resume Next") & vbCrLf
      f.write ("Set fso = WScript.CreateObject(""Scripting.FileSystemObject"")") & vbCrLf
      f.write ("Dim path") & vbCrLf
      f.write ("path = WScript.ScriptFullName") & vbCrLf
      f.write ("GetPath = Left(path, InStrRev(path, ""\""))") & vbCrLf
      f.write ("Dim nomfichier: nomfichier = ""Activation.xls"" ") & vbCrLf ' changer le nom et renommer le classeur à ce nom ensuite après avoir fermé
      f.write ("Dim lieufichier: lieufichier = GetPath & nomfichier") & vbCrLf
      f.write ("If fso.FileExists(lieufichier) Then") & vbCrLf
      f.write ("  fso.deletefile lieufichier") & vbCrLf
      f.write ("  fso.deletefile path") & vbCrLf
      f.write ("WScript.echo "" [OK] Le fichier à été supprimé!"" ") & vbCrLf
      f.write ("Else") & vbCrLf
      f.write ("WScript.echo "" [  ] Le fichier n'existe pas!"" ") & vbCrLf
      f.write ("End If") & vbCrLf
      f.write ("Set fso = Nothing") & vbCrLf
      f.write ("WScript.Quit")
      


      cela fonctionnera quand même

      Voilà

      @+ Le Pivert
      0
  8. RG14
     
    Bon je pense ne pas être à la hauteur.. je ne peux ouvrir le classeur..
    0
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      Il faut ouvrir le classeur Activation, suivre les explications pour rendre le classeur Classeur_essai opérationnel

      Voilà je ne peux pas faire plus

      @+
      0
  9. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    sache quand même qu'on peut toujours ouvrir un fichier en refusant l'exécution des macros.
    Partant de là, toute protection sera vaine.
    Sans parler du prudent qui travaille sur une copie...
    eric
    0
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      Pour RG14, voici une version simplifiée:

      https://www.cjoint.com/c/HIsgeF7XMkQ

      Bonjour eriiic,

      ouvrir un fichier en refusant l'exécution des macros

      c'est prévu le classeur se ferme

      travaille sur une copie...

      cela n'a aucune incidence ainsi que de renommer le classeur.
      Le code qui est à l'ouverture va chercher la date qui est dans la base de registre.

      Le seul moyen est de cracker la protection vba pour avoir accès aux macros.
      Comme je le disais au départ pour un pro d'Excel c'est assez facile!

      Voilà

      @+ Le Pivert
      0