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 :

Méthode VBA AllowFormattingColumns [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Août 2017
    Messages : 62
    Par défaut Méthode VBA AllowFormattingColumns
    Bonjour à tous,

    Dans l'application que je suis occupé à développer, l'utilisateur doit sans arrêt masquer et afficher des lignes ou des colonnes via une procédure VBA.
    Je dois maintenir la protection de la feuille de travail pour éviter qu'il ne modifie son contenu et sa présentation (notamment le format des lignes et colonnes).
    Je me suis aperçu que déclencher les méthodes "Unprotect" et "Protect" avant et après chaque affichage ou masquage de lignes ou colonnes ralenti de manière sensible l'exécution du code.

    J'ai découvert dans l'aide VBA la macro ci-dessous qui peut autoriser seulement le masquage ou l'affichage des colonnes tout en maintenant les autres protections données par la méthode "Protect" .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub ProtectionOptions()
        ActiveSheet.Unprotect
       ' Allow columns to be formatted on a protected worksheet.
        If ActiveSheet.Protection.AllowFormattingColumns = False Then  ActiveSheet.Protect AllowFormattingColumns:=True 
        MsgBox "Columns can be formatted on this protected worksheet."
    End Sub
    Il me semble que Microsoft a écrit là une erreur puisque la macro n'a pas de sens si elle commence par l'instruction "Unprotect"

    Sans cet instruction, la méthode permet bien la manipulation des colonnes mais non des ligne, bien entendu.

    Ce qui est bizarre c'est que l'instruction AllowFormattingRows = False supprime l'autorisation de manipuler les colonnes !
    Ce n'est pas dérangeant, au contraire, cela permet après une série de dérogations d'annuler simplement la dernière.
    Sauf erreur, celle-ci pourrait être : ActiveSheet.Protect AllowFormattingRows:=FalseQuelqu'un peut-il me confirmer cela ?

    D'avance, merci

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Il te faut autoriser le formatage des cellules.
    Formater des cellules d'une ligne pourra alors se faire même si formatage de colonne interdit et formater des cellules d'une colonne pourra alors se faire même si formatage de ligne non autorisé.
    Il doit être clair dans ton esprit qu'une cellule est l'intersection d'une colonne et d'une ligne. Et que seules peuvent dans ces conditions être formatées des cellules n'appartenant pas à une ligne ou à une colonne "interdites"

  3. #3
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Août 2017
    Messages : 62
    Par défaut
    Bonjour,

    Désolé Unparia, mais tu ne réponds pas à ma question que j'ai pourtant, me semble-t-il bien exprimée.

    Je ne cherche pas à autoriser le formatage d'une cellule mais à autoriser le masquage ou l'affichage d'une ligne ou d'une colonne (via VBA), ce qui n'est pas la même chose ...

    Mon message original demandait d'abord si la macro proposée par Microsoft ne contenait pas une erreur.

    Je crois que la réponse est OUI et elle s'applique aux exemples proposés dans l'aide en ligne pour TOUS les autres types de protection.
    Car j'ai trouvé depuis un autre exemple dans l'aide relative à la propriété "Protection, objet" qui commence elle par "ActiveSheet.Protect" pour bien montrer que les lignes suivantes permettent, sur une feuille protégée, d'effectuer une action initialement interdite.

    Ce que je ne comprend pas à présent, c'est 2 choses :
    1/ Pourquoi Microsoft élimine TOUTES les autres options de protection "Allow ..." aussitôt qu'on en modifie une (tant en "True" qu'en "False") ?
    2/ Pourquoi dés que l'on a exécuté une seule instruction "Protect Allow..." le mot de passe enregistré lors de la protection de la feuille n'est plus requis lorsque l'on demande à supprimer cette protection ?

    J'ai donc ainsi trouvé la réponse à ma seconde demande : pour annuler une propriété "Allow ...", il faut réecrir une instruction "Protect" avec toutes les options souhaitées.
    Ma conclusion est que si l'affichage des lignes et colonnes se fait par le code, il vaut mieux appliquer les méthodes "Unprotect" et "Protect" (avec mot de passe), même si c'est plus lourd !
    Si on doit permettre à l'utilisateur de faire la manoeuvre sans passer par le code, il faut espérer qu'il ignore comment déverrouiller une feuille (sans mot de passe), cela me semble idiot !

    Ne sachant pas si d'autres voudront me donner leur opinion sur ce sujet, je laisse la discussion ouverte ce W-E.

    PS: Si je ne me suis pas gouré dans mes élucubrations, ne devriez-vous faire pas faire part à Microsoft des erreurs et remarques dont il est question ici ?

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Tu as écrit ceci :

    Ce qui est bizarre c'est que l'instruction "AllowFormattingRows = False" supprime l'autorisation de manipuler les colonnes !
    Ce n'est pas dérangeant, au contraire, cela permet après une série de dérogations d'annuler simplement la dernière.
    Sauf erreur, celle-ci pourrait être : "ActiveSheet.Protect AllowFormattingRows:=False"
    je t'ai répondu cela :
    Il doit être clair dans ton esprit qu'une cellule est l'intersection d'une colonne et d'une ligne.
    Qui me parait clair (en tout état de cause, à moi)

    A moins que tu ne me trouves une seule cellule d'une ligne quelconque qui n'appartienne par ailleurs pas à une colonne


  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    Il me semble que Microsoft a écrit là une erreur puisque la macro n'a pas de sens si elle commence par l'instruction "Unprotect"
    J'ai l'impression que tu fais une confusion entre déprotéger (.UnProtect) et quels éléments sont protégés (si celle-ci est active)

    Pour info tu peux protéger tes feuilles par macro avec en paramètre UserInterfaceOnly=True.
    Seul l'utilisateur sera bloqué, toutes tes macros passeront, même si la feuille reste protégée.
    eric

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour eriiic
    Et merci car grâce à toi je vois enfin ce que voulait dire en fait Benevole V1

    A Benevole V1 : l'aide interne VBA précise le rôle de chaque chose :
    - d'une part le verrouillage
    - d'autre part la protection
    et expose de manière claire que le verrouillage n'est effectif que lorsque la protection l'est de son côté

    Le code que tu montres :
    1) enlève la protection (on ne saurait redéfinir des verrous sans bien évidemment ôter la protection éventuellement présente)
    2) redéfinit un verrou.

    Cette redéfinition ne saurait être effective tant que la protection n'est pas remise

  7. #7
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Août 2017
    Messages : 62
    Par défaut
    Merci à unparia et erilic pour leurs réponses mais c'est Erilic qui m'apporte la vraie-belle-solution à mon problème.
    J'avais bien lu plus d'une fois cette expression "interface utilisateur" sans en comprendre la signification car si certains cours ou fichiers d'aide y font allusion, aucun de ceux que j'ai consulté n'en donne une quelconque définition !

    Aussitôt lue la réponse d'Erilic, j'ai contrôlé que le paramètre "UserInterfaceOnly=True" dans la l'instruction "Protect" permet bien à l'utilisateur de masquer et modifier des lignes ou colonnes via mes macros VBA, MAIS PAS en agissant directement sur la feuille de calcul. C'est SUPER !

    Pour le reste, j'ai aussi compris qu'appliquer SUR UNE FEUILLE PROTEGEE l'instruction "ActiveSheet.Protect AllowFormattingColumns:=True" revient à annuler complètement la protection précédente ainsi que toutes ses options et le mot de passe qui y était attaché puisqu'il n'en est pas question dans cette dernière instruction.

    Merci à vous 2, grâce à vous je vais bien dormir cette nuit !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/01/2017, 19h39
  2. [XL-2010] Conseil méthode VBA
    Par tbuhagiar dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 10/10/2013, 10h02
  3. [VBA-E]La méthode 'Range' de l'objet '_Global' a échoué
    Par repié dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/02/2006, 16h00
  4. [VBA-E]Erreur sur méthode de classeur
    Par vanima dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 20/02/2006, 12h32
  5. Réponses: 4
    Dernier message: 20/01/2006, 15h53

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