Deprotéger plusieurs feuilles

Résolu/Fermé
Emilie - Modifié par Emilie le 14/02/2017 à 10:09
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 - 14 févr. 2017 à 17:17
Bonjour,

Je dois enregistrer de manière mensuelle une copie d'un classeur protégé, en écrasant les formules (copier/coller valeurs). Il faut donc que j'ôte la protection pour chaque feuille (sachant que j'ai oublié le mot de passe !!!).

Pour déprotéger j'ai trouvé ça ;
Sub enleve_protection()
Dim a, b, c, d, e, f, g, h, i, j, k, l As Integer
On Error Resume Next
For a = 65 To 66
For b = 65 To 66
For c = 65 To 66
For d = 65 To 66
For e = 65 To 66
For f = 65 To 66
For g = 65 To 66
For h = 65 To 66
For i = 65 To 66
For j = 65 To 66
For k = 65 To 66
For l = 32 To 126
ActiveSheet.Unprotect Chr(a) & Chr(b) & Chr(c) & Chr(d) & Chr(e) & Chr(f) & Chr(g) & Chr(h) & Chr(i) & Chr(j) & Chr(k) & Chr(l)
If ActiveSheet.ProtectContents = False Then
Exit Sub
End If
Next
Next
Next
Next
Next
Next
Next
Next
Next
Next
Next
Next
End Sub


Mon problème est que la macro le fait pour un onglet, j'aurais aimé sur tous.

Merci d'avance,

5 réponses

ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
14 févr. 2017 à 10:11
Bonjour Émilie,

Essaie comme ça :

Sub Copie_TBX()
Dim Feuille As Worksheet
Dim a As Integer, b As Integer, c As Integer, d As Integer, e As Integer, f As Integer
Dim g As Integer, h As Integer, i As Integer, j As Integer, k As Integer, l As Integer

Workbooks.Open Filename:="MON FICHIER.xlsx", UpdateLinks:=0
ActiveWorkbook.SaveAs Filename:="MON FICHIER MENSUEL.xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
For Each Feuille In ActiveWorkbook.Worksheets
    On Error Resume Next
    For a = 65 To 66
        For b = 65 To 66
            For c = 65 To 66
                For d = 65 To 66
                    For e = 65 To 66
                        For f = 65 To 66
                            For g = 65 To 66
                                For h = 65 To 66
                                    For i = 65 To 66
                                        For j = 65 To 66
                                            For k = 65 To 66
                                                For l = 32 To 126
                                                    ActiveSheet.Unprotect Chr(a) & Chr(b) & Chr(c) & Chr(d) & Chr(e) & Chr(f) & Chr(g) & Chr(h) & Chr(i) & Chr(j) & Chr(k) & Chr(l)
                                                    If ActiveSheet.ProtectContents = False Then
                                                        GoTo suite
                                                    End If
                                                Next l
                                            Next k
                                        Next j
                                    Next i
                                Next h
                            Next g
                        Next f
                    Next e
                Next d
            Next c
        Next b
    Next a
suite:
    Feuille.Select
    Cells.Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
    Range("A1").Select
Next Feuille
feuilleRef.Activate
ActiveWorkbook.Save
ActiveWindow.Close
End Sub


Petite remarque sur la déclaration des variables. Tu peux déclarer plusieurs variables dans la même ligne mais il faut spécifier le type de chacune d'entre elles sinon elle prendra le type Variant par défaut (le plus gourmand en mémoire...)
0
Bonjour,

Merci pour le code. Toutefois ça ne fonctionne pas. Le fichier se créé mais il ne répond plus.

J'ai supprimer le copier coller dans la macro, ça créé la copie mais ne deprotège que la feuille active.
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
14 févr. 2017 à 11:40
Re,

Pourtant le code de déprotection est à l'intérieur de la boucle des onglets (feuilles) !... Mais, reste à savoir si il est efficace à 100%... J'en doute.
0
J'ai réussi :

Après avoir créé la macro qui enlève la protection (enleve_protection) à part voici le code :

Sub Copier_calculatrice()
Workbooks.Open Filename:= _
"MONFICHIER DE BASE.xlsx"
ActiveWorkbook.SaveAs Filename:= _
"MONFICHIERMENSUEL.xlsx" _

, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False

Dim Feuille As Worksheet, mémo As Boolean, feuilleRef As Worksheet

Application.ScreenUpdating = False

Set feuilleRef = ActiveSheet

For Each Feuille In Worksheets
Feuille.Select
Application.Run "'MON FICHIER DE TRAVAIL.xlsm'!enleve_protection"

Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Range("A1").Select

Next Feuille
feuilleRef.Activate

Application.CutCopyMode = False
Application.ScreenUpdating = True
ActiveWorkbook.Save
ActiveWindow.Close

End Sub


Merci de ton aide,
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
14 févr. 2017 à 13:38
Finalement, pratiquement le même code du début ! Non ?...

Évite les accents dans l'utilisation d'un nom de variable (mémo). Variable qui par ailleurs ne sert à rien puisqu'elle n'est ni initialisée ni utilisée dans le reste du code...
0
Oui pratiquement, mais je n'avais pas pensé à le faire de cette manière.
Je bidouille en vba, donc c'est des bribes de code trouvé à droite, à gauche...
"Memo as boolean" peut être supprimer, c'est ça ?

Un jour j'irai me former sérieusement
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160 > Emilie
14 févr. 2017 à 17:17
Oui c'est ça ! Ce n'est pas bien grave mais c'est plus clair pour celui ou celle qui aurait à retravailler ton code...
0