Mise a jour de VBproject via une macro

Multhani

XLDnaute Nouveau
Bonjour,

C'est mon premier post sur ce genre de forum, excuser moi si je n'écris pas les bonnes infos.

Mon problème, je n'arrive pas à ajouter un module dans un classeur Excel 2010 dont le VBproject est protéger par un mot de passe que j'ai mis. Je tiens a garder la protection par mot de passe pour éviter la modification du code par de tierce personnes

Je vous post le code que j'ai actuellement. J'arrive a déverrouiller le classeur mais je ne parviens pas a y insérer le module.

Les références "Microsoft Visual Basic for Applications Extensibility 5.3" et Microsoft Scripting Runtime" sont bien active.

Merci pour votre aide

Code:
Sub TestUnprotect()

UnprotectVBProject Workbooks("Base de données V0-2.xlsm"), "motpass"

Workbooks("Base de données V0-2.xlsm").Activate
ReplaceVBAModule


End Sub
 
Sub UnprotectVBProject(WB As Workbook, ByVal Password As String)
  Dim VBProj As Object
 
  Set VBProj = WB.VBProject
 
   If VBProj.Protection <> 1 Then Exit Sub
 
  Set Application.VBE.ActiveVBProject = VBProj
 
   SendKeys Password & "~~" & "{ESC}"
     
    Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
Application.Wait (Now + TimeValue("0:00:02"))
End Sub

Sub ReplaceVBAModule()

    Const ModulePath As String = "K:\Projet VM\Bêta\dernière version\essai mise à jour\MAJ.bas"
    Const ModuleName As String = "MAJ"
    Const PathToFiles As String = "K:\Projet VM\Bêta\dernière version\essai mise à jour"

    Dim lngFileCounter As Long, wbTarget As Workbook

    'Search for files that we want to replace code module in

    With Application.FileSearch
        .NewSearch
        .FileType = msoFileTypeExcelWorkbooks
        .LookIn = PathToFiles
        .Execute

        For lngFileCounter = 1 To .FoundFiles.Count
        
            Set wbTarget = Workbooks.Open(.FoundFiles(lngFileCounter))
            
            'First we need to remove the existing module
            wbTarget.VBProject.VBComponents.Remove wbTarget.VBProject.VBComponents(ModuleName)
            
            'Now we can import the new module, save the workbook and close.
            wbTarget.VBProject.VBComponents.Import ModulePath
            wbTarget.Close savechanges:=True
    
        Next lngFileCounter

    End With


End Sub
 
Dernière modification par un modérateur:

sousou

XLDnaute Barbatruc
Re : Mise a jour de VBproject via une macro

Bonjour
Pour avoir travaillé sur ce type de modification, je ne pense pas qu'il soit possible de déverrouiller un projet par macro, mais je suis curieux de voir ce que les autres en pense!!
 

Chris24

XLDnaute Impliqué
Supporter XLD
Re : Mise a jour de VBproject via une macro

Bonjour

si si

Je n'ai pas testé le code de Multhani mais celui-ci fonctionne

'DEPROTECTION VBA

'"a" représente le mot de passe.
'-----------------------------------------------
Sub TestUnprotect_()
Dim Wk As Workbook
Dim Chemin As String, Fichier As String

Chemin = "D:\D\excel\"
Fichier = "classeur1.xls"

Set Wk = Workbooks.Open(Chemin & Fichier)
UnprotectVBProject Wk, "a"
End Sub

Edit: j'ai répondu trop vite il manque une partie du code et c'est le même que Multhani . Désolé

Cordialement
 
Dernière modification par un modérateur:

Chris24

XLDnaute Impliqué
Supporter XLD
Re : Mise a jour de VBproject via une macro

Re Bonjour

Tu peux peut être adapter ce code à ton cas.

'créer nouveau calsseur et y insérer un module

Private Sub Ajout_Module()
' cocher la référence "Microsoft Visual Basic For Applications Extensibility 5.3"
Dim vCod As String, vObj As Object

