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 :

Comment protéger un workbook dynamique qui contient un "filldown" dans la macro ?


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 8
    Points : 2
    Points
    2
    Par défaut Comment protéger un workbook dynamique qui contient un "filldown" dans la macro ?
    Bonjour,

    Je me permets de poster de solliciter une aide pour un problème de macro excel dans l'analyzer.

    En effet, mon workbook contient plusieurs onglets (chaque onglet comporte une tache) qui disposent chacun différentes requêtes qui sont identiques (sauf au niveau du filtre). Ces requêtes contiennent des colonnes avec des formules. En fait, la feuille doit être protégée afin qu'elle ne puisse pas etre saisissable sauf sur 3 colonnes (jai fait outils> protection> permettre aux utilisateurs de modifier les plages). Par ailleurs, certaines colonnes contiennent une formule dedans.

    Sachant que je n'y arrive pas à faire un classeur "dynamique" avec la macro (unprotected puis protected à la fin), donc j'ai essayé de faire "manuellement" (outils> protection> protéger la feuille). J'utilise un Selection.FillDown pour étendre la formule, mais voici le message d'erreur que j'obtiens : "la cellule ou le graphique est protégé en lecture seule"

    Exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If i = 31 Then
    Cells(i, 14) = "=RC[+5]-RC[-1]"
    End if
    rang = "N31:N" & i
    Range(rang).Select
    Selection.FillDown '<-- le probleme se situe ici
    Par conséquent, comment protéger un classeur qui contient des formules (afin que les utilisateurs ne saisissent pas dedans) mais qui doit etre également dynamique si l'on change de variable (les utilisateurs peuvent saisir dans certaines colonnes et il y aura un calcul dans d'autres colonnes) ??

    Merci d'avance pour la réponse

  2. #2
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Sachant que je n'y arrive pas à faire un classeur "dynamique" avec la macro (unprotected puis protected à la fin),
    Tu n'arrive pas pourquoi?
    essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    If i = 31 Then
    Cells(i, 14) = "=RC[+5]-RC[-1]"
    End if
    rang = "N31:N" & i
    feuil1.unprotect 'si tu es sur la feuil1
    Range(rang).FillDown ' au passage j'enlève le select
    feuil1.protect
    « Il n'y a pas de recette miracle qui permet aux gens d’écrire des programmes corrects sans avoir à réfléchir. Il faut apprendre aux gens comment réfléchir »

  3. #3
    Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Merci pour ta réponse !

    Oui, je parle de classeur "dynamique" car les données de mon classeur sont restitués dynamiquement en fonction du périmètre choisi par l'utilisateur. En fait, il s'agit de l'analyzer qui utilise excel mais qui est un produit de chez SAP

  4. #4
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Oui, je parle de classeur "dynamique" car les données de mon classeur sont restitués dynamiquement en fonction du périmètre choisi par l'utilisateur. En fait, il s'agit de l'analyzer qui utilise excel mais qui est un produit de chez SAP

    A rien compris
    Revenons au bases, Ca marche mon code?

    C'est le coté dynamique qui ne marche pas ou le coté unprotect/protect?
    Dans le premier cas je risque de ne pas pouvoir t'aider si tu ne trouve pas un moyen de vulgariser ton explication pour un pauvre mathématicien/mécanicien comme moi
    « Il n'y a pas de recette miracle qui permet aux gens d’écrire des programmes corrects sans avoir à réfléchir. Il faut apprendre aux gens comment réfléchir »

  5. #5
    Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Merci pour ton retour !

    Donc, oui ton code marche très bien mais en revanche, je ne veux pas que cela me protège toute ma feuille pour chaque calcul étiré jusqu'à la fin du tableau

    En fait, je voudrais que mon classeur soit protégé. J'ai l'impression que la macro ne s'exécute pas bien car justement parce que le classeur est protégé ! Il y a des calculs d'où l'erreur au niveau du 'filldown'.

    Voici le bout de code qui pose soucis :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
       If i = 31 Then
            'Calcul Colonne N
            Cells(i, 14) = "=RC[+5]-RC[-1]"
            'Calcul Colonne O
            Cells(i, 15) = "=RC[-4]+RC[-3]+RC[-1]"
            'Calcul Colonne S
            Cells(i, 19) = "=RC[-3]+RC[-2]+RC[-1]"
            'Calcul Colonne T
            Cells(i, 20) = "=RC[-1]-RC[-5]"
        End If
     
        'Colonne N
        rang = "N31:N" & i
        Range(rang).Select
        Selection.FillDown
     
        'Colonne O
        rang = "O31:O" & i
        Range(rang).Select
        Selection.FillDown
     
        'Colonne S
        rang = "S31:S" & i
        Range(rang).Select
        Selection.FillDown
     
        'Colonne T
        rang = "T31:T" & i
        'Range(rang).Select
        Selection.FillDown
    Je ne sais pas si je suis clair

  6. #6
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    dans ce cas commence ta macro par
    feuil1.unprotect

    et juste avant le end sub
    feuil1.protect

    Si ta feuil est protégé il faut la déprotéger pour modifier le contenu d'une cellule (par pour le lire)
    Tu peux aussi autoriser la modification de certaine cellule même avec un classeur protégé
    (format de cellules; onglet protect décocher vérouiller)

    remarque j'ai eu se problème j'utilisais le worksheet change et cela protégeai ma feuil au milieu d'un macro. Donc assure toi que rien ne vienne remettre la protection "en cours de route"

    Edit : je crois que je ne suis pas très clair sur ce coup désolé la journée est longue
    « Il n'y a pas de recette miracle qui permet aux gens d’écrire des programmes corrects sans avoir à réfléchir. Il faut apprendre aux gens comment réfléchir »

  7. #7
    Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    T'en fait pas, je pense savoir ce que tu veux dire

    J'ai fait cela egalement (j'ai trouvé cette idée dans des forums..) mais le soucis c'est que lorsque l'on déverrouille/verrouille par le format de cellule, les users n'ont pas le droit d'y toucher, cela me renvoye au probleme comme quoi comme la colonne est verrouillée, elle ne peut pas marcher d'où la popup " : 'la cellule ou le graphique est protéger et en lecture seule. Otez la protection avec la commande ôter la protection de la feuille' -> si je comprends bien, comme la colonne est verouillée, le calcul ne peut pas se faire pour lui.

    C'est un vrai casse tête mon soucis.. cela fait des jours et des jours où je suis dessus et que je tourne en rond

  8. #8
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Le verouillé cellule (dans format cellule) n'est "actif" que quand la feuil est vérouillé il signifie que l'utilisateur ou les macro ne peuvent modifier le contenu, pour le faire il faut dérouiller la feuille (feuil1.unprotect) pour pouvoir les modifier.
    Par contre si pour une colonne tu le décoche le verouillé dans format cellule même en verrouillant la feuille l'utilisateur pourra modifier les cellules. Normalement c'est suffisamment souple il suffit d'être un tout petit peu rigoureux (même moi je m'en sort et pourtant c''est pas mon fort )

    Après si une macro veux modifier une cellule protégé le calcul sarrete a mmoins de faire de la gestion d'erreur
    « Il n'y a pas de recette miracle qui permet aux gens d’écrire des programmes corrects sans avoir à réfléchir. Il faut apprendre aux gens comment réfléchir »

  9. #9
    Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Heu..zé pas très bien compris

    J'ai fait pourtant un Déverrouillage de la feuille
    For Each Feuille In Sheets
    Feuille.Unprotect Password:=""
    [code]
    puis un Verrouillage de la feuille
    Feuille.Protect Password:=""
    Feuille.EnableCalculation = True
    Next

    avec un format de cellule où je décochais verrouillage.

    C'est pas ça ??

  10. #10
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    si tu dévérouille ta feuille tu n'as pas besoin de dévérouiller tes cellules. Par contre au moments au ta macro plante ta feuille est vérouillé ou non?
    « Il n'y a pas de recette miracle qui permet aux gens d’écrire des programmes corrects sans avoir à réfléchir. Il faut apprendre aux gens comment réfléchir »

  11. #11
    Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Mon cerveau est un peu lent en fin de journée et il n'est pas du matin non plus..

    Donc en fait, si j'ai bien compris ton explication, si je déverouille ma feuille, je n'ai pas besoin de déverrouiller les cellules et vice versa, c'est bien ça ?

  12. #12
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Oui enfin je croi
    Le vérouillage de cellule ne sert que si la feuil est vérouillé.
    Par contre si tu déverrouille la cellule même si la feuille est vérouillé ca marche

    (le mieu est encore de faire des test "a la main" pour comprendre)
    Rq : sur 2003 la barre d'outil protection permet d'avaoir toutes les info a porté de main
    « Il n'y a pas de recette miracle qui permet aux gens d’écrire des programmes corrects sans avoir à réfléchir. Il faut apprendre aux gens comment réfléchir »

Discussions similaires

  1. Comment utiliser un fichier .java qui contient un package
    Par mobi_bil dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 01/03/2009, 13h30
  2. Réponses: 9
    Dernier message: 24/06/2008, 09h45
  3. Réponses: 8
    Dernier message: 02/05/2008, 10h33
  4. Réponses: 2
    Dernier message: 20/01/2007, 11h19

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