VBA macros et protection de la feuille

lennynero256

XLDnaute Junior
Bonjour,

je tente de mettre un code vba dans une macro permettant de déprotéger temporairement la feuille où la macro s'exécute. J'ai un souci de syntaxe dans mon code que voici

Code:
Sub EXPORT_STATS()
'
' EXPORT_STATS Macro
' Macro enregistrée le 12/12/2011
'

'
    With Workbooks("stats_2012.xls").Sheets("SYNTHESE")
    .Unprotect "monmotdepasse"
    ThisWorkbook.Sheets("export").Unprotect "monmotdepasse"
    ThisWorkbook.Sheets("export").Range("A3:AM3").Copy
    With Workbooks("stats_2012.xls").Sheets("SYNTHESE")
      .Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial
      .Paste Link:=True

    End With
    Application.CutCopyMode = False
    ThisWorkbook.Sheets("export").Protect "monmotdepasse", True, True, True
    
    End With
    Workbooks("stats_2012.xls").Sheets ("SYNTHESE")
    .Protect "monmotdepasse", True, True, True
    Workbooks("stats2012.xls").Save
End Sub


J'ai une erreur ici :

Code:
Workbooks("stats_2012.xls").Sheets ("SYNTHESE")

j'utilise mal la propriété Sheets...

Merci d'avance pour votre correction !

Cordialement,

Lenny
 

Papou-net

XLDnaute Barbatruc
Re : VBA macros et protection de la feuille

Bonjour lennynero256,

Si tu protèges ta feuille au moyen de la ligne suivante :

Code:
Me.Protect userinterfaceonly:=True

Tu n'auras pas besoin de la déprotéger pour appliquer ta macro.

Tu obtiendras toutes précisions utiles en sélectionnant Protect puis en appuyant sur F1.

Espérant avoir répondu.

Cordialement.
 

Hulk

XLDnaute Barbatruc
Re : VBA macros et protection de la feuille

Hello,

Ou ta macro modifiée, mais elle était un peu bizarre, alors je ne sais pas si c'est vraiment ce que tu veux... À voir.
Code:
Sub EXPORT_STATS()
'
' EXPORT_STATS Macro
' Macro enregistrée le 12/12/2011
'

'
    With Workbooks("stats_2012.xls")
        With Sheets("SYNTHESE")
            .Unprotect "monmotdepasse"
            With Sheets("export")
                .Unprotect "monmotdepasse"
                .Range("A3:AM3").Copy
            End With
            .Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial
            .Paste Link:=True
            Application.CutCopyMode = False
            Sheets("export").Protect "monmotdepasse", True, True, True
            .Protect "monmotdepasse", True, True, True
        End With
        .Save
    End With
    
End Sub
 

lennynero256

XLDnaute Junior
Re : VBA macros et protection de la feuille

Rebonjour,

j'ai regardé ta proposition de près mais je pense qu'elle ne va pas coller avec mon projet. En effet, dans les notes de l'aide j'ai trouvé l'info suivante :

Si vous appliquez la méthode Protect et que l'argument UserInterfaceOnly a la valeur True dans une feuille de calcul et que vous enregistrez le classeur, l'intégralité de la feuille de calcul (et pas uniquement l'interface) sera protégée lors de la réouverture du classeur. Pour réactiver la protection de l'interface utilisateur après l'ouverture du classeur, vous devez de nouveau appliquer la méthode Protect avec la valeur True affectée à l'argument UserInterfaceOnly

est il possible de juste corriger le code existant. Hulk m'a fait une proposition, mais celle ci ne correspond pas à mon travail...

En fait je souhaite juste connaitre la syntaxe à utiliser pour remettre la protection sur la feuille synthese du classeur stats_2012, ce classeur étant différent de celui ou se trouve la macro...

Merci !

Lenny
 

Papou-net

XLDnaute Barbatruc
Re : VBA macros et protection de la feuille

Rebonjour Lenny,

Il te suffit de mettre la ligne que je t'ai proposée dans le module ThisWorkBook :

Code:
Private Sub Workbook_Open()
Sheets("Feuil1").Protect userinterfaceonly:=True
End Sub

De cette façon, la protection sera réglée dès l'ouverture de ton classeur.

C'est encore la solution qui me paraît être la plus simple.

Cordialement.
 

lennynero256

XLDnaute Junior
Re : VBA macros et protection de la feuille

Bonjour Hulk,

merci pour ton code, mais (ce n'est bien sûr pas de ta faute), il ne va pas coller. En effet cette macro qui copie colle des données sur une feuille SYNTHESE du classeur STATISTIQUES_2012, s'exécute sur la feuille EXPORT d'un classeur source. Les feuilles des 2 classeurs étant toutes protégées, ma macro de départ contient à la fois un code qui déprotége/reprotège la feuille export du classeur source et un autre qui déprotège la feuille SYNTHESE du classeur destination. C'est cette dernière qui me pose souci dans la syntaxe du code. Dans ton code, j'ai l'impression que tu consideres les feuilles export et synthese comme faisant partie d'un même classeur ce qui n'est pas le cas...
 

lennynero256

XLDnaute Junior
Re : VBA macros et protection de la feuille

Rebonjour Papou-net,

j'ai finalement opté pour ta proposition. J'avais besoin d'avoir accès à certaines cellules déverrouillées donc j'ai rajouté l'argument contents ce qui donne :

Code:
Private Sub Workbook_Open()
Sheets("SYNTHESE").Protect userinterfaceonly:=True, Contents:=True
End Sub


Merci !
 

Hulk

XLDnaute Barbatruc
Re : VBA macros et protection de la feuille

Re,

Maintenant que je l'ai fait :rolleyes:
Code:
Private Sub EXPORT_STATS()

    On Error Resume Next
    
    Application.ScreenUpdating = False
    
    'Avec cette ligne, les fichiers doivent être dans le même répertoire !
    Workbooks.Open Filename:=ThisWorkbook.Path & "\ClasseurSource.xlsm"
    
    'Ou... et modifier le chemin
    'Workbooks.Open Filename:="C:\Users\XXXX\Desktop\ClasseurSource.xlsm"
    
    Windows("stats_2012.xlsm").Activate

    With Workbooks("stats_2012.xlsm")
        With Sheets("SYNTHESE")
            .Unprotect "monmotdepasse"
            With Workbooks("ClasseurSource.xlsm")
                Windows("ClasseurSource.xlsm").Activate
                With Sheets("export")
                    .Unprotect "monmotdepasse"
                    .Range("A3:AM3").Copy
                End With
            End With
            Windows("stats_2012.xlsm").Activate
            .Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial
            .Paste Link:=True
            Application.CutCopyMode = False
            With Workbooks("ClasseurSource.xlsm")
                With Sheets("export")
                    .Protect "monmotdepasse", True, True, True
                End With
            End With
            .Protect "monmotdepasse", True, True, True
        End With
        .Save
    End With
    
    'Si tu veux fermer le ClasseurSource
    'Windows("ClasseurSource.xlsm").Activate
    'ActiveWindow.Close
        
    Application.ScreenUpdating = True

End Sub
Mais j'sais toujours pas si j'suis juste :cool:
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 493
Messages
2 088 956
Membres
103 990
dernier inscrit
lamiadebz