OVH Cloud OVH Cloud

Protection après entrée.

4 réponses
Avatar
Patrick BASTARD
Bonsoir à tous.

J'ai besoin d'un conseil, alors bien logiquement, je m'adresse aux aimables
contributeurs (je n'ai pas dit contribuables ;-) ) bénévoles de ce forum.

Le projet :
crér un tableau permettant la saisie d'anomalies, et les différentes actions
mises en place pour les suivre.
(une ligne par anomalie).

L'utilisation :
Ce tableau sera utilisé par plusieurs personnes pouvant soit détecter une ou
des anomalies, soit corriger une ou des anomalies.Ces utilisateurs savent,
sur Excel, remplir une cellule mais pas beaucoup plus, et en tous cas ne
connaissent même pas le terme VBA.

L'objectif :
L'homme n'étant que ce qu'il est, il peut être parfois tenté de supprimer
une anomalie dont la responsabilité ou le traitement lui incombe.
Je souhaite donc qu'une fois une anomalie saisie, il soit impossible de
modifier la cellule concernée.
(procédure événementielle après validation? avec un peu de temps, de sueur
et de larmes, je devrais y arriver seul).
Idem pour une cellule contenant une action de correction.

Le hic, et là je fais appel à toutes les bonnes volontés :
il arrive fréquemment que les anomalies concernent des groupes de
références, récupérées sur une appli interne, et copiées - collées sur
plusieurs lignes.

D'où ma question :
Dans ce cas, comment capter la zone pour la protéger contre les
modifications?

Merci déjà d'avoir eu la patience de me lire,

Et d'avance merci pour vos idées, vos pistes de solution. Elles seront les
bienvenues.

Cordialement

Patrick.

4 réponses

Avatar
Frédéric Sigonneau
Bonsoir,

Un début de solution à tester :

- assure toi d'abord que l'ensemble des cellules de la feuille qui contient le
tableau de saisie est *déverrouillé*

- recopie cette procédure dans le module de code de cette même feuille :

Private Sub Worksheet_Change(ByVal Target As Range)
With Me
.Unprotect
.UsedRange.Cells.Locked = True
.Protect
End With
End Sub

FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://frederic.sigonneau.free.fr
Si votre question sur Excel est urgente, évitez ma bal !

Bonsoir à tous.

J'ai besoin d'un conseil, alors bien logiquement, je m'adresse aux aimables
contributeurs (je n'ai pas dit contribuables ;-) ) bénévoles de ce forum.

Le projet :
crér un tableau permettant la saisie d'anomalies, et les différentes actions
mises en place pour les suivre.
(une ligne par anomalie).

L'utilisation :
Ce tableau sera utilisé par plusieurs personnes pouvant soit détecter une ou
des anomalies, soit corriger une ou des anomalies.Ces utilisateurs savent,
sur Excel, remplir une cellule mais pas beaucoup plus, et en tous cas ne
connaissent même pas le terme VBA.

L'objectif :
L'homme n'étant que ce qu'il est, il peut être parfois tenté de supprimer
une anomalie dont la responsabilité ou le traitement lui incombe.
Je souhaite donc qu'une fois une anomalie saisie, il soit impossible de
modifier la cellule concernée.
(procédure événementielle après validation? avec un peu de temps, de sueur
et de larmes, je devrais y arriver seul).
Idem pour une cellule contenant une action de correction.

Le hic, et là je fais appel à toutes les bonnes volontés :
il arrive fréquemment que les anomalies concernent des groupes de
références, récupérées sur une appli interne, et copiées - collées sur
plusieurs lignes.

D'où ma question :
Dans ce cas, comment capter la zone pour la protéger contre les
modifications?

Merci déjà d'avoir eu la patience de me lire,

Et d'avance merci pour vos idées, vos pistes de solution. Elles seront les
bienvenues.

Cordialement

Patrick.




Avatar
Patrick BASTARD
Bonjour, *Frédéric*

J'ai lu ton post uhTiJA$
avec le plus grand intéret, et je te remercie de t'être penché sur mon
problème.

Le code que tu m'as conseillé fonctionne parfaitement lorsque les entrées se
font sur une même colonne, et qu'il n'y a pas de mise en forme.
J'ai cependant remarqué que si 2 ou plusieurs cellules avaient la même mise
en forme (fond par exemple), l'entrée dans l'une protégeait ses soeurs (si
j'ose m'exprimer ainsi). Je suppose que le fautif est UsedRange.

Un crochet par l'aide de VBA ne me renseigne pas beaucoup sur l'étendue de
UsedRange :
"Cette propriété renvoie un objet Range qui représente la plage utilisée
dans la feuille de calcul spécifiée."
Qu'entend-on par plage utilisée ?
Il semblerait que cette plage soit aléatoire...
Pour le tester, j'ai appliqué une couleur de fond à A1:A12, B2, B4, B6, B8,
C3, C5, C7, D4, D6 et E5.
J'ai déverrouillé toutes les cellules de la feuille, et j'ai protégé cette
feuille en ne cochant que "sélectionner les cellules déverrouillées.
Dans les opions, Modifications, j'ai coché "déplacer la sélection après
validation vers le bas.
Lors de l'entrée d'une valeur en A1, la cellule active devient
successivement :
F2, G3, H4.......jusqu'à O9, puis O10 jusqu'à O62, puis P1, Q2, R3, etc...
Lorsque je suis en A1, près avoir rempli de 1 les cellules précitées, et que
je fais Edition, Atteindre, Cellules, Zone en cours, seul A1 est
sélectionné.
UsedRange a-t-il une portée différente de son homologue français ? (ou
est-ce un faux ami ?) J'en perds mon latin.

Un début d'explication, qui me permettrait de me coucher moins idiot ce
soir, serait vraiment le bienvenu.

Merci en tous cas,

Bien cordialement,

Patrick.


Bonsoir,

Un début de solution à tester :

- assure toi d'abord que l'ensemble des cellules de la feuille qui
contient le tableau de saisie est *déverrouillé*

- recopie cette procédure dans le module de code de cette même
feuille :
Private Sub Worksheet_Change(ByVal Target As Range)
With Me
.Unprotect
.UsedRange.Cells.Locked = True
.Protect
End With
End Sub

FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://frederic.sigonneau.free.fr
Si votre question sur Excel est urgente, évitez ma bal !

Bonsoir à tous.

J'ai besoin d'un conseil, alors bien logiquement, je m'adresse aux
aimables contributeurs (je n'ai pas dit contribuables ;-) )
bénévoles de ce forum. Le projet :
crér un tableau permettant la saisie d'anomalies, et les différentes
actions mises en place pour les suivre.
(une ligne par anomalie).

L'utilisation :
Ce tableau sera utilisé par plusieurs personnes pouvant soit
détecter une ou des anomalies, soit corriger une ou des
anomalies.Ces utilisateurs savent, sur Excel, remplir une cellule
mais pas beaucoup plus, et en tous cas ne connaissent même pas le
terme VBA. L'objectif :
L'homme n'étant que ce qu'il est, il peut être parfois tenté de
supprimer une anomalie dont la responsabilité ou le traitement lui
incombe. Je souhaite donc qu'une fois une anomalie saisie, il soit
impossible
de modifier la cellule concernée.
(procédure événementielle après validation? avec un peu de temps, de
sueur et de larmes, je devrais y arriver seul).
Idem pour une cellule contenant une action de correction.

Le hic, et là je fais appel à toutes les bonnes volontés :
il arrive fréquemment que les anomalies concernent des groupes de
références, récupérées sur une appli interne, et copiées - collées
sur plusieurs lignes.

D'où ma question :
Dans ce cas, comment capter la zone pour la protéger contre les
modifications?

Merci déjà d'avoir eu la patience de me lire,

Et d'avance merci pour vos idées, vos pistes de solution. Elles
seront les bienvenues.

Cordialement

Patrick.




Avatar
Frédéric Sigonneau
Bonsoir,

A mon avis, le nombre de colonne a peu d'importance : UsedRange comprend toutes
les cellules utilisées de la feuille de calcul, toutes lignes et toutes colonnes
comprises.
Le problème de UsedRange c'est qu'Excel considère comme utilisée toute cellule
dans laquelle tu as fait à un moment quelque chose (y compris des mises en
forme) et qu'il ne suffit pas d'annuler ce quelque chose pour que la plage
considérée comme utilisée soit réajustée automatiquement. De plus, pour prendre
un exemple simple, si dans une feuille 'neuve' tu écris a en A3 et b en E13 la
plage utilisée sera A3:E13, et peu importe à Excel qu'elle soit vide en grande
partie.
Si je t'ai proposé cette approche, c'est que j'ai supposé que tes tableaux
étaient remplis comme des bases de données : ligne par ligne, les unes sous les
autres, chaque ligne allant de la colonne A à la colonne X par exemple, même si
toutes les cases de chaque ligne ne sont pas forcément renseignées.
Dans ce style de tableau, ce que je t'ai proposé pourrait, je pense, être une
solution. Si ce n'est pas le cas, désolé, je n'ai pas d'autre proposition à te
faire.

FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://frederic.sigonneau.free.fr
Si votre question sur Excel est urgente, évitez ma bal !

Bonjour, *Frédéric*

J'ai lu ton post uhTiJA$
avec le plus grand intéret, et je te remercie de t'être penché sur mon
problème.

Le code que tu m'as conseillé fonctionne parfaitement lorsque les entrées se
font sur une même colonne, et qu'il n'y a pas de mise en forme.
J'ai cependant remarqué que si 2 ou plusieurs cellules avaient la même mise
en forme (fond par exemple), l'entrée dans l'une protégeait ses soeurs (si
j'ose m'exprimer ainsi). Je suppose que le fautif est UsedRange.

Un crochet par l'aide de VBA ne me renseigne pas beaucoup sur l'étendue de
UsedRange :
"Cette propriété renvoie un objet Range qui représente la plage utilisée
dans la feuille de calcul spécifiée."
Qu'entend-on par plage utilisée ?
Il semblerait que cette plage soit aléatoire...
Pour le tester, j'ai appliqué une couleur de fond à A1:A12, B2, B4, B6, B8,
C3, C5, C7, D4, D6 et E5.
J'ai déverrouillé toutes les cellules de la feuille, et j'ai protégé cette
feuille en ne cochant que "sélectionner les cellules déverrouillées.
Dans les opions, Modifications, j'ai coché "déplacer la sélection après
validation vers le bas.
Lors de l'entrée d'une valeur en A1, la cellule active devient
successivement :
F2, G3, H4.......jusqu'à O9, puis O10 jusqu'à O62, puis P1, Q2, R3, etc...
Lorsque je suis en A1, près avoir rempli de 1 les cellules précitées, et que
je fais Edition, Atteindre, Cellules, Zone en cours, seul A1 est
sélectionné.
UsedRange a-t-il une portée différente de son homologue français ? (ou
est-ce un faux ami ?) J'en perds mon latin.

Un début d'explication, qui me permettrait de me coucher moins idiot ce
soir, serait vraiment le bienvenu.

Merci en tous cas,

Bien cordialement,

Patrick.



Bonsoir,

Un début de solution à tester :

- assure toi d'abord que l'ensemble des cellules de la feuille qui
contient le tableau de saisie est *déverrouillé*

- recopie cette procédure dans le module de code de cette même
feuille :
Private Sub Worksheet_Change(ByVal Target As Range)
With Me
.Unprotect
.UsedRange.Cells.Locked = True
.Protect
End With
End Sub

FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://frederic.sigonneau.free.fr
Si votre question sur Excel est urgente, évitez ma bal !


Bonsoir à tous.

J'ai besoin d'un conseil, alors bien logiquement, je m'adresse aux
aimables contributeurs (je n'ai pas dit contribuables ;-) )
bénévoles de ce forum. Le projet :
crér un tableau permettant la saisie d'anomalies, et les différentes
actions mises en place pour les suivre.
(une ligne par anomalie).

L'utilisation :
Ce tableau sera utilisé par plusieurs personnes pouvant soit
détecter une ou des anomalies, soit corriger une ou des
anomalies.Ces utilisateurs savent, sur Excel, remplir une cellule
mais pas beaucoup plus, et en tous cas ne connaissent même pas le
terme VBA. L'objectif :
L'homme n'étant que ce qu'il est, il peut être parfois tenté de
supprimer une anomalie dont la responsabilité ou le traitement lui
incombe. Je souhaite donc qu'une fois une anomalie saisie, il soit
impossible
de modifier la cellule concernée.
(procédure événementielle après validation? avec un peu de temps, de
sueur et de larmes, je devrais y arriver seul).
Idem pour une cellule contenant une action de correction.

Le hic, et là je fais appel à toutes les bonnes volontés :
il arrive fréquemment que les anomalies concernent des groupes de
références, récupérées sur une appli interne, et copiées - collées
sur plusieurs lignes.

D'où ma question :
Dans ce cas, comment capter la zone pour la protéger contre les
modifications?

Merci déjà d'avoir eu la patience de me lire,

Et d'avance merci pour vos idées, vos pistes de solution. Elles
seront les bienvenues.

Cordialement

Patrick.









Avatar
Patrick BASTARD
Bonsoir, Frédéric.

A mon avis, le nombre de colonne a peu d'importance : UsedRange
comprend toutes les cellules utilisées de la feuille de calcul,
toutes lignes et toutes colonnes comprises.
Le problème de UsedRange c'est qu'Excel considère comme utilisée
toute cellule dans laquelle tu as fait à un moment quelque chose (y
compris des mises en forme) et qu'il ne suffit pas d'annuler ce
quelque chose pour que la plage considérée comme utilisée soit
réajustée automatiquement.


Peut-être avec le classeur de nettoyage sur le site de misange ?

Si je t'ai proposé cette approche, c'est que j'ai supposé que tes
tableaux étaient remplis comme des bases de données : ligne par
ligne, les unes sous les autres, chaque ligne allant de la colonne A
à la colonne X par exemple, même si toutes les cases de chaque ligne
ne sont pas forcément renseignées.


Je vais faire en sorte que ce soit le cas.

Dans ce style de tableau, ce que je t'ai proposé pourrait, je pense,
être une solution.


Je le pense aussi, et te renouvelle mes remerciements.

Bien cordialement,

Patrick.