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 :

Code sur le classeur [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 300
    Par défaut Code sur le classeur
    Bonsoir,

    Est-il possible avec ce code de déverrouiller une feuille puis la verrouiller de nouveau à la fin de la procédure ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_Open()
    Application.OnKey "{F12}", "ThisWorkbook.Heure"
    End Sub

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Heure()
    'Je voudrais ici déverrouiller ma feuille 
    ActiveCell.Value = Format(Time, "hh:mm")
    'Puis la protéger de nouveau
    End Sub
    Merci d'avance

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Bonsoir,

    Je vois principalement 2 solutions :

    1) Protection / Dé-protection à chaque accès
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Workbook_Open()
        Application.OnKey "{F12}", "ThisWorkbook.Heure"
    End Sub
     
    Sub Heure()
        ActiveSheet.Unprotect
        ActiveCell.Value = Format(Time, "hh:mm")
        ActiveSheet.Protect
    End Sub

    2) Protection contre les modifications de l'utilisateur uniquement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Workbook_Open()
        Application.OnKey "{F12}", "ThisWorkbook.Heure"
        Worksheets("La Feuille concernée").Protect UserInterfaceOnly:=True
    End Sub
     
    Sub Heure()
        ActiveCell.Value = Format(Time, "hh:mm")
    End Sub

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 300
    Par défaut
    Merci, pour affiner j'aurais voulu avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.Locked = False
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.Locked = True
    interdire l’accès à la cellule "marquée", j'ai fais des essais mais sans résultat positif.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Heure()
    ActiveSheet.Unprotect "ab"
    ActiveCell.Locked = False
        ActiveCell.Value = Format(Time, "hh:mm")
        ActiveSheet.Protect "ab"
        ActiveCell.Locked = True
    End Sub
    Je dois passer à coté de quelque chose.

    Merci encore.

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Re.

    ActiveCell.Locked = True marque la cellule comme étant à verrouiller lorsque la protection de la feuille est active

    Donc :
    - tant que la feuille n'est pas protégée, le verrouillage n'a pas d'effet.
    - Une fois que la feuille est protégée, on ne peut plus définir si elle est verrouillée ou non.

    Quel est le problème avec ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Heure()
       ActiveSheet.Unprotect "ab"
       'inutile :  ActiveCell.Locked = False
       ActiveCell.Value = Format(Time, "hh:mm")
       ActiveSheet.Protect "ab"
       'inutile : ActiveCell.Locked = True
    End Sub
    Si je n'ai pas compris pourquoi la solution suivante ne convient pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Workbook_Open()
        Application.OnKey "{F12}", "ThisWorkbook.Heure"
        Worksheets("La Feuille concernée").Protect UserInterfaceOnly:=True
    End Sub
     
    Sub Heure()
        ActiveCell.Value = Format(Time, "hh:mm")
    End Sub

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 300
    Par défaut
    J'ai dis une bêtise, je pensé que interdire l’accès à une seule cellule était possible mais en fait c'est pour la feuille entière.

    Format protection coche sur "sélectionner les cellules verrouillées"

    Je voulais en fait bloquer une fois que l'heure était marquée, mais elle l'ai quand même par la protection simple.

    Bonne soirée.

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Je voulais en fait bloquer une fois que l'heure était marquée
    Je comprends mieux.
    Pour ce besoin, le plus simple est peut être d'ajouter un contrôle Etiquette (du type Formulaire ou ActiveX, depuis le Ruban Développeur).
    De cette manière l'heure sera affichée par dessus une cellule (dans ce contôle Etiquette) et non modifiable simplement par l'utilisateur.

    Bonne soirée également.

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

Discussions similaires

  1. Répétition d'un code sur plusieurs classeurs différents
    Par Lily31 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 21/05/2015, 15h20
  2. VBA-E comment exécuter un code sur un classeur complet?
    Par djulegnome dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 13/06/2006, 12h29
  3. [excel] même code sur plusieurs feuilles
    Par sabotage dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/11/2005, 12h23
  4. Comment ecrire du code sur plusieurs lignes?
    Par tooneygirl dans le forum Access
    Réponses: 5
    Dernier message: 15/06/2005, 16h03
  5. Conseils code sur diagonalisation de matrice et autre
    Par Math75 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 23/02/2005, 14h12

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