Bienvenue sur les forums conseil & création · S'enregistrer

Se connecter automatiquement

Forums » Tableurs et logiciels de gestion (Money, Excel, Open Office...) » Protéger plusieurs feuilles Excel en même temps · Envoyer le lien

Par cli.mc-arles, le 18 Juil 2005, 13:38 Revenir en haut de page Répondre en citant

Smile Shocked Bonjour, je suis nouveau sur le forum et dans l'utilisation avancé d'excel. J'utilise office 2003, et je voudrais protégé les 15 feuilles de mon calsseur en même temps, car pour l'instant je le fais une à une. je ne sais pas creer de macro, ni l'activer.. Shocked
Merci pour vos futurs réponse.
je suis tout ouie. Laughing
Par Invité, le 18 Juil 2005, 14:29 Revenir en haut de page Répondre en citant

De quelle protection parles tu? si c'est une protection contre ouverture je pense que c'est possible dans outils/options/sécurité.

Par contre si c'est pour protection d'une cellule ou de certaines zones il faudrait refléchir d'avantages sur la chose?Dans ce cas les 15 feuilles ont-elles la même structure?...
Par cli.mc-arles, le 18 Juil 2005, 15:17 Revenir en haut de page Répondre en citant

j'explique : mes feuillets son différents, avec certaines formules dans certaines cellules qui ne sont pas toutes identiques (feuilles et formules). Je protège mes cellules. Mais je désire protéger mes 17 feuilles d'un seul coup. pour celà j'ai ouie dire que celà se faisait en utilisant une macro...
Merci pour le contact
@+ Embarassed
Par Cédric, le 18 Juil 2005, 15:32 Revenir en haut de page Répondre en citant

Salut,

En fait je pense qu'il parle de la protection contre la modification ?! C'est bien ça ? C'est vrai qu'Excel permet de protéger le classeur complet, mais seulement pour la structure et/ou les fenêtres... il n'y a donc pas autant d'options que pour le menu "Protéger la feuille".

Il faut donc comme tu le dis utiliser Visual Basic pour qu'il répète la fonction pour toutes les feuilles. Ne l'ayant jamais fait, je me suis servi de l'enregistreur de Macros pour m'aiguiller. Voici d'abord les macros que tu peux utiliser, j'ajouterai après un petit "tutoriel" pour comprendre comment arriver à ce résultat :

Macro1 : protéger toutes les feuilles

Code:
Sub Macro1()
For i = 1 To Sheets.Count
    Sheets(i).Protect "essai", DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowFormattingColumns:=True
Next i
End Sub


' Macro2 : enlever la protection des feuilles

Code:
Sub Macro2()
mdp = InputBox("Veuillez entrer le mot de passe", "Enlever la protection des feuilles", "")
If (mdp = "essai") Then
    For i = 1 To Sheets.Count
        Sheets(i).Unprotect mdp
    Next i
End If
End Sub


[ Edité : je l'ai indiqué plus bas, mais si tu veux utiliser un mot de passe, il ne faut pas oublier de protéger le code VB contre l'affichage, sinon le mdp sera accessible à tt le monde ]

Arrow Clic droit / Propriétés sur "VBAProject", onglet Protection.


Dernière édition par Cédric le 18 Juil 2005, 16:27; édité 2 fois
Par Cédric, le 18 Juil 2005, 15:35 Revenir en haut de page Répondre en citant

Cédric a écrit:
En fait je pense qu'il parle de la protection contre la modification ?! C'est bien ça ?

cli.mc-arles a écrit:
je protège mes cellules. Mais je désire protéger mes 17 feuilles d'un seul coup.

Oups... tu as posté avant moi Embarassed . Bon donc c'est que j'ai bien compris. Essais ces fonctions et dis moi ce que ça donne.

Je vais poster la suite...
Par Cédric, le 18 Juil 2005, 16:18 Revenir en haut de page Répondre en citant

Protection des feuilles

