Code verrouillage cellules sous excel
Résolu/Fermé
BOGI35
-
5 oct. 2010 à 21:22
BOGI35 Messages postés 1 Date d'inscription lundi 11 octobre 2010 Statut Membre Dernière intervention 11 octobre 2010 - 11 oct. 2010 à 20:13
BOGI35 Messages postés 1 Date d'inscription lundi 11 octobre 2010 Statut Membre Dernière intervention 11 octobre 2010 - 11 oct. 2010 à 20:13
A voir également:
- Code verrouillage cellules sous excel
- Liste déroulante excel - Guide
- Excel additionner des cellules - Guide
- Code de verrouillage oublié - Guide
- Formule excel - Guide
- Verrouiller cellules excel - Guide
5 réponses
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 775
7 oct. 2010 à 22:59
7 oct. 2010 à 22:59
Bonsoir,
Sans avoir un exemple de ton fichier il n'est pas possible de comprendre ce que cette macro doit réaliser !
Par contre elle présente une anomalie : Range("BJ7").Select ou selon le cas Range("AH7").Select provoquent l'évènement Worksheet_SelectionChange et donc le MsgBox suivant ne s'exécute pas !
Il faut désactiver les évènement pendant l'exécution :
Cependant je ne comprend pas le but recherché :
- Dans l'énoncé du problème tu parle de « interdire toute saisie à partir d'une date indiquée dans une cellule » et dans la macro tu fait référence à deux cellules contenant des dates.
- En outre, je ne voit pas « ce qui interdit l'utilisation d'un code comme celui qui suit »
D'autre part ta macro est peu lisible :
- Elle n'est pas indentée ;
- Il est plus lisible d'utiliser soit que des Cells, soit que des Range , dans ce cas :
. - Cells(7, 62) est plus parlant que Range("BJ7") et,
. - Cells(7, 34) est plus parlant que Range("AH7") ;
- Les colonnes comprises entre 2 et 34 sont aussi comprises entre 2 et 62, il serait donc souhaitable d'inverser le IF et le ELSEIF.
Ce n'est pas indispensable, mais cela permet simplement une lecture plus facile par des personnes extérieures au projet.
Cordialement
Sans avoir un exemple de ton fichier il n'est pas possible de comprendre ce que cette macro doit réaliser !
Par contre elle présente une anomalie : Range("BJ7").Select ou selon le cas Range("AH7").Select provoquent l'évènement Worksheet_SelectionChange et donc le MsgBox suivant ne s'exécute pas !
Il faut désactiver les évènement pendant l'exécution :
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim colom As Integer Application.EnableEvents = False colom = Selection.Column If 2 < colom And colom < 62 And Cells(2, 40) < Date Then Range("BJ7").Select MsgBox "Données déjà saisies" ElseIf 2 < colom And colom < 34 And Cells(2, 9) < Date Then Range("AH7").Select MsgBox "Données déjà saisies" End If Application.EnableEvents = True End Sub
Cependant je ne comprend pas le but recherché :
- Dans l'énoncé du problème tu parle de « interdire toute saisie à partir d'une date indiquée dans une cellule » et dans la macro tu fait référence à deux cellules contenant des dates.
- En outre, je ne voit pas « ce qui interdit l'utilisation d'un code comme celui qui suit »
D'autre part ta macro est peu lisible :
- Elle n'est pas indentée ;
- Il est plus lisible d'utiliser soit que des Cells, soit que des Range , dans ce cas :
. - Cells(7, 62) est plus parlant que Range("BJ7") et,
. - Cells(7, 34) est plus parlant que Range("AH7") ;
- Les colonnes comprises entre 2 et 34 sont aussi comprises entre 2 et 62, il serait donc souhaitable d'inverser le IF et le ELSEIF.
Ce n'est pas indispensable, mais cela permet simplement une lecture plus facile par des personnes extérieures au projet.
Cordialement
Bonjour Patrice 33740,
Permets moi tout d'avoir de t'adresser mes remerciements pour l'intérêt que tu as bien voulu porter à ma question, effectivement pas trop claire!!! A vrai dire, je ne maîtrise pas excel (et bien entendu encore moins Visual Basic). Je tente de créer des fichiers à partir de ce que je peux lire dans les forums. Mon interprétation et la traduction des codes que je fais ne sont pas forcément appropriées (tu as sans doute pu le remarquer). Je compte mettre à profit mon futur temps libre (j'ai encore cette chance d'avoir bien vieilli) pour me perfectionner.
Ceci étant pour tenter une explication plus clair. Mon tableau est constitué de 2 onglets (1er semestre, 2ème semestre) dans lequel chaque mois est décrit (colonne pour les jours, lignes pour les noms des utilisateurs). Afin de simplifier son utilisation, j'ai créé des macros pour afficher les cellules du mois recherché (quelque chose de très simple, masque les colonnes des autres mois pour n'afficher que celui recherché). Chaque utilisateur renseigne son emploi du temps (prévisionnel ou réalisé) comme il le souhaite, cependant il n'est plus autoriser à y apporter de modification après une date donnée (exemple: Pour le mois de janvier, les cellules relatives à celui ci (C7:AG50) doivent être verrouillées pour interdire toute saisie après la date précisée en J2 (05/02/2011), pour le mois de février la date est en AO2, les cellules (AH7:BI100) devant être verrouillées à partir de cette date...et ainsi de suite pour chaque mois. Le souci que j'avais avec mon code: les macros pour appeler les mois ne fonctionnaient plus (logique puisque des colonnes étaient bloquées).
A défaut de suggestion, j'ai cherché une autre solution, en partant du principe que l'administrateur du fichier pouvait verrouiller lui même les cellules le jour venu. Ainsi, j'ai modifié le fichier (les références de cellules ont également changées par rapport à mon mail initial) et créé un code qui verrouille les cellules définies à partir d'un doubleclic sur la cellule dans laquelle la date est précisée. (Ne te moque pas !!!)
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Application.Intersect(Range("J2"), Target) Is Nothing Then
Sheets("1er semestre").Range("C7:AG100").Select
Selection.Locked = True
Selection.FormulaHidden = False
MsgBox "Les données du mois de Janvier sont désormais verrouillées"
ActiveSheet.Protect mdp
ActiveSheet.EnableSelection = xlUnlockedCells
End If........................................
Bien entendu, seul cet administrateur est autorisé à le faire (protection par MdP).
Ainsi, les macros qui "appellent" les mois ne sont pas affectées et autre avantage, l'administrateur peut éventuellement modifier la date et déverrouiller les cellules en cas de besoin.
Voilà Patrice 33740. Par cette astuce, j'ai résolu mon problême
Je te remercie à nouveau pour ta disponibilité. Je vais continuer mon apprentissage et sans doute le compléter par une formation.
BOGI35
Permets moi tout d'avoir de t'adresser mes remerciements pour l'intérêt que tu as bien voulu porter à ma question, effectivement pas trop claire!!! A vrai dire, je ne maîtrise pas excel (et bien entendu encore moins Visual Basic). Je tente de créer des fichiers à partir de ce que je peux lire dans les forums. Mon interprétation et la traduction des codes que je fais ne sont pas forcément appropriées (tu as sans doute pu le remarquer). Je compte mettre à profit mon futur temps libre (j'ai encore cette chance d'avoir bien vieilli) pour me perfectionner.
Ceci étant pour tenter une explication plus clair. Mon tableau est constitué de 2 onglets (1er semestre, 2ème semestre) dans lequel chaque mois est décrit (colonne pour les jours, lignes pour les noms des utilisateurs). Afin de simplifier son utilisation, j'ai créé des macros pour afficher les cellules du mois recherché (quelque chose de très simple, masque les colonnes des autres mois pour n'afficher que celui recherché). Chaque utilisateur renseigne son emploi du temps (prévisionnel ou réalisé) comme il le souhaite, cependant il n'est plus autoriser à y apporter de modification après une date donnée (exemple: Pour le mois de janvier, les cellules relatives à celui ci (C7:AG50) doivent être verrouillées pour interdire toute saisie après la date précisée en J2 (05/02/2011), pour le mois de février la date est en AO2, les cellules (AH7:BI100) devant être verrouillées à partir de cette date...et ainsi de suite pour chaque mois. Le souci que j'avais avec mon code: les macros pour appeler les mois ne fonctionnaient plus (logique puisque des colonnes étaient bloquées).
A défaut de suggestion, j'ai cherché une autre solution, en partant du principe que l'administrateur du fichier pouvait verrouiller lui même les cellules le jour venu. Ainsi, j'ai modifié le fichier (les références de cellules ont également changées par rapport à mon mail initial) et créé un code qui verrouille les cellules définies à partir d'un doubleclic sur la cellule dans laquelle la date est précisée. (Ne te moque pas !!!)
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Application.Intersect(Range("J2"), Target) Is Nothing Then
Sheets("1er semestre").Range("C7:AG100").Select
Selection.Locked = True
Selection.FormulaHidden = False
MsgBox "Les données du mois de Janvier sont désormais verrouillées"
ActiveSheet.Protect mdp
ActiveSheet.EnableSelection = xlUnlockedCells
End If........................................
Bien entendu, seul cet administrateur est autorisé à le faire (protection par MdP).
Ainsi, les macros qui "appellent" les mois ne sont pas affectées et autre avantage, l'administrateur peut éventuellement modifier la date et déverrouiller les cellules en cas de besoin.
Voilà Patrice 33740. Par cette astuce, j'ai résolu mon problême
Je te remercie à nouveau pour ta disponibilité. Je vais continuer mon apprentissage et sans doute le compléter par une formation.
BOGI35
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 775
10 oct. 2010 à 16:39
10 oct. 2010 à 16:39
Bon courage
Au plaisir de te retrouver sur ce forum
Patrice
Au plaisir de te retrouver sur ce forum
Patrice
Merci Patrice,
Sans doute aurai je encore l'occasion de revenir sur ce forum.
Dernière petite question.
Comment fait on pour ajouter le statut "Résolu"
Bonne soirée
BOGI35
Sans doute aurai je encore l'occasion de revenir sur ce forum.
Dernière petite question.
Comment fait on pour ajouter le statut "Résolu"
Bonne soirée
BOGI35
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 775
10 oct. 2010 à 23:24
10 oct. 2010 à 23:24
Bonsoir,
Pour pouvoir passer en Résolu tu dois t'inscrire sur CCM, ça prend 1 minute.
Pour pouvoir passer en Résolu tu dois t'inscrire sur CCM, ça prend 1 minute.
Mike-31
Messages postés
18309
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
14 mars 2024
5 071
11 oct. 2010 à 09:39
11 oct. 2010 à 09:39
Salut,
Pour passer ton statut en résolu, soit tu es membre comme le précise Patrice, ou tu le demande sur un post pour qu'on le fasse pour toi. Mais le plus simple est de t'inscrire comme membre, c'est rapide, gratuit et t'ouvre des possibilités comme les messages privés etc ...
Pour cette fois je passe ton statut en résolu
Pour passer ton statut en résolu, soit tu es membre comme le précise Patrice, ou tu le demande sur un post pour qu'on le fasse pour toi. Mais le plus simple est de t'inscrire comme membre, c'est rapide, gratuit et t'ouvre des possibilités comme les messages privés etc ...
Pour cette fois je passe ton statut en résolu
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
BOGI35
Messages postés
1
Date d'inscription
lundi 11 octobre 2010
Statut
Membre
Dernière intervention
11 octobre 2010
11 oct. 2010 à 20:13
11 oct. 2010 à 20:13
Bonsoir Patrice 33740 et Mike-31
Remerciements pour vos réponses et intervention.
Suivant vos recommandations je suis désormais membre de CCM.
Bonne soirée,
Cordialement
BOGI35
Remerciements pour vos réponses et intervention.
Suivant vos recommandations je suis désormais membre de CCM.
Bonne soirée,
Cordialement
BOGI35