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éprotection de feuille dans un classeur partagé


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Responsable Commercial
    Inscrit en
    Mars 2014
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Responsable Commercial
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 51
    Points : 30
    Points
    30
    Par défaut Protection / Déprotection de feuille dans un classeur partagé
    Bonjour à la communauté.

    Dans un fichier partagé (car utilisé par plusieurs utilisateurs) avec la feuille principale protégée (sauf certaines plages de saisies qui sont donc déprotégées), je souhaite colorer en vert le texte des cellules saisies par les utilisateurs.
    J'ai utilisé la méthode Unprotect et Protect sur la feuille active pour contourner le problème du classeur partagé.

    J'ai tout de même un problème dû au partage du classeur (ma macro fonctionne impeccablement quand le classeur n'est pas partagé). Le message d'erreur suivant apparaît :
    " La méthode unprotect de la classe Worksheet a échoué"...
    Malgré mes recherches sur le forum, je n'ai pas trouvé de solution : quelqu'un peut-il m'aider à solutionner ce problème? Merci par avance.

    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
    17
     
    Option Compare Text
    Option Explicit
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    ActiveSheet.Unprotect ("azerty")
     
    If Not Application.Intersect(Target, Range("AA8:AC2728")) Is Nothing Then Target.Font.ColorIndex = 10
    If Not Application.Intersect(Target, Range("AN8:AO2728")) Is Nothing Then Target.Font.ColorIndex = 10
    If Not Application.Intersect(Target, Range("AQ8:AQ2728")) Is Nothing Then Target.Font.ColorIndex = 10
    If Not Application.Intersect(Target, Range("AV8:AW2728")) Is Nothing Then Target.Font.ColorIndex = 10
    If Not Application.Intersect(Target, Range("BA8:BA2728")) Is Nothing Then Target.Font.ColorIndex = 10
     
    ActiveSheet.Protect ("azerty")
     
    End Sub

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Je ne m'y connaît pas trop en partage de classeur, mais, sauf horreur de ma part, un seul utilisateur (le premier qui l'a ouvert) peut le modifier. Je suppose que si tu n'est pas le privilégié, c'est tout à fait normal.

    Excel n'est pas capable de gérer les "conflits" et les "télescopages" quand deux utilisateurs essaient de modifier la même cellule en même temps. La façon de protéger les utilisateurs contre eux-mêmes est de ne pas permettre les modifications ou enregistrements simultanés, sauf dans le cas d'enregistrement sous deux noms différents.


    quelqu'un peut-il m'aider à solutionner ce problème? Merci par avance
    Utiliser un outil qui peut gérer les modifications simultanées et arrêter de vouloir enfoncer des vis avec un marteau, si on peut dire.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Responsable Commercial
    Inscrit en
    Mars 2014
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Responsable Commercial
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 51
    Points : 30
    Points
    30
    Par défaut
    Bonjour Clément.

    Merci pour ta réponse.

    Je confirme qu'en utilisant un classeur partagé, tous les utilisateurs peuvent l'utiliser simultanément, et enregistrer leurs modifications respectives sans difficultés.
    Le conflit arrive lorsque, dans un classeur partagé, on souhaite protéger certaines cellules.
    L'événement Worksheet_Change est alors capricieux : c'est pourquoi j'ai essayé de déprotéger ma feuille (unprotect) pour la reprotéger (protect) après la saisie, mais cela ne fonctionne toujours pas.

    Quelqu'un a t-il une piste SVP?

    Merci par avance.

  4. #4
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Bonjour, bonjour !

    Il ne s'agit pas d'un problème de protection de feuilles de calculs mais du fait du classeur partagé !
    Et c'est pourtant simple à vérifier : si tout fonctionne avec le classeur non partagé
    alors ce n'est pas possible quand le classeur est partagé …

    Base de données, multi-utilisateurs, réseau, sécurité, … ne riment pas toujours bien avec Excel !
    Voir du côté des add_ins payants pour surseoir aux diverses lacunes
    mais franchement, autant envisager une application sous Access …

    ______________________________________________________________________________________________________
    Je suis Paris, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  5. #5
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Bonjour,

    Pour ne pas devoir déprotéger dans le code, une possibilité:
    Lancer une fois cette procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub RunOnce()
      ThisWorkbook.Sheets(1).Protect "azerty", userinterfaceonly:=True
    End Sub
    Qui empêchera les modifications par les utilisateurs mais permettra au code de s'exécuter sans déprotection.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Responsable Commercial
    Inscrit en
    Mars 2014
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Responsable Commercial
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 51
    Points : 30
    Points
    30
    Par défaut
    Merci AlainTech,

    J'ai testé votre code. Pour cela, j'ai dû enlever le partage du classeur, puis j'ai fait rouler la macro, pour ensuite remettre le partage du classeur, et Euréka, ça marche!
    Cependant, lorsque j'enregistre le classeur, que je le ferme et que je l'ouvre à nouveau, j'ai à nouveau le même problème.
    J'ai pensé que je pourrais faire rouler votre macro à l'ouverture du classeur, mais comme il est partagé, la macro ne pourra s'exécuter...
    Je ne sais pas bien comment solutionner ce problème...

    Cordialement.

  7. #7
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Citation Envoyé par janigrel Voir le message
    Je ne sais pas bien comment solutionner ce problème...

    Cordialement.
    Ben, en n'utilisant pas de classeur partagé, ou en n'utilisant carrément pas Excel.

    Cela ne sert pas à grand chose de remplacer un boulon et son écrou par une vis à bois.

    Mais comme tu ne dis pas à quel(s) besoin(s) doit répondre ce classeur partagé que tu ne peux pas partager, difficile d'en dire plus.


    Ceci dit, si tu veux le véritable et "officiel" fond de ma pensée; ce serait probablement encore moins de trouble de télécharger Visual Studio Community (gratuit), qui comprend, entre autres, SQL Server Compact, et d'apprendre VB.net (ou même C aiguisé, si tu aimes mieux le C), et de te monter une base de données qui a de l'allure avec SQL Server Compact, ou même une plus grosse, avec SQL Server Express (gratuit). Parce que là, à mesure que tes besoins vont évoluer, tu vas devoir continuer à programmer une usine à gaz dans Excel, alors qu'avec SQL Server, ou même Access, des requêtes Linq ou SQL permettraient d'agir plus facilement et plus rapidement. Même que Visual Studio, a des assistants pour construire ta base de données, et tes requêtes, graphiquement à l'écran. (Le même principe qu'avec Access.)

    Et puis, on n'a pas encore parlé du fait que la "sécurité" d'Excel ne résiste qu'à des utilisateurs obéissants et honnêtes. De plus, Excel a toujours besoin de tout son classeur en mémoire vive pour fonctionner. Donc, plus ton classeur grossit, plus tu as de macros, plus tu as de tableaux, plus tu as de fonctions matricielles, plus tu risque le plantage d'Excel, plus tu risques les pertes de données et/ou la corruption de ton classeur.

    Mais, je me suis habitué à prêcher dans le désert. Tout le monde scotché à Excel, a toujours de bonnes raisons de continuer d'avancer dans les sables mouvants.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

Discussions similaires

  1. [Toutes versions] Macro Protection et déprotection de feuilles
    Par lenul78570 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/03/2010, 16h44
  2. Problème protection et déprotection de feuille
    Par Killik5 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/09/2007, 08h19
  3. VBA-protection classeur et feuille sous Excel 2003 et 97
    Par derf3183 dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 28/07/2006, 14h04
  4. Protection d'une feuille excel
    Par Pollux dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 11/01/2006, 12h11
  5. [VBA Excel] BackgroundQuery et protection de la feuille
    Par Worldofdada dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/01/2006, 17h02

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