macro export de données : protéger déprotéger une feuile du classeur de destination

lennynero256

XLDnaute Junior
Bonjour,

je souhaite modifier une macro que voici :

Code:
Sub EXPORT_STATS()

    Mdp = Application.InputBox("Mot de passe requis", "Entrer le mot de passe")
    If Mdp <> "Toto" Then
    MsgBox "Mdp incorrect", vbCritical
Exit Sub
End If
    ThisWorkbook.Sheets("export").Unprotect "pass"
    ThisWorkbook.Sheets("export").Range("A3:AN3").Copy
    With Workbooks("stats_2013.xls").Sheets("SYNTHESE_ANNUELLE")
      .Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial
      .Paste Link:=True
    End With
    Application.CutCopyMode = False
    ThisWorkbook.Sheets("export").Protect "pass", True, True, True
    Workbooks("stats_2013.xls").Save
End Sub

Cette macro permet l'export de données (liaisons entre des classeurs sources vers un classeur de destination synthétisant les données).

En fait je souhaite pouvoir déprotéger/reprotéger la feuille "synthese_annuelle" classeur de destination pour permettre l'exécution de la macro. Il est important que l'utilisateur puisse utiliser les filtres automatiques.

J'ai donc utilisé la méthode .Protect de la même manière que dans la macro ci-dessus (pour protéger et déprotéger la feuille "export" du classeur source). J'ai essayé plusieurs combinaisons avec des arguments différents mais n'étant pas un pro de la macro, je pense que la syntaxe que j'ai essayée n'était pas la bonne. Je vous fait grâce du copier/coller de mes tentatives, j'aimerais juste un coup de main pour modifier proprement ma macro.

Je vous remercie par avance, cordialement,

Lenny
 

simraill

XLDnaute Occasionnel
Re : macro export de données : protéger déprotéger une feuile du classeur de destinat

Salut Lenny,

pour ma part j'utilise cette ligne de code pour reprotéger ma feuille :
Code:
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowFormattingCells:=True, AllowFiltering:=True, AllowSorting:=True, Password:="admin"

Sinon tu aurais pû essayer en passant par l'enregistreur de macro, il permet de connaitre la sintaxe de beaucoup de chose ;)!

Simraill
 

lennynero256

XLDnaute Junior
Re : macro export de données : protéger déprotéger une feuile du classeur de destinat

Bonjour simrail,

merci pour ta réponse. Je connais effectivement la méthode protect et ses arguments, mais mon problème est plus de savoir où mettre le code et sous quelle forme. De plus la propriété activesheet n'est pas adaptée à ma situation.
Mais merci quand même de t'être intéressé à mon problème.

Je maintiens donc ma question...

Lenny
 

simraill

XLDnaute Occasionnel
Re : macro export de données : protéger déprotéger une feuile du classeur de destinat

Effectivement ce n'est pas du tout adapté à ta situation, je pensais que tu ne voulais que la syntaxe.

Il te suffit de rajouter la déprotection reprotection dans ton with workbooks("stats_2013.xls").Sheets("SYNTHESE_ANNUELLE") comme cela :

Code:
Sub EXPORT_STATS()

    Mdp = Application.InputBox("Mot de passe requis", "Entrer le mot de passe")
    If Mdp <> "Toto" Then
    MsgBox "Mdp incorrect", vbCritical
Exit Sub
End If
    ThisWorkbook.Sheets("export").Unprotect "pass"
    ThisWorkbook.Sheets("export").Range("A3:AN3").Copy
    With Workbooks("stats_2013.xls").Sheets("SYNTHESE_ANNUELLE")
      .unprotect "ton mdp"
      .Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial
      .Paste Link:=True
      .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowFormattingCells:=True, AllowFiltering:=True, AllowSorting:=True, Password:="admin"
    End With
    Application.CutCopyMode = False
    ThisWorkbook.Sheets("export").Protect "pass", True, True, True
    Workbooks("stats_2013.xls").Save
End Sub

simraill
 

lennynero256

XLDnaute Junior
Re : macro export de données : protéger déprotéger une feuile du classeur de destinat

Rebonjour Simraill,

merci pour ton code. Cependant j'avais déjà essayé cette méthode, mais j'obtiens toujours un message d'erreur que voici : "erreur d'exécution '1004', la méthode PasteSpecial de la classe range a échoué"...

Qu'en penses tu ?...


Lenny
 

lennynero256

XLDnaute Junior
Re : macro export de données : protéger déprotéger une feuile du classeur de destinat

Bonjour Jam, Simraill,

J'ai essayé de modifier la macro avec .select mais ça me donne une erreur 1004, impossible de lire la propriété select de la classe Worksheet. Code rajouté à part ci dessous :

