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

Résolu
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. 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. Contributeur
      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. 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
    1. 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
      1. Contributeur
        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
        1. Je ne métrise pas en effet (je suis un bricoleur perso...)
          je ne trouve pasWorbook_BeforeClose
          comment faire??
          merci
          0
          1. Contributeur
            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
        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. Contributeur
            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
        3. Bon je pense ne pas être à la hauteur.. je ne peux ouvrir le classeur..
          0
          1. Contributeur
            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
        4. Contributeur
          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. Contributeur
            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