Ne connaissant pas la fonction à utiliser, j'ai donc d'abord utilisé l'enregistreur de macros :

  1. Dans le classeur ouvert, utiliser le menu : Outils / Macro / Nouvelle Macro puis valider le nom (par défaut Macro1). VBE commence à enregistrer.

  2. Protéger la feuille en utilisant le menu Outils / Protection / Protéger la feuille. Choisis bien les options de protection (sélections, modifications...).

  3. Arrêter l'enregistrement puis vérifier dans VBE (Visual Basic Editor) ce qu'il a enregistré :

    Code:
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
            , AllowFormattingCells:=True, AllowFormattingRows:=True


  4. Si tu as entré un mot de passe, tu remarques déjà que VBE n'en tient pas compte... je viens de le découvrir mais ça parait logique. Si c'est juste par précaution que tu veux protéger la feuille, pas besoin de mot de passe. Mais pourquoi faire simple quand on peut faire compliqué Laughing . On va faire comme si il fallait obligatoirement un MDP. Arrow direction l'aide pour en savoir plus sur la méthode "Protect". On voit qu'il est possible de définir le mot de passe en le passant en paramètre, ce qui nous donne (mot de passe : "essai") :

    Code:
    ActiveSheet.Protect "essai", DrawingObjects:=True, Contents:=True, Scenarios:=True _
            , AllowFormattingCells:=True, AllowFormattingRows:=True


  5. Voilà pour la protection... d'une feuille. Il faut maintenant protéger les autres, donc utiliser une boucle qui répète la fonction sur toutes les feuilles : For i = 1 To Sheets.Count ... Next i. Cette boucle effetuera la même manip pour toutes les feuilles (je connaissais la structure d'une boucle "For...Next" mais dans le cas contraire, il suffit de la rechercher dans l'aide). Bien sûr, il ne faut pas laisser ActiveSheet.Protect, sinon il répètera la fonction sur la feuille en cours ! Il faut donc indiquer à la place l'ID (n° de feuille) de chaque feuille, id que l'on obtient grace à la boucle ( il s'agit de la variable " i " ). On obtient donc :

    Code:
    For i = 1 To Sheets.Count
        Sheets(i).Protect "essai", DrawingObjects:=True, Contents:=True, Scenarios:=True _
            , AllowFormattingColumns:=True
    Next i


Voilà pour la protection de toutes les feuilles.
Par Cédric, le 18 Juil 2005, 16:19 Revenir en haut de page Répondre en citant

Enlever la protection de toutes les feuilles

  1. On fait le même pour enlever la protection, on obtient la méthode unprotect.

    Code:
    ActiveSheet.Unprotect


  2. Comme plus haut, il suffit d'utiliser une boucle pour enlever la protection. On crée donc la boucle en utilisant "Sheets(i)". Mais quand on teste la macro : problème... c'est comme si on exécutait 17 fois (pour chaque feuille) le menu "Ôter la protection" ! Il demande donc à chaque fois le mot de passe ! On va donc voir si on ne peut pas automatiser tout ça.

    Comme pour Protect, il suffit d'indiquer le mot de passe en paramètre : Sheets(i).Unprotect "essai". Mais si on l'utilise comme ça dans la boucle, il ne demandera plus de mot de passe ! Donc ça ne va pas non plus... Twisted Evil

    On va donc le garder comme ça, et demander à l'utilisateur s'il connait le mot de passe avant d'exécuter la boucle. Rien de plus simple : il suffit d'utiliser la fonction inputbox (c'est simple, mais en même temps il faut savoir qu'elle existe Wink ).

    InputBox demande à l'utilisateur d'entrer une chaîne de caractères (donc ici le mot de passe), que l'on va vérifier (voir l'aide de cette fonction pour en savoir plus).

    Code:
    mdp = InputBox("Veuillez entrer le mot de passe", "Enlever la protection des feuilles", "")


  3. Le mot de passe entré est ici stocké dans la variable mdp. Il ne reste plus qu'à le vérifier avec If (mdp = "essai") then ... End If.

    Code:
    If (mdp = "essai") Then
        ' Si le mot de passe est bon, on exécute la boucle...
        For i = 1 To Sheets.Count
            Sheets(i).Unprotect mdp
        Next i
    End If


  4. Eventuellement, tu peux ajouter un message d'erreur si le mot de passe n'est pas le bon :

    Code:
    If (mdp = "essai") Then
        ' Si le mot de passe est bon, on exécute la boucle...
        For i = 1 To Sheets.Count
            Sheets(i).Unprotect mdp
        Next i
        Else: MsgBox ("Mauvais mot de passe.")
    End If
Par Cédric, le 18 Juil 2005, 16:25 Revenir en haut de page Répondre en citant

Une dernière chose : si tu as besoin d'un mot de passe et que tu utilises cette fonction, il faut également penser à protéger le code VB contre la lecture !!! Sinon n'importe qui pourra aller lire le mot de passe dans l'Editeur Shocked .

Arrow Clic droit / Propriétés sur "VBAProject", onglet Protection.

@+, Cédric
Par cli.mc-arles, le 19 Juil 2005, 13:07 Revenir en haut de page Répondre en citant

Merci à toi Cédric,
excuse du retard, je suis entrain de tester ton script. En cas de blème je raplique sur le forum.
@+ jf
Embarassed
Par cli.mc-arles, le 19 Juil 2005, 14:06 Revenir en haut de page Répondre en citant

Encore merci CEDRIC
Avec tes informations voila ce que j'ai pu faire, moi qui n'avais jamais rien fait en VBasic

Sub Protection()
'
' Macro1 protection
' Macro enregistrée le 19/07/2005 par MC Arles
'

