IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Protection vba excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Analyse système
    Inscrit en
    Avril 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2018
    Messages : 16
    Par défaut Protection vba excel
    Bonjour

    Je viens de terminer un travail qui m a pris des jours, des feuilles excel, des userform, et des codes vb.

    Maintenant je souhaite protéger le tout, en fait je souhaite que ce fichier ne fonctionne que sur un seul ordinateur, je veux surtout éviter que ça soit copié ailleurs.

    Je sais qu' aucune méthode de protection n'est fiable à 100 % mais je veux que vous me suggérez la méthode la moins facile à contourner et qui permet de restriendre l'utilisation à un ou des ordinateurs bien définis.

    Merci

  2. #2
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut,

    Afin de limiter l'utilisation à quelques utilisateurs prédéfinis, tu peux gérer la propriété

    D'autre part, afin de rendre obligatoire l'utilisation d'un fichier "officiel" déposé sur une ressource elle aussi obligatoire,
    Tu peux gérer le nom complet (répertoire compris) du fichier. Et ce même si l'utilisateur utilise un serveur connecté par une lettre (Z
    Peut-être date-t-il quelque peu.
    Au demeurant, l'ami Gayot m'avait adressé un code qui shunte cette connexion et que tu peux comparer avec un nom complet.
    J'utilise cette protection pour la plupart des applicatifs que je développe pour mon entité.
    Si cela t'intéresse, je te le reporterai avec plaisir.

    Ces 2 types de protection seront gérés à l'ouverture du classeur, soit par l'évènement Open.

    A plus tard.

    J'oubliais. Bienvenue sur le Forum.

  3. #3
    Membre averti
    Homme Profil pro
    Analyse système
    Inscrit en
    Avril 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2018
    Messages : 16
    Par défaut
    Bonjour MarcelG

    Merci pour votre réponse rapide et précisie;
    Oui je suis intéréssé par le code dont vous parlez, je souhaite le tester si vous permettez

  4. #4
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut,

    Dans un module standard

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Private Declare Function WNetGetConnection Lib "mpr.dll" Alias "WNetGetConnectionA" _
     (ByVal lpszLocalName As String, ByVal lpszRemoteName As String, cbRemoteName As Long) As Long
     
    Public Function fnctGetUNCPath(ByVal PathName As String) As String
     
    'fonction donnée par GAYOT sur forum, discussion ouverte par MG
    'http://www.developpez.net/forums/d1025923/logiciels/microsoft-office/excel/macros-vba-excel/recherche-repertoire-libelle-integral/
     
    'comment récupérer le chemin intégral du fichier si connection lecteur réseau
    'tuto :
    'http://access.developpez.com/sources/?page=reseau#GetUNC
     
    Const MAX_UNC_LENGTH  As Integer = 512
    Dim strUNCPath As String
    Dim strTempUNCName As String
    Dim lngReturnErrorCode  As Long
     
      strTempUNCName = String(MAX_UNC_LENGTH, 0)
      lngReturnErrorCode = WNetGetConnection(Left(PathName, 2), strTempUNCName, _
        MAX_UNC_LENGTH)
     
      If lngReturnErrorCode = 0 Then
         strTempUNCName = Trim(Left(strTempUNCName, InStr(strTempUNCName, vbNullChar) - 1))
         strUNCPath = strTempUNCName & Mid(PathName, 3)
      End If
     
    fnctGetUNCPath = strUNCPath
    End Function
    Cette fonction retourne le chemin complet (hors raccourci serveur Z:....)

    Dans le même module (de préférence)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Public Function fichier_valide() As Boolean
     
    Dim maréf_true As String
    Dim maréf_théo As String
     
    'Chemin complet de l'applicatif utilisé
    maréf_true = IIf(Len(fnctGetUNCPath(ThisWorkbook.Fullname)) = 0, ThisWorkbook.Fullname, fnctGetUNCPath(ThisWorkbook.Fullname))
    Debug.Print maréf_true
     
    'Chemin "Officiel" tel que souhaité par le développeur
    maréf_théo = "lechemincomplet" & Application.PathSeparator& & ThisWorkbook.Name
     
    fichier_valide = (UCase(maréf_true) = UCase(maréf_théo))
     
    End Function
    A toute fin utile, voici la fonction qui retourne l'autorisation par un ou plusieurs collaborateur précis.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Function Is_Autorisé() As Boolean
     
    Dim s As String
    s = "la propriété Application Username de tous les collaborateurs séparés par un blanc"
     
    Is_Autorisé = (InStr(s, Application.UserName) > 0)
     
    End Function
    Et dans le code affecté au classeur
    (à adapter selon les contraintes que tu veux voir exercées)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Option Explicit
     
    Private Sub Workbook_Open()
     
    If fichier_valide = False Or Is_Autorisé = False Then
            MsgBox _
                    Prompt:="Ouverture de l'applicatif défectueuse", _
                    Buttons:=vbCritical, _
                    title:="Usage non valide"
            ThisWorkbook.Close Savechanges:=False
    End If
     
    End Sub

  5. #5
    Membre averti
    Homme Profil pro
    Analyse système
    Inscrit en
    Avril 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2018
    Messages : 16
    Par défaut
    merci beaucoup

    je vais tester

  6. #6
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Dans la fonction Is_Autorisé, la séparation entre les différents UserName reste à gérer (espace, titet du 6, tiret du 8...)
    Ceci afin de ne pas risquer de concaténer le nom du précédent collaborateur avec le prénom du suivant.

    Je m'explique.

    Si les UserName de ton entité sont sous format Nom [espace] Prénom (exemple Marcel Pierre et Jacques Legendre)
    Si Marcel Pierre et Jacques Legendre sont les collaborateurs autorisés, mieux vaut écrire
    s = "Marcel Pierre / Jacques Legendre"
    Ceci afin d'éviter que le collaborateur Pierre Jacques ait accès à l'applicatif.

    Je le reconnais, ce cas est plutôt rare, et ce même si des prénoms peuvent être des noms.
    Pour ma part, je n'ai jamais rencontré de nom "Marcel" (Il faut être fou )

  7. #7
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    Bonjour,

    Quelle que soit la méthode d'authentification utilisée, il peut être utile d'empêcher les utilisateurs de contourner les mesures de sécurité que vous mettez en place par ouverture du fichier avec désactivation des macros.

    Pour cela, il est possible de créer un onglet d'accueil, qui sera le seul visible tant que les macros n'ont pas été activées. Ceci est réalisable en intégrant au module ThisWorkbook un code du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Option Explicit
     
    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
        Dim Sht As Variant
        Application.ScreenUpdating = False
        For Each Sht In ThisWorkbook.Sheets
            Sht.Visible = xlSheetVeryHidden
        Next Sht
        ThisWorkbook.Sheets("Accueil").Visible = xlSheetVisible
        Feuil1.Visible = xlSheetVisible
    End Sub
     
    Private Sub Workbook_AfterSave(ByVal Success As Boolean)
        For Each Sht In ThisWorkbook.Sheets
            Sht.Visible = xlSheetVisible
        Next Sht
        ThisWorkbook.Sheets("Accueil").Visible = xlSheetHidden
        Application.ScreenUpdating = True
    End Sub
     
    Private Sub Workbook_Open()
        Dim Sht As Variant
        If Is_Autorisé Then
            Application.ScreenUpdating = False
            For Each Sht In ThisWorkbook.Sheets
                Sht.Visible = xlSheetVisible
            Next Sht
            ThisWorkbook.Sheets("Accueil").Visible = xlSheetHidden
            Application.ScreenUpdating = True
        Else
            MsgBox "Ouverture de l'applicatif défectueuse", vbCritical, "Usage non valide"
        End If
    End Sub
    L'onglet nommé "Accueil" sera alors le seul visible lorsqu'un utilisateur non autorisé ouvrira le fichier, ou que n'importe quel utilisateur ouvrira le fichier sans activer les macros.
    Il est utile d'y intégrer un petit texte invitant l'utilisateur à activer les macros (ou à fermer le fichier s'il n'est pas autorisé à y accéder).

    Ce code suppose l'existence d'une fonction d'authentification nommée "Is_Autorisé", qui retourne un booléen.
    Il est possible d'utiliser le nom d'utilisateur comme proposé par MarcelG. C'est suffisamment efficace si le fichier est utilisé uniquement dans un cadre professionnel, sur des PC masterisés qui empêchent les utilisateurs d'ouvrir une session sous un nom quelconque.
    Si les utilisateurs sont susceptibles d'ouvrir le fichier sur des PC persos, sur lesquels il est très facile d'ouvrir une session avec n'importe quel nom d'utilisateur, cette méthode d'authentification devient inefficace.
    D'autres méthodes sont alors envisageables, comme l'utilisation de l'adresse MAC d'une des cartes réseau des PC autorisés.

    Pensez également à protéger le code VBA par un mot de passe.

    Pour rappel, et comme vous le mentionnez dans votre premier post, toutes ces précautions ne suffiront pas à vous prémunir contre des personnes tout à la fois compétentes et mal intentionnées.

    Cdt

  8. #8
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Autant déclarer correctement ses variables (Ici Worksheet plutôt que Variant)

    As-tu testé ton code?

    Au moment de la sauvegarde, le code risque de planter.

    D'autre part, pour pouvoir ouvrir une session de travail sur un autre poste que celui professionnel, il faut être, selon moi, assez féru en informatique.
    A moins que l'IT de la société ait mal agi en termes de protection.

    Complément à 14 H 08.

    Pour ma part, tous les applicatifs activent à leur ouverture, leur sauvegarde et leur fermeture une seule feuille visible ("Accueil", "Saisie"...) dans laquelle sont intégrés plusieurs boutons de commande dont celui nommé "Btn_Quitter".
    L'activation de ce dernier est obligatoire pour fermer l'applicatif.
    Dès lors, 2 possibilités
    - Soit les procédures VBA ne sont pas activées et alors aucune action n'est possible
    - Soit elles le sont, et alors les contraintes d'utilisation le sont également.
    Bien entendu, cela va de soi, comme tu le soulignes, le code VBA est protégé

    Au demeurant, là où je te rejoins, c'est sur le risque 0. Mais bon... Après cela,.... ce doit être 1 * (10 puissance -15)

  9. #9
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,
    Citation Envoyé par saber 3615 Voir le message
    ... je veux surtout éviter que ça soit copié ailleurs
    Ça c'est impossible.
    Je ne m'éterniserais pas sur la facilité de contourner les protections Excel et VBA
    L'autorisation d'accès doit avant tout être une question de confiance et de responsabilité.

    On peut facilement limiter l'accès à un PC grâce au mot de passe de session.
    Contrairement à tout ce qui se fait avec VBA, on peut protéger efficacement un fichier avec un mot de passe pour la lecture (sans utiliser le VBA).

  10. #10
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    Bonjour,

    Effectivement, j'ai posté ce bout de code sans le tester... Merci pour la remarque !
    Ci-dessous une correction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    Option Explicit
     
    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
        Dim Sht As Variant
        ThisWorkbook.Sheets("Accueil").Visible = xlSheetVisible
        ThisWorkbook.Sheets("Accueil").Activate
        DoEvents
        Application.ScreenUpdating = False
        For Each Sht In ThisWorkbook.Sheets
            If Sht.Name <> "Accueil" Then Sht.Visible = xlSheetVeryHidden
        Next Sht
        Feuil1.Visible = xlSheetVisible
    End Sub
     
    Private Sub Workbook_AfterSave(ByVal Success As Boolean)
        Dim Sht As Variant
        For Each Sht In ThisWorkbook.Sheets
            Sht.Visible = xlSheetVisible
        Next Sht
        ThisWorkbook.Sheets("Accueil").Visible = xlSheetHidden
        Application.ScreenUpdating = True
    End Sub
     
    Private Sub Workbook_Open()
        Dim Sht As Variant
        If False Then
            Application.ScreenUpdating = False
            For Each Sht In ThisWorkbook.Sheets
                Sht.Visible = xlSheetVisible
            Next Sht
            ThisWorkbook.Sheets("Accueil").Visible = xlSheetHidden
            Application.ScreenUpdating = True
        Else
            MsgBox "Ouverture de l'applicatif défectueuse", vbCritical, "Usage non valide"
        End If
    End Sub
    Concernant la définition de la variable Sht, je préfères personnellement conserver un Variant.
    La différence en termes de vitesse d'exécution ou de consommation de mémoire est négligeable, et cela évite les erreurs d'inattention.
    Par exemple, avec le code posté ci-dessus, une définition de Sht en WorkSheet conduit à une erreur si le classeur contient une feuille de graphique.

    Quant au risque d'ouverture du fichier sur un poste non professionnel, je n'ai trouvé aucun élément dans les posts de Saber qui indique clairement que son besoin est d'ordre professionnel (c'est probable, mais ça n'est pas dit).

    Cdt

  11. #11
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut,

    Pas de problème. Nous sommes ici dans un espace d'échanges où la courtoisie côtoie la technicité.

    Pour ton code, je te suggère

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                With sht
                    .Visible = IIf(.Name = "Accueil", xlSheetVisible, xlSheetVeryHidden)
                 End With
    Concernant la définition de la variable Sht, je préfères personnellement conserver un Variant.
    C'est un point de controverse.
    Bien déclarer ses variables facilite la rigueur donc la gestion du code.
    Par exemple, la saisie semi-automatique du code en est simplifiée.
    Personnellement, je connais très peu de cas où la déclaration d'une variable en Variant est obligatoire (Array...)

    Par exemple, avec le code posté ci-dessus, une définition de Sht en WorkSheet conduit à une erreur si le classeur contient une feuille de graphique.
    Ce cas particulier peut être géré, en sachant que
    Sheets est la collection des feuilles de travail du classeur + graphiques
    WorkSheets est la collection des feuilles de travail uniquement
    Il suffit alors de balayer l'une ou l'autre avec les propriétés Sheets.Count ou Worksheets.Count

    Quant au risque d'ouverture du fichier sur un poste non professionnel, je n'ai trouvé aucun élément dans les posts de Saber qui indique clairement que son besoin est d'ordre professionnel (c'est probable, mais ça n'est pas dit).
    En effet, tu as raison. Pour ma part, il est fort probable qu'il s'agit du domaine professionnel.
    C'est mon cas d'où ma réponse.

    A bientôt.

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Je complète en plussoyant Patrice => Protéger un classeur Excel est utopique. Le Net regorge d'applications qui font sauter les mots de passe, il n'est même pas toujours nécessaire d'avoir une carte de crédit valide...

    Rien de ce que tu a pu écrire en VBA ne l'a pas déjà été Si tu veux mieux protéger ton appli en or, ce n'est pas en VBA que tu dois développer, et les vraies protections coûtent bonbons et servent rarement à ce qu'un seul utilisateur puisse utiliser ton travail.

    Sur le plan légal, si tu es sous contrat d'emploi, ta production appartient plus à ton employeur qu'à toi... Renseigne-toi donc bien sur ce que tu peux faire ou pas...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  13. #13
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut à tous,

    Pierre, je ne sais pas si c'est à mon intention que tu adresses ton post.

    Au cas où...

    Pour ma part, je pensais que le contexte était professionnel.
    Bien sûr, le risque 0 n'existe pas. Toute société, si importante soit-elle, est susceptible de se voir attaquée dans ses systèmes d'information.

    Je me suis peut-être projeté trop vite.

    Mon activité consiste à développer des applicatifs pour l'entité à laquelle j'appartiens.

    Ce que j'ai reporté en VBA est inclus dans chacun de mes applicatifs.
    En effet, à mes débuts, en juillet 2009, il m'est arrivé de constater que mes applicatifs étaient copiés malencontreusement par des collaborateurs dans "Mes Documents"

    C'est dans ce contexte que je me suis placé - trop vite? - pour répondre à notre ami.

  14. #14
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    Citation Envoyé par MarcelG Voir le message
    Personnellement, je connais très peu de cas où la déclaration d'une variable en Variant est obligatoire (Array...)
    C'est en effet assez rare. Pour ce qui est des cas où un Variant est toujours obligatoire, je n'en ai pas d'autre en tête que les Array.
    Mais cela peut également être nécessaire pour une Collection, un Dictionary, brefs, tous les conteneurs susceptibles d'abriter des objets qui ne sont pas tous de même type.

    Quant à l'utilité d'un code VBA d'authentification, elle repose (à mon sens) avant tout sur le fait de "forcer" l'utilisateur à activer les macros. Protéger une application avec du VBA est illusoire. La bonne foi des utilisateurs est un pré-requis.

    Les protections liées au système d'exploitation ne sont, à ma connaissance, pas parfaites non plus. Un passage sous Linux et les protections Windows ne sont bien souvent plus qu'un lointain souvenir. Mais cela fait longtemps que je ne me suis plus intéressé à ce genre de sujet et les choses ont peut-être changées depuis.

    Bonne fin de journée à toutes et à tous

  15. #15
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut Ben,

    Un passage sous Linux et les protections Windows ne sont bien souvent plus qu'un lointain souvenir.
    Tu as sans doute raison.
    Il s'agit, je pense, de savoir quel type de population est concerné.

    Or, la mienne est composée de gestionnaires pour lesquels, et c'est bien normal, prononcer "Excel" revient à parler hébreu à un labrador.
    Je le répète "c'est bien normal". Il en est autant pour moi dès qu'ils évoquent leur gestion.

    Maintenant, je ne voudrais pas polluer cette discussion. Je vais arrêter là et attendre un retour de notre ami.

  16. #16
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut Ben

    Dans le code que tu donnes ci-dessous, il y a un problème au niveau du If False Then... car False ne renverra jamais True et donc tu auras toujours le message d'erreur critique...


    Citation Envoyé par Ben_L Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Option Explicit
    '...
    '...
    Private Sub Workbook_Open()
        Dim Sht As Variant
        If False Then
            Application.ScreenUpdating = False
            For Each Sht In ThisWorkbook.Sheets
                Sht.Visible = xlSheetVisible
            Next Sht
            ThisWorkbook.Sheets("Accueil").Visible = xlSheetHidden
            Application.ScreenUpdating = True
        Else
            MsgBox "Ouverture de l'applicatif défectueuse", vbCritical, "Usage non valide"
        End If
    End Sub
    Salut Marcel,

    Je ne visais pas ton post en particulier. D'une façon générale, comme cela a été maintes fois démontré, il n'y a pas de protection efficace d'un classeur Excel contre l'emploi abusif, et certainement pas en mettant les données dans le code, puisqu'il suffit de craquer le code pour pouvoir lire les protections, chemins réservés et autres, et les modifier ou faire sauter les lignes. Là où c'est nettement plus compliqué, c'est en cas d'obfuscation, parce que le code (pas les données qui s'y trouvent) est rendu illisible, mais un chemin ou un nom d'utilisateur est toujours lisible.



    Franchement, est-ce que les classeurs Excel créés sont "en eux-mêmes" une telle mine d'or que l'on va se les faire piquer? Et si les données sont à ce point importantes et ou secrètes, elles n'ont rien à faire dans Excel...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  17. #17
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Dans le code que tu donnes ci-dessous, il y a un problème au niveau du If False Then... car False ne renverra jamais True et donc tu auras toujours le message d'erreur critique...
    Salut Pierre,

    J'ai honte...
    Il s'agit bien évidemment du reste d'un des tests que j'ai effectués. Pour obtenir un code fonctionnel, il faut remplacer ce False par une fonction d'authentification renvoyant un booléen.

    Je raconte bien trop de bêtises aujourd'hui, l'heure est venue pour moi d'aller me coucher !
    Bonne nuit à tous

  18. #18
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par Ben_L Voir le message
    [...]
    J'ai honte...
    Il s'agit bien évidemment du reste d'un des tests que j'ai effectués[...]
    Ca arrive aux meilleurs, donc fallait bien que ça t'arrive

    Perso, dans ces cas-là, avant le dodo, c'est la triple Karmeliet, ou la Chimay bleue...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  19. #19
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut Pierre,

    Pour finir sur une note humoristique avant la pastacciuta

    Merci pour cete précision

    Au fait, c'est quoi

    la triple Karmeliet, ou la Chimay bleue
    Moi, je connais le Prosecco, le Soave, le Barolo, ...

    Des potions magiques du nord, sans doute.

    Salut à toi, Bonne soirée à tous.

  20. #20
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Des potions magiques du nord du nord, car belges


    Nom : Triple.jpg
Affichages : 141
Taille : 6,4 Ko

    Nom : Chimay.jpg
Affichages : 136
Taille : 5,1 Ko

    Santé à toutes et tous
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

Discussions similaires

  1. [VBA-Excel] - protection plage de cellule sur i feuilles
    Par Chewi dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 01/02/2007, 16h52
  2. [VBA-E] protection feuille excel
    Par MAGUIN dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 08/01/2007, 02h18
  3. [VBA-Excel] protection d'onglet
    Par marsupilami34 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/11/2006, 17h48
  4. [VBA EXCEL] Protection feuille avec filtre auto
    Par mirumoto dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/01/2006, 10h48
  5. [VBA Excel] BackgroundQuery et protection de la feuille
    Par Worldofdada dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/01/2006, 17h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo