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 du classeur et VBA [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    artisan
    Inscrit en
    Février 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : artisan

    Informations forums :
    Inscription : Février 2020
    Messages : 8
    Points : 8
    Points
    8
    Par défaut Protection du classeur et VBA
    Bonjour à toutes et à tous,

    Je crée en ce moment un classeur Excel pour une association, qui permettra d'enregistrer les coordonnées des adhérents et de suivre les encaissements des adhésions.

    Je bloque sur un problème qui me parait pourtant tout simple. Nous serons plusieurs à intervenir sur le classeur, je veux donc protéger la plupart des cellules sauf celles où on rentrera des données, pour éviter toute fausse manip.

    J'ai bien pu mettre le verrouillage avec un mot de passe, mais c'est la catastrophe une fois que je veux faire intervenir mes macros. J'ai pourtant étudié le sujet via divers sites, ça parait facile: déverrouiller la feuille en début de macro, et la verrouiller à nouveau à la fin.

    Voici mon code, qui s'exécute à l'activation de la feuille

    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
    Private Sub Worksheet_Activate()
     
    ActiveSheet.Unprotect Password:="ABCD"
     
    'calcul des sommes a l'ouverture de la feuille
    For mois = 0 To 11
        Cells(4, 2 + mois).Value = Application.Sum(Range(Cells(102 + (40 * (Cells(1, 2).Value - 2020)), 2 + 4 * mois), (Cells(132 + (40 * (Cells(1, 2).Value - 2020)), 2 + 4 * mois))))
        Cells(5, 2 + mois).Value = Application.Sum(Range(Cells(102 + (40 * (Cells(1, 2).Value - 2020)), 3 + 4 * mois), (Cells(132 + (40 * (Cells(1, 2).Value - 2020)), 3 + 4 * mois))))
        Cells(6, 2 + mois).Value = Application.Sum(Range(Cells(102 + (40 * (Cells(1, 2).Value - 2020)), 4 + 4 * mois), (Cells(132 + (40 * (Cells(1, 2).Value - 2020)), 4 + 4 * mois))))
        Cells(7, 2 + mois).Value = Application.Sum(Range(Cells(102 + (40 * (Cells(1, 2).Value - 2020)), 5 + 4 * mois), (Cells(132 + (40 * (Cells(1, 2).Value - 2020)), 5 + 4 * mois))))
    Next mois
     
    ActiveSheet.Protect Password:="ABCD"
     
    End Sub
    A savoir que mes formules ligne 7 à 10 sont justes (même si probablement pas optimisées, mais là n'est pas le problème actuellement) et fonctionnent très bien tant qu'il n'y a pas le souci de protection de feuille. Rien dans cette macro ne fait intervenir une autre feuille qui aurait pu rester protégée.

    Quand la macro s'exécute, Excel se freeze comme s'il était bloqué dans une boucle mais je ne peux même pas arrêter l'exécution avec alt+f11, je suis obligé de forcer Excel à se fermer.

    Cette histoire de protection parait tellement simple, je ne vois vraiment pas ce que je fais mal.

    Si quelqu'un a une idée, elle serait la bienvenue
    En vous remerciant par avance

    PS: j'ai testé plusieurs variantes du verrouillage/déverrouillage comme Sheets("nom").UnProtect [...], pour le même résultat.

  2. #2
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 791
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 791
    Points : 3 058
    Points
    3 058
    Par défaut
    Bonjour

    Tu as une propriété UserInterfaceOnly (voir https://docs.microsoft.com/en-us/off...ksheet.protect) quand tu appelles la méthode protect. Du coup, si tu fais ainsi, toutes modifications apportées en VBA n'aura pas de protection mais juste lorsque quelqu'un tentera de modifier les sheets manuellement, depuis l'interface.

    Est-ce que cela résoudrait ton souci ?

  3. #3
    Futur Membre du Club
    Femme Profil pro
    artisan
    Inscrit en
    Février 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : artisan

    Informations forums :
    Inscription : Février 2020
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Ah en effet c'est une très bonne solution !
    Et j'ai aussi pu trouver pourquoi mes tests ne fonctionnaient pas... A force de faire des tests dans tous les sens jusqu'à en devenir à moitié fou

    En fait je protège la feuille en mode impossible de sélectionner les cellules verrouillées, ce qui fait qu'automatiquement, excel sélectionnait la cellule B2 (la cellule déverrouillée la plus proche du début du tableau, j'imagine), ce qui lançait automatiquement une autre macro qui elle faisait planter le reste.

    Donc au final le code tel quel marche bien, mais ta solution est bien meilleure, donc j'y ai gagné un grand + au final.

    Qu'est ce qu'on peut se prendre la tête sur des trucs tout bêtes, parfois..

    Merci de ton aide

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

Discussions similaires

  1. [XL-2003] Ouvrir classeur excel protection multi utilisateur par Vba
    Par jean30 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/10/2018, 12h44
  2. ajouter/suprimer des données dans un classeur en VBA
    Par kamGE dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/08/2007, 18h58
  3. automatisé un classeur en VBA
    Par tarik847 dans le forum Excel
    Réponses: 1
    Dernier message: 02/08/2007, 13h54
  4. Enregistrement d'un modèle avec VBA et lancement du classeur sans VBA
    Par sat478 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/07/2007, 12h54
  5. Fermer un classeur via VBA que si il est ouvert
    Par dimitrios dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/12/2006, 09h56

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