' Sélectionne le module à copier
Set vObj = Application.VBE.ActiveVBProject.VBComponents.Item("Module2")
' Place le code à copier dans la variable vCod
vCod = vObj.CodeModule.Lines(1, vObj.CodeModule.CountOfLines)
' Crée un nouveau classeur
Workbooks.Add
With ActiveWorkbook
' Crée un nouveau module dans le nouveau classeur
.Application.VBE.ActiveVBProject.VBComponents.Add (vbext_ct_StdModule)
' Insère le code dans le nouveau module
.Application.VBE.ActiveVBProject.VBComponents.Item("Module1").CodeModule.AddFromString (vCod)

'Pour placer le code dans ThisWorkbook, il suffit de remplacer "Module2" par cette nouvelle destination:
.Application.VBE.ActiveVBProject.VBComponents.Item("ThisWorkbook").CodeModule.AddFromString (vCod)
End With
End Sub

Bonne journée
 

Chris24

XLDnaute Impliqué
Supporter XLD
Re : Mise a jour de VBproject via une macro

Bonjour sousou

Je n'ai pas excel 2010 pour tester

As-tu coché la référence "Microsoft Visual Basic For Applications Extensibility 5.3"

"a" est à remplacer par ton mot de passe, mais je pense que c'est ce que tu as fait :)

Voici ma proc UnprotectVBProject, elle diffère très légèrement de celle de multhani

Sub UnprotectVBProject(WB As Workbook, ByVal Password As String)
Dim vbProj As Object
Set vbProj = WB.VBProject
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

Bonne soirée
 
Dernière modification par un modérateur:

sousou

XLDnaute Barbatruc
Re : Mise a jour de VBproject via une macro

Re
malheureusement je confirme je n'arriva pas à faire fonctionner UnprotectVBProject même avec 97

Je vais chercher....
C' est bon je ne suis pas bien réveillé et je vous ai mal lu.
J'ai pensé que UnprotectVBProject était uneméthode vb erreur!!!
Merci
 
Dernière édition:

Multhani

XLDnaute Nouveau
Re : Mise a jour de VBproject via une macro

Bonjour et merci pour vos réponses. Je vais peux être faire un redit où je me suis mal exprimer dans mon message de départ, le problème n'est pas le déblocage mais l'insertion du module après avoir débloquer le vbproject. J'ai un problème de fichier corrompu après avoir essayer par une autre méthode. Je me demande si ce n'est pas un problème de lecture du code trop rapide qui empêche de charger le module correctement :-/. Si vous avez d'autre idée
 

Multhani

XLDnaute Nouveau
Re : Mise a jour de VBproject via une macro

Mon problème est résolu, il s'agissait bien d'un problème de temps d'importation trop rapide. Désolé de vous avoir déranger pour si peux. Merci à tous. Par contre je n'ai pas trouver où on met résolu...
 

dadu35

XLDnaute Nouveau
Re : Mise a jour de VBproject via une macro

Mon problème est résolu, il s'agissait bien d'un problème de temps d'importation trop rapide. Désolé de vous avoir déranger pour si peux. Merci à tous. Par contre je n'ai pas trouver où on met résolu...
Bonjour,
j'ai un souci identique : modifier une macro dans des centaines de fichiers Excel identiques
Boucle sur les fichiers d'un répertoire
- ouvrir le fichier
- déverrouiller le Projet VBA du fichier
- remplacer le module "Module1" par un nouveau module "Module1"
- fermer le fichier
Puis-je obtenir le code complet qui a permis à votre outil de fonctionner ?
Je vous sollicite après moultes recherches sur les différents forums sans avoir réussi à faire une synthèse
fonctionnant.
Merci
Dadu
 

dadu35

XLDnaute Nouveau
Re : Mise a jour de VBproject via une macro

Mon problème est résolu, il s'agissait bien d'un problème de temps d'importation trop rapide. Désolé de vous avoir déranger pour si peux. Merci à tous. Par contre je n'ai pas trouver où on met résolu...
Bonjour,
j'ai un souci identique : modifier une macro dans des centaines de fichiers Excel identiques
Boucle sur les fichiers d'un répertoire
- ouvrir le fichier
- déverrouiller le Projet VBA du fichier
- remplacer le module "Module1" par un nouveau module "Module1"
- fermer le fichier

J'ai trouvé ce code sur internet mais n'arriva pas à le mettre au point.
Puis-je obtenir le code complet qui a permis à votre outil de fonctionner ?
Je vous sollicite après moultes recherches sur les différents forums sans avoir réussi à faire une synthèse
fonctionnant.
Merci
Dadu
 
Haut Bas