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 :

Problème de protection: Protect UserInterfaceOnly


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 34
    Points : 25
    Points
    25
    Par défaut Problème de protection: Protect UserInterfaceOnly
    Bonjour,

    J'ai un problème avec la protection des feuilles de mon classeur. Je vous explique:

    A l'ouverture de mon classeur, toutes les feuilles deviennent protégées avec l'option UserInterfaceOnly = True.
    Cela devrait me permettre normalement d'agir sur toutes les feuilles uniquement via les procédures de mon projet VBA.

    Malheureusement, des fois ça marche (j'arrive à supprimer des colonnes d'une feuille via un UserForm) et des fois non.


    Voici le code qui permet de protéger les feuilles du classeur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_Open()
        ModuleCommons.protectAllSheets
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Sub protectAllSheets()
       Dim I As Integer
     
        Application.ScreenUpdating = False
        For I = 1 To Worksheets.Count
            Worksheets(I).Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
            , AllowFormattingCells:=True, AllowSorting:=True, AllowFiltering:=True, UserInterfaceOnly:=True
        Next I
        Application.ScreenUpdating = True
    End Sub
    Voici la ligne qui cause une erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    formConfigCachees.Columns(consultantColumn).Delete Shift:=xlRight
    consultantColumn est le numéro d'une colonne bien rempli dans la feuille formConfigCachees.

    Et voici le message d'erreur:
    Error 1004: La méthode Delete de la classe Range a échoué

    J'ai bien vérifié dans les deux cas (celui où ça marche et celui où ça ne marche pas) que juste avant de faire le Delete, j'avais formConfigCachees.ProtectionMode = Vrai.


    quelqu'un aurait-il une réponse où une idée à mon problème?

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Ce que tu dis m'étonne. Pour moi, si tu protèges tes feuilles, par soft ou non, tu ne peux pas les modifier, ce qui inclut la suppression d'une colonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Worksheets("Feuil3").Protect
    Columns(5).Delete ' marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Worksheets("Feuil3").UnProtect
    Columns(5).Delete ' marche
    Version 97 - 2003
    Pour travailler dans une feuille protégée, je ne connais qu'une solution... la déprotéger avant. Après, ne reste plus qu'à la reprotéger
    A+

  3. #3
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AllowDeletingColumns:=True

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Oui, mais attention :
    La propriété AllowDeletingColumns peut être définie en utilisant les arguments de la méthode Protect.

    Les colonnes contenant les cellules à supprimer doivent être déverrouillées lorsque la feuille est protégée.
    cf.

  5. #5
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    barf ! oui hein !
    Forcément.
    Mais là, c'est une question de verrouillage de cellules !
    J'ai répondu à la question de la suppression des colonnes. Il ne faut pas oublier l'argument... à moins qu'il ne soit déjà programmé.

    Maitenant, quoi qu'on fasse, il est préférable que les cellules ne soient pas vérrouillées !
    C'est sûr !
    Sinon, il y a contradiction !

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Et donc, pour supprimer une colonne dans un feuille verrouillée, il existe deux méthodes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Worksheets("Feuil1").Unprotect
    Columns(5).Delete
    Worksheets("Feuil1").Protect
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Worksheets("Feuil1").Unprotect
    Columns(5).Locked = False
    Worksheets("Feuil1").Protect
    AllowDeletingColumns = True
    Columns(5).Delete
    C'est pareil mais c'est plus long !

    Désolé Maxence, je n'ai pas pu m'en empêcher

  7. #7
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Allez ... j'en ajoute une 3° !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    application.Interactive=False
    comme cela, on ne peut plus interagir avec l'application Excel.
    Ceci ne "protège" rien, mais empèche l'utilisateur d'accéder à sa feuille.
    Sans aucune protection, il est tout à fait possible de faire tout ce qu'on veut, comme supprimer une colonne.

    Citation Envoyé par F1
    Le blocage de la saisie utilisateur empêche l'utilisateur d'entraver l'exécution de la macro lorsqu'il déplace ou active des objets Microsoft Excel.
    Cette propriété est utile si vous recourez à l'échange dynamique de données (DDE, Dynamic Data Exchange) ou à OLE Automation pour communiquer avec Microsoft Excel à partir d'une autre application.
    Si vous affectez la valeur False à cette propriété, n'oubliez pas de rétablir la valeur True. Microsoft Excel ne lui affectera pas automatiquement de nouveau la valeur True au terme de l'exécution de votre macro.
    encore plus court !
    Et de 3 !

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 34
    Points : 25
    Points
    25
    Par défaut
    Ce que tu dis m'étonne. Pour moi, si tu protèges tes feuilles, par soft ou non, tu ne peux pas les modifier, ce qui inclut la suppression d'une colonne

    Code :
    Worksheets("Feuil3").Protect
    Columns(5).Delete ' marche pasCode :
    Worksheets("Feuil3").UnProtect
    Columns(5).Delete ' marche

    Et ben si, justement l'option de protection UserInterfaceOnly = True protège la feuille contre l'utilisateur, mais pas contre les macros et tout code VBA. Et donc Pas besoin de protéger/déprotéger les feuilles à chaque fois.


    Au fait je sais pourquoi ça ne marchait pas avant (mais je ne comprend pas vraiment pourquoi).
    Avec l'option UserInterfaceOnly activé à True, avant de faire un Delete, il faut au moins que je sélectionne la feuille:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    formConfigCachees.Select
    . Cela appremment active rééllement cette option de protection, et me permet par la suite de faire des suppression par du code.

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Merci mardona, je n'étais pas allé jusqu'au bout de ta ligne de code. Du coup, j'ai appris quelque chose.
    Mériterait d'être mis dans la FAQ : "Comment, par soft, écrire, supprimer, effacer des données dans une feuille protégée ?"

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

Discussions similaires

  1. Friend, protected, protected friend
    Par Thesum dans le forum VB.NET
    Réponses: 15
    Dernier message: 21/07/2017, 22h40
  2. Problème utilisation fonction protected
    Par chrtophe dans le forum Débuter
    Réponses: 2
    Dernier message: 21/09/2013, 19h16
  3. probléme avec la Protection classeur
    Par franc83 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/02/2012, 11h55
  4. Problème avec la protection de classeurs
    Par Raymond_kiid dans le forum Conception
    Réponses: 2
    Dernier message: 20/11/2011, 14h59
  5. Problème Virus (Digital Protection?) - Rapport HijackThis
    Par MarDvirus dans le forum Sécurité
    Réponses: 1
    Dernier message: 29/04/2010, 00h16

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