Code:
Sub EXPORT_STATS()

    Mdp = Application.InputBox("Mot de passe requis", "Entrer le mot de passe")
    If Mdp <> "Toto" Then
    MsgBox "Mdp incorrect", vbCritical
Exit Sub
End If
    ThisWorkbook.Sheets("export").Unprotect "pass"
    ThisWorkbook.Sheets("export").Range("A3:AN3").Copy
    With Workbooks("stats_2013.xls").Sheets("SYNTHESE_ANNUELLE")
      .Unprotect "pass"
Code:
End With
    With Workbooks("stats_2013.xls").Sheets("SYNTHESE_ANNUELLE").Select
Code:
      .Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial
      .Paste Link:=True
      .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowFormattingCells:=True, AllowFiltering:=True, AllowSorting:=True, Password:="admin"
    End With
    Application.CutCopyMode = False
    ThisWorkbook.Sheets("export").Protect "pass", True, True, True
    Workbooks("stats_2013.xls").Save
End Sub

Je pense que ma syntaxe n'est pas bonne, mais qu'est-ce qui cloche ?

Par avance merci pour votre aide...

Lenny
 
Dernière édition:

lennynero256

XLDnaute Junior
Re : macro export de données : protéger déprotéger une feuile du classeur de destinat

Bonjour,

après plusieurs essais et recherches, je suis parvenu à régler une grande partie des problèmes auxquels j'étais confronté.

Déjà je me suis appuyé sur les éléments contenus dans cette discussion :

https://www.excel-downloads.com/threads/proteger-et-deproteger-une-feille-dans-une-macro.156813/

Comme indiqué, j'ai réglé mon problème de PasteSpecial en déprotégeant ma feuille de destination AVANT de faire la copie. Voici le code commenté de la macro actuelle :

Code:
Sub EXPORT_STATS()

' EXPORT_STATS Macro
' Macro V2 avec protection et déprotection de la feuille de destination
' V1 enregistrée le 20/12/2011
' V2 registrée le 24/01/2013
'

' ******** Demande de mot de passe pour éxécuter la macro d'export *********
'
Mdp = Application.InputBox("Mot de passe requis", "Entrer le mot de passe")
If Mdp <> "Toto" Then
MsgBox "Mdp incorrect", vbCritical
Exit Sub
'
' ********* Si mot de passe ok lancement de la suite, sinon sortie *********
'
'
End If
'
' ********* déprotection de la feuille d'export *********
'
ThisWorkbook.Sheets("export").Unprotect "password"
'
'
' ********* déprotection de la feuille de destination dans le classeur externe *********
'
With Workbooks("stats_2013.xls").Sheets("SYNTHESE_ANNUELLE")
.Unprotect
End With
'
'
' ********* Copie dans le presse papier des données source *********
'
ThisWorkbook.Sheets("export").Range("A3:AN3").Copy
'
'
' ********* Collage dans la feuille de destination *********
'
With Workbooks("stats_2013.xls").Sheets("SYNTHESE_ANNUELLE")
.Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial
.Paste Link:=True
'
'
'********* Remise en place de la protection de la feuille de destination *********
'
.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowFormattingCells:=True, AllowFiltering:=True, AllowSorting:=True
'
'
' ********* Vidage du presse papier *********
'
End With
Application.CutCopyMode = False
'
'
' ********* Remise en place de la protection de la feuille contenant les données source *********
'
ThisWorkbook.Sheets("export").Protect "password", True, True, True
'
'
' ********* Sauvegarde du classeur de destination *********
'
Workbooks("stats_2013.xls").Save
'
'
' ********* Fin de la macro *********
End Sub

Par contre j'ai néanmoins un dernier problème à régler :

A l'ouverture de mon classeur de destination contenant la feuille "SYNTHESE_ANNUELLE", celle ci est protégée, mais totalement, c'est à dire qu'elle n'autorise ni les tris ni les filtres. Lorsque je fais un export depuis un classeur source sur la feuille "SYNTHESE_ANNUELLE", pas de problème, la feuille est bien protégée et les tris et filtres sont autorisés. Mais lorsque je ferme et que je rouvre ce classeur de destination, ma feuille "SYNTHESE_ANNUELLE" se retrouve protégée totalement, tris et filtres non autorisés...

Y a-t-il une sorte de conflit ? Comment puis je faire pour que les filtres et les tris soient par défaut autorisés comme le prévoit ma macro ?

Merci pour votre aide !

Lenny
 

Discussions similaires

Statistiques des forums

Discussions
312 931
Messages
2 093 719
Membres
105 794
dernier inscrit
mallet