IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Protection d'une plage de cellules dans une feuille excel [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 129
    Points : 163
    Points
    163
    Par défaut Protection d'une plage de cellules dans une feuille excel
    Bonjour à tous,

    Dans un de mes fichiers je cherche à protéger une grande partie de mes cellules de manière à ce que les utilisateurs de classeur ne puissent les modifier. Les cellules que je souhaite laisser "disponibles" sont éparpillées sur ma feuille et leur nombre est assez important. Avec le gestionnaire de noms j'ai sélectionné toutes ces cellules et j'ai nommé la plage "cellules_libres". Comment écrire en code vba : protéger toutes la feuille sauf cette plage ?
    Mon code se situe dans un formulaire qui s'ouvre à l'ouverture du classeur et qui copie une feuille nomée "fiche" à la fin du classeur. C'est la copie de cette feuille que je souhaite protégé partiellemnt, les autres feuilles étant entièrement protégées à la modification.
    J'ai déjà écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    'En début de code je protège toutes les feuilles du classeur sauf la feuille "fiche" afin que le code fonctionne
    Private Sub UserForm_Initialize()
        Dim i As Integer 
        For i = 1 To Worksheets.Count
        Worksheets(i).Visible = True
        Worksheets(i).Protect
        Next i
        Worksheets("Fiche").Unprotect
        'Toutes les feuilles sont visibles et protégées de la modification sauf la feuille "Fiche"
     End Sub
    La seconde partie du code consiste à copier la feuille "fiche" et à la renommer, avant la fermeture du formulaire je souhaite protéger la dernière feuille du classeur (copie de "fiche") sauf la plage "cellules_libres", comment l'écrire ?

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 16
    Points : 22
    Points
    22
    Par défaut
    De base, tes cellules sont toutes dans le cas "Verrouillée si on protège la feuille."
    Il te suffit donc de passer les cellules que tu désires laisser accesible en non-verrouillée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Selection.Locked = False
    À noter que si tu le désires, tu peux autoriser les modifications en VBA sur des feuilles vérouillées. Faut juste rajouter un UserInterfaceOnly:=True dans ton protect :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Accueil").Protect Password:=PW, DrawingObjects:=True, Contents:=True, Scenarios:=True, UserInterfaceOnly:=True
    Edit : Quand je parle du Locked = False, il te faut en fait mettre, pour être précis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.Sheets("Fiche").Range("A1","A2","B4:B8").Locked = False
    "A1","A2","B4:B8" correspondant aux cellules que tu veux laisser modifiable.

  3. #3
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 129
    Points : 163
    Points
    163
    Par défaut
    Merci pour ta réponse!

    Si j'ai bien compris avec ta deuxième ligne de code, je peux par exemple copier quelque-chose dans une cellule de la feuille "Fiche" même si celle-ci est vérouiller ?

    Pour ta 3ième ligne de code, comment faire si je ne souhaite pas écrire toutes les cellules modifiables dans le code vba ? estèce que passer par une plage nommée avec le gestionniare de noms focntionne ?

    en tout cas merci beaucoup!

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 16
    Points : 22
    Points
    22
    Par défaut
    En verrouillant "Fiche" selon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Fiche").Protect Password:=PW, DrawingObjects:=True, Contents:=True, Scenarios:=True, UserInterfaceOnly:=True
    tu peux encore modifier les cellules oui, mais uniquement par VBA.

    (Attention, j'ai repris une partie de mon code : PW est en fait un string qui contient le mot de passe que tu souhaites donner pour la protection).

    estèce que passer par une plage nommée avec le gestionniare de noms focntionne ?
    Normalement oui, il te suffit d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.Sheets("Fiche").Range(cellules_libres).Locked = False

  5. #5
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 129
    Points : 163
    Points
    163
    Par défaut
    oki! merci pour tes explications!

    Malheureusement cela ne fonctionne pas : j'ai un message d'erreur 1004 " erreur définit par l'application ou par l'objet" sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ActiveWorkbook.Sheets("Fiche").Range(cellules_libres).Locked = False
    je pense que cela vient du fait que lors de la copie de la feuille "Fiche", excel copie ma liste nommée "Cellules_libres", il y en a donc deux dans mon gestionnaire de noms mais elles ne correspondent pas à la même feuille. comment dire à excel de prendre en compte la plage de la bonne feuille ?

  6. #6
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonjour,

    Essaie avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.Sheets("Fiche").Range("cellules_libres").Locked = False
    Cordialement.

  7. #7
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 512
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 512
    Points : 16 440
    Points
    16 440
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.Sheets("Fiche").Range("cellules_libres").Locked = False
    même avec un nom il faut les "

  8. #8
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 129
    Points : 163
    Points
    163
    Par défaut
    :s cela ne fonctionne toujours pas..

    erreu 1004 : "impossible de définir la propriété Locked de la classe Range"

    La plupart des cellules contenues dans "Cellules_libres" sont fusionnées, cela pose un problème ou cela n'a rien avoir ?

    merci de votre aide

  9. #9
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Quand tu cherches à déverrouiller ta plage, ta feuille est bien déprotégée ?

  10. #10
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 129
    Points : 163
    Points
    163
    Par défaut
    oui.. j'ai écris ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Worksheets("Fiche").Visible = True
                    Worksheets("Fiche").Unprotect
                        Sheets("Fiche").Cells.Locked = True
                        Sheets("Fiche").Range("Cellules_libres").Locked = False
                    Worksheets("Fiche").Protect , DrawingObjects:=True, Contents:=True, Scenarios:=True, UserInterfaceOnly:=True
    je ne vois pas pourquoi cela ne fonctionne pas.. mon fichier est gros et compliqué mais bon..

  11. #11
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Effectivement, le problème ne vient pas directement de ton code, il faut chercher ailleurs.

  12. #12
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 129
    Points : 163
    Points
    163
    Par défaut
    Voila j'ai trouvé! la plupart des cellules de ma plage "Cellules_Libres" étant fusionnées, cela ne fonctionne pas.. j'ai mis ce petit bout de code et cela fonctionne désormais! Merci de votre aide!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     Dim cell As Range
                    Dim pl As Range
                    Worksheets("Fiche").Visible = True
                    Worksheets("Fiche").Unprotect
                    Sheets("Fiche").Cells.Locked = True
                    For Each cell In Sheets("Fiche").Range("Cellules_libres")
                        If cell.MergeCells = True Then
                            Set pl = cell.MergeArea
                            cell.UnMerge
                            cell.Locked = False
                            pl.Merge
                        Else
                            cell.Locked = False
                        End If
                    Next cell
                    Worksheets("Fiche").Protect , DrawingObjects:=True, Contents:=True, Scenarios:=True, UserInterfaceOnly:=True

  13. #13
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 129
    Points : 163
    Points
    163
    Par défaut
    une dernière question, j'ai un bouton sur ma feuille "Fiche" que je souhaite laisser actif, j'ai donc écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Fiche").Protect , DrawingObjects:=False, Contents:=True, Scenarios:=True, UserInterfaceOnly:=True
    mais celui-ci est toujours protégé, quelqu'un à une idée ?

    J'ai trouvé mon problème, erreur dans le choix de la macro! désolé pour le dérangement! problème résolu! merci à tous!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] InputBox pour sélectionner cellule ou une plage de cellules dans une feuille.
    Par Nonno 94 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 14/02/2014, 19h01
  2. modification de cellules dans une plage de cellules
    Par matou83 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 25/06/2010, 11h32
  3. Autoriser sélection d'une plage de cellule dans une feuille Excel
    Par philoflore dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 01/08/2008, 09h49
  4. Trouver une plage de cellule dans une autre plage
    Par ouskel'n'or dans le forum Contribuez
    Réponses: 0
    Dernier message: 16/04/2008, 14h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo