Problème avec la protection du VBProjet [Résolu]

zuli3n

XLDnaute Occasionnel
Bonsoir le Forum,

Afin de protéger les codes VBA de mon classeur, je verrouille le projet pour l'affichage et je mets un mot de passe, via "Outils -> Propriétés du VBAProjet..."

Ceci fonctionne très bien cependant j'ai un souci. Dans mon projet j'utilise à un moment:

Code:
With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
x = .CountOfLines + 1
.InsertLines x, laMacro
End With

Et j'ai un message d'erreur quand j'arrive sur cette partie: "Impossible d'effectuer cette opération tant que le projet est protégé". J'ai testé en faisant: Unprotect "password" mais ça ne fonctionne pas.

Peut-on déprotéger un VBProject en cour pour passer la partie qui pose problème, puis la remettre après ? Sans passer par SendKeys, car effectivement j'ai pu trouver sur le net des vieux exemples qui passent par des SendKeys ...

Cordialement.
 
Dernière édition:

zuli3n

XLDnaute Occasionnel
Re : Problème avec la protection du VBProjet

Bonjour le Forum,

Bon après pas mal de recherche sur le net, je me rends comptes qu'il y a que des solutions par SendKeys.
Je me pose donc la question suivante, peut-on utiliser une autre méthode que:
Code:
With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
x = .CountOfLines + 1
.InsertLines x, laMacro
End With
Pour pouvoir insérer des lignes dans une feuille ??

Merci,
Cordialement.
 
G

Guest

Guest
Re : Problème avec la protection du VBProjet

Bonjour,

On ne peut que difficilement répondre à une question si vague.
Pour pouvoir insérer des lignes dans une feuille ??

Les lignes de codes données ne sont pas faites pour insérer des lignes dans une feuille.
On ne connais rien au projet.
On ne sait pas ce que tu veux faire.

A+
 

zuli3n

XLDnaute Occasionnel
Re : Problème avec la protection du VBProjet

Bonjour Hasco,

En effet, voici le code et un fichier exemple:

Code:
Sub AjoutCommandButton_Feuille()
    Dim Ws As Worksheet
    Dim Obj As OLEObject
    Dim laMacro As String
    Dim x As Integer
    
   
   Set Ws = ActiveWorkbook.Sheets.Add(after:=Worksheets(Worksheets.Count))
            ActiveWindow.DisplayGridlines = False
            
        
    'Ajout CommandButton dans la feuille
    Set Obj = Ws.OLEObjects.Add("Forms.CommandButton.1")
    With Obj
        .Left = 369 'position horizontale
        .Top = 10 'position verticale
        .Width = 108 'largeur
        .Height = 21 'hauteur
        .Object.Caption = "Exporter vers JPG"
        .Object.Font.Italic = True
        .Object.Font.Size = 8
        .Object.Font.Name = "Verdana"
    End With
    
    'Paramètres pour la création de la macro:
    '(suppression contenu cellules)
    laMacro = "Private Sub CommandButton1_Click()" & vbCrLf
    laMacro = laMacro & "ExportToJpgOnglet" & vbCrLf
    laMacro = laMacro & "End Sub"
    
    With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
        x = .CountOfLines + 1
        .InsertLines x, laMacro
    End With
    
    ActiveSheet.Name = "test"
    
End Sub

C'est la partie ActiveWorkbook.VBProject.VBComponents qui m’empêche de protéger le classeur.

Cordialement.
 

Pièces jointes

  • test.xls
    31 KB · Affichages: 49
  • test.xls
    31 KB · Affichages: 56
  • test.xls
    31 KB · Affichages: 54

zuli3n

XLDnaute Occasionnel
Re : Problème avec la protection du VBProjet

Re,

J'avoue, je me suis trompé de fichier :)
Celui que j'ai envoyé c'est celui qui me sert pour tester la protection :)
J'envoie le bon, désolé. (d'ailleurs sur le bon, il n'y a pas de protection car sinon le fichier ne fonctionne pas)

++
Cordialement.
 

Pièces jointes

  • Test.xlsm
    16.3 KB · Affichages: 50
  • Test.xlsm
    16.3 KB · Affichages: 58
  • Test.xlsm
    16.3 KB · Affichages: 52
G

Guest

Guest
Re : Problème avec la protection du VBProjet

Re,

N'ayant pas tout les tenants et aboutissant du truc. J'ai employé une autre méthode.

1 - création d'un fichier contenant la feuille test avec le bouton et la macro dans le code de la feuille. (h_zuli3n_FeuilleBouton.xlsm)

2 - ouvre le ficher h_zuli3n.xlsm dont le vbproject est protégé par mot de passe ("toto")
cliques sur te bouton et la feuille test de h_zuli3n_FeuilleBouton.xlsm sera importée avec son code sans avoir à déprotéger le projet.

Bien-sûr si le classeur lui-même est protégé, il devra être déprotéger avant importation.

A+
[Edition 11:39] rechargement du ficher h_zuli3n.xlsm (méthode plus courte et efficace d'importation de la feuille)
 
Dernière modification par un modérateur:

zuli3n

XLDnaute Occasionnel
Re : Problème avec la protection du VBProjet

Re Hasco,

Je crois que le fichier joint h_zuli3n.xlsm n'a pas de méthode plus courte et efficace d'importation de la feuille.
Ça vient de moi ?

Mais à première vu si je comrpends bien, ta méthode va importer une feuille d'un autre classeur (dans ton exemple) avec le bouton et sa macro pour éviter de passer par ce qui me cause souci -> ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule

++
Cordialement.
 
Dernière édition:

zuli3n

XLDnaute Occasionnel
Re : Problème avec la protection du VBProjet

Re Hasco,

Y'a pas de mal :)
Merci, j'avoue cette méthode me plait beaucoup, j'y avais pas pensé et c'est plus simple :)

Par contre je vais plutôt me faire un onglet "référence" pour faire l'importation plutôt que via un fichier, faut que je me trouve la syntaxe :)

Merci Hasco

++
Cordialement.
 

PMO2

XLDnaute Accro
Re : Problème avec la protection du VBProjet

Bonjour,

L'idée est d'avoir une feuille cachée contenue dans le classeur qui sert de modèle.
Le code évènementiel y est déjà inclus ainsi que la mise en page. Il suffit donc, par programme, de copier cette feuille et il n'est pas nécessaire de déprotéger le VBE. L'exemple est dans la pièce jointe et le code d'accès au VBE est 123456

Il vous faudra adapter le code évènementiel de la feuille cachée à votre usage.

Cordialement.
 

zuli3n

XLDnaute Occasionnel
Re : Problème avec la protection du VBProjet

Re,

Merci PMO2 pour ta proposition, je vais étudier ton code, je pense que je vais l'intégrer à mon fichier car c'est ce que je voulais mettre en place.
Merci à vous deux car j'avoue je m'étais compliqué la tâche avec ma méthode initial.

++
Cordialement.
 

Discussions similaires

Statistiques des forums

Discussions
314 645
Messages
2 111 536
Membres
111 184
dernier inscrit
amiko