mdp = InputBox("Veuillez entrer le mot de passe", "Enlever la protection des feuilles", "")
If (mdp = "essai") Then
' Si le mot de passe est bon, on exécute la boucle...
For i = 1 To Sheets.Count
Sheets(i).Protect , DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFormattingCells:=True, AllowFormattingRows:=True
Next i
Else: MsgBox ("Mauvais mot de passe.")
End If
End Sub

Sub Déprotection()
'
' Macro2 déprotection
' Macro enregistrée le 19/07/2005 par MC Arles
'
mdp = InputBox("Veuillez entrer le mot de passe", "Enlever la protection des feuilles", "")
'
If (mdp = "essai") Then
' Si le mot de passe est bon, on exécute la boucle...
For i = 1 To Sheets.Count
Sheets(i).Unprotect mdp
Next i
Else: MsgBox ("Mauvais mot de passe.")
End If
End Sub


Maintenant j'aimerais savoir ou son stocker mes macros afin de pouvoir les utiliser dans des classeurs que je voudrais exporter?
Par Cédric, le 19 Juil 2005, 17:35 Revenir en haut de page Répondre en citant

Salut,

Je ne comprends pas pourquoi tu as modifié la macro Protection() ? Si tu utilises la macro comme tu l'as indiqué, il n'y aura pa de mot de passe défini !

Code:
Sheets(i).Protect , DrawingObjects:=True [...]


Arrow où est le mot de passe ? Si tu vérifie bien la macro que j'ai donné, le mot de passe doit être indiqué comme paramètre de Protect :

Code:
Sheets(i).Protect "mot_de_passe", DrawingObjects:=True [...]


Si tu utilises ta Macro, n'importe qui pourra enlever la protection en utilisant le menu Outils / Protection / Ôter la protection de la feuille, puisque le mot de passe n'a pas été défini ?


Citation:
Maintenant j'aimerais savoir ou son stocker mes macros afin de pouvoir les utiliser dans des classeurs que je voudrais exporter?


Si tu mets les macros dans un module de ton classeur [ VBAProject (nom_du_classeur.xls) ], ça ne pose pas de problèmes, la macro doit être exportée avec :

Par cli.mc-arles, le 20 Juil 2005, 08:00 Revenir en haut de page Répondre en citant

Salut cedric,
Effectivement je n'avais pas compris l'utilité de cette ligne de commande, voyant que j'avais un PWD dans une autre ligne.
Merci de m'avoir corrigé.
Si tu as testé mon script, je voudrais que des étoile apparaisse lors de la frappe du PWD dans mes fenetre de requète

Code:
mdp = InputBox("Veuillez entrer le mot de passe", "Pour la protection des feuilles", "")
If (mdp = "protec") Then
 ' Si le mot de passe est bon, on exécute la boucle...
    For i = 1 To Sheets.Count
      Sheets(i).Protect "protec", DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowFormattingCells:=True, AllowFormattingRows:=True
Next i


@+ jf
Par Cédric, le 20 Juil 2005, 23:47 Revenir en haut de page Répondre en citant

Citation:
Si tu as testé mon script, je voudrais que des étoile apparaisse lors de la frappe du PWD dans mes fenetre de requète


C'est possible, mais légèrement plus compliqué... Confused . La fonction InputBox ne permet pas de remplacer les caractères saisis par des astérisques (ou autre). Le seul composant qui le permet, c'est le composant TextBox.

Arrow Voir le tutoriel : Cacher le texte des mots de passe saisis par l'utilisateur.

Il suffit d'ajouter la boucle de ta fonction Deprotection() sur le bouton OK (et donc, tu n'as plus besoin de ta macro Deprotection) :

Code:
Private Sub CommandButton2_Click()
  If TextBox1.Text = "mot-de-passe" Then
    For i = 1 To Sheets.Count
      Sheets(i).Unprotect mdp
    Next i
  Else MsgBox("Le mot de passe est invalide.")
  End If
  TextBox1 = ""
  UserForm1.Hide
End Sub


Dis moi s'il y a des infos que tu ne comprends pas

@+, Cédric.
Par cli.mc-arles, le 22 Juil 2005, 15:11 Revenir en haut de page Répondre en citant

merci Cédric,
je n'ai pas le temps de tester ton script, je pars en vacances jusqu'au 22/08
@ + jf Razz Razz Razz
Arrow
Laughing Laughing
Par Cédric, le 22 Juil 2005, 15:14 Revenir en haut de page Répondre en citant

Alors bonnes vacances Wink

Tu diras quoi en rentrant

@+, Cédric

Forums » Tableurs et logiciels de gestion (Money, Excel, Open Office...) » Protéger plusieurs feuilles Excel en même temps · Envoyer le lien