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 :

Accès au projet VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 109
    Points : 58
    Points
    58
    Par défaut Accès au projet VBA
    Bonjour à tous,
    Je possède un fichier avec plusieurs Userform. Lors de l'ouverture du fichier, je lance le code suivant sur Workbook.Open :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.VBProject.VBComponents("UserForm2").Activate
    Sans ce petit bout de code mon fichier plante lors de l'ouverture du UserForm (ne me demandez pas pourquoi ça fait plus d'un an que je cherche ...).
    Depuis j'ai rajouté du code et j'ai mis en place un mot de passe sur le projet VBA.

    Problème : Avec le mot de passe, ce bout de code refuse de se lancer ... Il marque :
    Erreur d'exécution '50289':
    Impossible d'effectuer cette opération tant que le projet est protégé.
    J'ai testé le code de Frédéric SIGONNEAU pour retiré le mot de passe du projet. Cela fonctionne sauf en le réactivant, car le code reste visible pour l'utilisateur.
    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
    37
    38
    39
    40
    41
    42
    Sub UnprotectVBProject(WB As Workbook, ByVal Password As String)
     
      Dim vbProj As Object
      Set vbProj = WB.VBProject
      Password = "mdp"
     
      If vbProj.Protection <> 1 Then Exit Sub
     
      Set Application.VBE.ActiveVBProject = vbProj
     
      SendKeys Password & "~~"
      Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
     
    End Sub
     
    Sub ProtectVBProject(WB As Workbook, ByVal Password As String)
     
      Dim vbProj As Object
      Set vbProj = WB.VBProject
      Password = "mdp"
     
      If vbProj.Protection = 1 Then Exit Sub
     
      Set Application.VBE.ActiveVBProject = vbProj
     
      SendKeys "+{TAB}{RIGHT}%V{+}{TAB}" & Password & "{TAB}" & _
    Password & "~"
     
      Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
      WB.Save
     
    End Sub
     
    Sub Protect()
      ProtectVBProject ThisWorkbook, "VBAProject"
      DoEvents
    End Sub
     
    Sub Unprotect()
      UnprotectVBProject ThisWorkbook, "VBAProject"
      DoEvents
    End Sub
    Ce que je souhaiterais faire c'est désactiver le mot de passe, lancer mon code et réactiver le mot de passe sans qu'après l'utilisateur n'est accès au projet VBA.

    Des idées ? Merci par avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    bonjour, as-tu essayé:

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 109
    Points : 58
    Points
    58
    Par défaut
    Oui cela viens après dans mon code et le formulaire se lance bien si le bout de code ci-dessus est exécuter.
    Sinon mon formulaire monte sans qu'aucune textbox ne soit renseigné et affiche qu'Excel à rencontré un problème et dois fermer blablabla voulez vous récupérez les données et ainsi de suite.

    Petit up.
    Comment protéger le code contre la lecture en cours d'exécution (faisable grâce au code ci-dessus) tout en l’empêchant d'être lu directement.
    Sinon la croix est cochée, et le mot de passe est enregistré (jusque là ce que je souhaitais).
    Je ne veux simplement pas que le code puisse être lu ou modifié en cours.

  4. #4
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    Bonjour,

    Un mot de passe n'arrêtera jamais quelqu'un qui veut vraiment lire le code.

    Il suffit de passer en bruit de force pour déprotéger ton code.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Points : 1 219
    Points
    1 219
    Par défaut
    Bonjour,

    Nikodemus Je possède un fichier avec plusieurs Userform. Lors de l'ouverture du fichier, je lance le code suivant sur Workbook.Open :
    ThisWorkbook.VBProject.VBComponents("UserForm2").Activate
    A tout hasard, essayez
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_Open()
    Load UserForm2
    End Sub

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 109
    Points : 58
    Points
    58
    Par défaut
    Les utilisateurs ne s'y connaissent pas assez pour allez volontairement cracker le mot de passe du projet, mais si le code reste à dispo j'en connais certains qui en profiteraient.

    Concernant le
    malheureusement ça ne suffit pas. Je dois apparemment obligatoirement lancer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.VBProject.VBComponents("UserForm2").Activate
    En gros avec mon projet actuel, sans protection ça fonctionne, et avec protection ça ne marche plus car la ligne si dessus doit s'exécuter sans protection.

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Points : 1 219
    Points
    1 219
    Par défaut
    Toujours avec "à tout hasard" essayez
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_Open()
    VBA.UserForms.Add("UserForm2").Show
    End Sub

  8. #8
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 109
    Points : 58
    Points
    58
    Par défaut
    Merci PMO2017,
    Je n'ai pas pu tester entièrement car après ton code, je n'arrive plus à décharger le formulaire avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Unload UserForm2
    'ou
    Unload VBA.UserForms.Add("UserForm2")
    Et avec le code suivant il m'affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    VBA.UserForms.Add("UserForm2").Hide
    Erreur d'exécution '402':
    Vous devez d'abord fermer ou masquer la feuille modale de premier plan.
    Une idée ?

    Edit:
    J'ai réussi avec :
    Mais mon fichier plante toujours.

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Points : 1 219
    Points
    1 219
    Par défaut
    C'est bizarre ce qui vous arrive.
    Je n'ai pas vraiment d'idée de diagnostic et j'y vais au pifomètre.
    En plein brouillard, essayez
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Workbook_Open()
    VBA.UserForms.Add("UserForm2").Show vbModeless
    Unload VBA.UserForms(0)
    End Sub
    Si cela solutionne votre problème, j'en serais le premier surpris.
    Je ne vois pas du tout la raison de faire
    Je possède un fichier avec plusieurs Userform. Lors de l'ouverture du fichier, je lance le code suivant sur Workbook.Open :

    ThisWorkbook.VBProject.VBComponents("UserForm2").Activate

  10. #10
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 109
    Points : 58
    Points
    58
    Par défaut
    Tout d'abord merci de prendre du temps afin de m'aider.
    Malheureusement ton code ne marche pas non plus.

    J'avais trouver cette ligne ici :
    http://www.developpez.net/forums/d10...oire-utilisee/.
    J'avais un soucis similaire qui à été corrigé grâce à ce code même si je ne comprend pas trop pourquoi.

Discussions similaires

  1. Approuver Accès au projet VBA dans auto_open
    Par hartarus dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/05/2015, 08h32
  2. Accès au projet vba non fiable
    Par bastien dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/06/2013, 23h34
  3. Approuver Accès au projet VBA dans auto_open
    Par infobulle dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 11/10/2012, 22h01
  4. Approuver Accès au projet VBA dans auto_open
    Par samtous dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 25/12/2011, 12h28
  5. [XL-2007] Userform non-modal & Accès au modèle objet du projet VBA
    Par JackIsJack dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 08/06/2010, 10h23

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