Première ouverture du fichier par mot de passe

Bonjour

Je veux mettre un mot de passe pour la première utilisation du fichier...je m'explique:

Une fois j'envoi le fichier à un collègue je doit lui saisir le MDP pour l'ouvrir et après il l’utilisera à sa guise (l'ouvrir, le fermer et le sauvegarder normalement) ceci empêchera qu'il l'envoi à d'autres personnes pour l'utiliser sans mon accord.

Je crois qu'il faut le lier au nom de la machine (PC) ou au nom de l'utilisateur

Merci beaucoup

Bonjour,

pour cette exemple j'ai utilisé le Gestionnaire de nom

insérer le nom "no" dans le classeur ayant comme valeur 0

à tester,

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Names("no").RefersTo = 1 Then ThisWorkbook.Close SaveChanges:=False
End Sub

Private Sub Workbook_Open()
If Environ$("computername") = "xx" And Application.UserName = "xx" Then  '  < modifier les données "xx" correspondant à votre PC
    Names("no").RefersTo = 0
Else
    Names("no").RefersTo = 1
End If
If Names("no").RefersTo = 1 Then ThisWorkbook.Close
End Sub

Bonjour Isabelle,

Super idée !!

Il faut bien sûr que l'accès soit sur une page d'accueil pour que si les macros ne sont pas activées l'utilisateur ne puisse quand même accéder aux données !

Si tu le permets, je vais rebondir dessus et donner un code d'accès de sorte que le nom de la machine ne suffise pas pour entrer dans l'application. Ce code de 4 à 6 chiffres basé sur username est issu d'un calcul de type algorithme de Luhn.

Michel

Bonjour,

Bonjour Isabelle, Steelson,

Pas utilisateur avéré avec ces procédures évènementielles et un peu fainéant en ce jour pluvieux, ceci ne fonctionnerait il pas ?

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If Range("_no").Value = 1 Then Cancel = True
End Sub

Cdlt.

Wahou, en effet Jean-Eric, pourquoi faire compliqué quand on peut faire simple ! mais en complément y a t'il une procédure de contrôle à l'ouverture ? sinon une fois le fichier ouvert on change la valeur de _no par le gestionnaire de nom ?

Bonjour à tous,

reste le soucis qu'on peut ouvrir un classeur sans lancer les macros...

eric

Re,,

Dans la même optique !?

Range("_no").Value = 1
[_No].Value = 0

Cdlt.

Je vous donne la solution sur laquelle je travaille depuis 90mn ! juste testée, mais il faudrait plusieurs utilisateurs.

Le code Luhn de vérification :

Function isLuhnAlphaNValid(chaine As String, code As String) As Boolean
    iteration = Len(code)
    chaine = chaine & code
    NewChaine = ""
    For n = 1 To Len(chaine) - iteration
        CodeAsc = Asc(Mid(chaine, n, 1))
        If CodeAsc < 100 Then
            NewChaine = NewChaine & "0" & Asc(Mid(chaine, n, 1))
        Else
            NewChaine = NewChaine & Asc(Mid(chaine, n, 1))
        End If
    Next
    isLuhnAlphaNValid = True
    For m = 1 To iteration
        isLuhnAlphaNValid = isLuhnAlphaNValid And isLuhnValidTemp(NewChaine & (Mid(chaine, n, m)))
    Next
End Function

Function isLuhnValidTemp(chaine) As Boolean
    For n = Len(chaine) To 1 Step -1
        i = CInt(Mid(chaine, n, 1)): If b Then i = i * 2
        If i > 9 Then t = t + (i Mod 10) + 1 Else t = t + i
        If b Then b = False Else b = True
    Next
    If t Mod 10 = 0 Then isLuhnValidTemp = True
End Function

A l'ouverture du fichier :

Private Sub Workbook_Open()
Dim codealpha As String

    ' creation nom si inexistant
    flag = False
    For Each nm In ThisWorkbook.Names
        If nm.Name = "luhn" Then flag = True: Exit For
    Next
    If Not flag Then ThisWorkbook.Names.Add Name:="luhn", RefersTo:="=""|"""

controleacces:
    tbl = Split(Replace(Names("luhn").RefersTo, """", ""), "|")
    If UBound(tbl) = 1 Then GoTo codeacces
    For i = 1 To UBound(tbl) - 1
        codealpha = tbl(i)
        If isLuhnAlphaNValid(Environ("username"), codealpha) Then GoTo acces
    Next

codeacces:
    Do
        code = Application.InputBox("Votre code d'accès ?", Type:=1, Title:="Saisir de 4 à 6 chiffres")
    Loop While (Len(code) < 4 Or Len(code) > 6) And code <> False
    If code = False Then MsgBox "Opération annulée !": ThisWorkbook.Close
    codealpha = code
    If Not isLuhnAlphaNValid(Environ("username"), codealpha) Then MsgBox "Code erroné !": ThisWorkbook.Close
    Names("luhn").RefersTo = "=""" & Replace(Replace(Names("luhn").RefersTo, """", ""), "=", "") & codealpha & "|"""

acces:
    For Each Ws In ThisWorkbook.Worksheets
        If Ws.Name <> "Accueil" Then Ws.Visible = True
    Next Ws
End Sub

cette procédure permet d'accumuler les codes propres à plusieurs "premiers" utilisateurs de sorte que si le fichier est sur le réseau il puisse être lus par plusieurs sans que chacun n'ait à retaper son code.

A la fermeture :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Ws As Worksheet
    Sheets("Accueil").Visible = True
    For Each Ws In ThisWorkbook.Worksheets
        If Ws.Name <> "Accueil" Then Ws.Visible = xlSheetVeryHidden
    Next Ws
    ActiveWorkbook.Close savechanges:=True
End Sub

afin que si les macros ne sont pas activées on ne puisse pas accéder aux onglets.

Il faudra aussi protéger la macro elle-même.


Enfin un outil d'administration pour déterminer le code d'accès

Merci beaucoup pour votre effort.

Je vais tester ça demain au boulot

Si tu peux le mettre sur un serveur en réseau et tester à 2 ou 3 cela m'intéresserait !

Je vais faire de même de mon côté.

ps pour Isabelle : je n'avais jamais pensé en effet me servir d'un nom pour stocker une valeur ! idée géniale.

Bonjour,

@Steelson,

Un premier retour.

Dans le fichier contrôle…, le code acces est modifié avec l'appui F9 (retour sur 4 ou 6 caractères).

Pour le fichier calcul…, impossible de l'ouvrir, code erroné (6342, 63426, ou encore |6342|, etc...)

Ai je loupé un truc ?

Cdlt.

Dans le fichier contrôle…, le code acces est modifié avec l'appui F9 (retour sur 4 ou 6 caractères).

en effet, car je cherche un code à géométrie variable : entre 4 et 6 chiffres (ce n'était pas vraiment essentiel)

Pour le fichier calcul…, impossible de l'ouvrir, code erroné (6342, 63426, ou encore |6342|, etc...)

est-ce bien celui qui est face à ton username (qui doit s'ajouter à la liste sur activation des macros) ?

En tous cas, merci pour ce retour ...

J'ai essayé de mon côté à déporter le fichier sur un serveur, l'accès reste ouvert à mon username. J'ai essayé aussi avec un autre utilisateur, c'est ok.

Bonjour,

@Steelson,

A l'ouverture du fichier, Luhn=|63426|.

A l'invite, je saisis 63426 et j'ai un retour "code erroné".

Ai-je loupé quelque chose ?

Cdlt.

Je suis inquiet ...

Quel est ton username dans excel ?

Je suis curieux de comprendre pourquoi le nom luhn ne s'écrit pas des guillemets comme ici :

capture d ecran 219

Attention, ce n'est pas parce qu'on introduit une valeur qu'elle permet de déverrouiller, il faut que cette valeur soit cohérente avec le username (comme un code de vérif de la carte bancaire).

J'ai compris ... tu es trop malin ! et puis cela aurait été trop facile d'aller y chercher le code d'accès !!

Non ce code 63426 correspond à mon username ... et donc après vérification de la cohérence il me permet d'accéder sans retaper ce code.

Dans ton cas il faut que tu y mettes ton propre code. Pour cela il faudrait demander à l'administrateur ... mais comme j'ai aussi donné le fichier d'admin, il suffit d'y aller et trouver ton code !

On pourrait corser l'affaire en contrôlant la validité par rapport au username mais aussi le computername comme l'avait fait Isabelle. Car sinon, toutes les personnes ayant le même username pourraient y accéder. Dans les grandes entreprises, ce username est souvent imposé et constitué du matricule du salarié, ce qui suffit.

Re,

Je me suis trompé de ligne dans le fichier admin. C'est ballot !...

Okay pour moi.

Cdlt.

Bonjour Isabelle,

Super idée !!

Il faut bien sûr que l'accès soit sur une page d'accueil pour que si les macros ne sont pas activées l'utilisateur ne puisse quand même accéder aux données !

Si tu le permets, je vais rebondir dessus et donner un code d'accès de sorte que le nom de la machine ne suffise pas pour entrer dans l'application. Ce code de 4 à 6 chiffres basé sur username est issu d'un calcul de type algorithme de Luhn.

Michel

Salut Michel,

Merci pour ces bon mots, et je t'en pris, fait nous plaisir et merci pour l'exemple transmit

Merci beaucoup pour votre effort.

Je vais tester ça demain au boulot

Merci d'avance pour ton feed-back. Dis moi si cela correspond à ton besoin, sinon n'hésite pas à me faire tes commentaires.

Re

J'ai testé les 2 fichiers ...ça marche dans ma machine...(même s'il y a le mdp qui change en appuyant sur f9, ça pose pas de problème pour moi je peux faire avec) .

j'ai transféré le premier fichier à un collègue...la je ne sais plus quoi faire pour qu'il l'ouvre

Comment doit on procéder ? je dois envoyer les envoi les 2 fichiers ? sioui c pas ça l'objectif de ma demande.

Merci encore une fois de votre aide

j'ai transféré le premier fichier à un collègue...la je ne sais plus quoi faire pour qu'il l'ouvre

Comment doit on procéder ? je dois envoyer les envoi les 2 fichiers ?

N'envoie surtout pas les 2 fichiers ! tu dois garder la main sur le fichier qui détermine le code d'accès

En effet, il peut y avoir plusieurs codes ! en réalité un à 4 chiffres, un à 5 et un à 6 chiffres, tous donnant le droit d'accès.

C'est à toi de déterminer le code; pour cela demande lui son username

Il peut s'aider de ce fichier ... dans ce cas qu'il te renvoie la valeur de A1 (surtout pas le fichier qui prendrait ton username).

12username.xlsm (10.70 Ko)
Rechercher des sujets similaires à "premiere ouverture fichier mot passe"