OVH Cloud OVH Cloud

Protection en fonction de la valeur d'une cellule

6 réponses
Avatar
Zebulion
Bonjour à tous.
J'ai besoin de remplir certaines colonnes en fonction de la valeur d'une
cellule particulière ($B1) pour chaque ligne.
J'ai donc créé des mises en formes conditionnelles en grisant ou non les
cellules pour "empêcher" ou non la saisie (en fait j'ai pour le moment 6
valeurs en $B1, mais je les ai regroupées par catégorie en $B2 pour en avoir
3 et entrer ainsi les 3 conditions possibles des MEFC).
Cela fonctionne très bien.
Cependant, je souhaite vérouiller ou non les cellules en fonction des 6
valeurs d'origine en $B1 (pour l'instant), mais je n'ai rien trouvé pour
préciser cela dans FORMAT CELLULE PROTECTION.

Merci d'avance à tous pour vos idées.

--
Cordialement,
Philippe

La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand tout fonctionne et que l'on ne sait pas pouquoi
(A.S.)

---****----*****-----*****-----****----*****-----*****-----*****

6 réponses

Avatar
anonymousA
Bonjour,

le + simple est sans doute d'utiliser Données/Validation. Je m'explique
Si dans les cellules C1 à G1 , tu fais
Données/validation/Peronnalisé/formule et que tu écris dans la formule
±=6 ( ici je prends l'exemple qu'il faut qu'il y ait la valeur 6 en B1
pour pouvoir saisir quelque chose en C1 à G1), alors tes utilisateurs ne
pourront pas saisir en C1 à G1 si la bonne valeur n'est pas en B1.
Ceci dit, ca n'empêche pas les utilisateurs de retirer
Données/validation mais peut-être n'est t-il pas nécéssaire d'aller
jusque là.
Attention, il n'y a âs d'effet rétroactif, c.à.d si tu as saisi en B1 la
bonne valeur et que tu as du coup saisi en C1 à G1 des valeurs, si tu
changes la valeur en B1,les valeurs de C1 à G1 ne vont pas s'envoler.

Il est bien sur possible de faire autrement par VBA et dans ce cas
d'empêcher à peu près tout ce qu'on veut sans possibilité ( enfin pas
trop simplement) de faire autrement que ce que tu souhaites.

A+


Bonjour à tous.
J'ai besoin de remplir certaines colonnes en fonction de la valeur d'une
cellule particulière ($B1) pour chaque ligne.
J'ai donc créé des mises en formes conditionnelles en grisant ou non les
cellules pour "empêcher" ou non la saisie (en fait j'ai pour le moment 6
valeurs en $B1, mais je les ai regroupées par catégorie en $B2 pour en avoir
3 et entrer ainsi les 3 conditions possibles des MEFC).
Cela fonctionne très bien.
Cependant, je souhaite vérouiller ou non les cellules en fonction des 6
valeurs d'origine en $B1 (pour l'instant), mais je n'ai rien trouvé pour
préciser cela dans FORMAT CELLULE PROTECTION.

Merci d'avance à tous pour vos idées.



Avatar
Zebulion
Super.
Ca marche bien, sauf que je peux saisir dans les cellules ainsi restreintes,
et ce n'est que lorsque j'appuie sur entrer ou sur la cellule suivante qu'il
me dit que "la valeur que j'ai tapée n'est pas valide" car " un utilisateur
a restreint les valeurs que peuvent prendre cette cellule"
J'aimerais mieux empêcher les utilisateurs de saisir ... pour rien!

Je connais assez peu VBA mais je sens qu'il est temps que je m'y mette
vraiment...

Si vous aviez une idée de ce qu'il me faut faire, je suis preneur.

--
Cordialement,
Philippe



"anonymousA" a écrit dans le message de news:
45cef905$0$21142$
Bonjour,

le + simple est sans doute d'utiliser Données/Validation. Je m'explique
Si dans les cellules C1 à G1 , tu fais
Données/validation/Peronnalisé/formule et que tu écris dans la formule
±=6 ( ici je prends l'exemple qu'il faut qu'il y ait la valeur 6 en B1
pour pouvoir saisir quelque chose en C1 à G1), alors tes utilisateurs ne
pourront pas saisir en C1 à G1 si la bonne valeur n'est pas en B1.
Ceci dit, ca n'empêche pas les utilisateurs de retirer Données/validation
mais peut-être n'est t-il pas nécéssaire d'aller jusque là.
Attention, il n'y a âs d'effet rétroactif, c.à.d si tu as saisi en B1 la
bonne valeur et que tu as du coup saisi en C1 à G1 des valeurs, si tu
changes la valeur en B1,les valeurs de C1 à G1 ne vont pas s'envoler.

Il est bien sur possible de faire autrement par VBA et dans ce cas
d'empêcher à peu près tout ce qu'on veut sans possibilité ( enfin pas trop
simplement) de faire autrement que ce que tu souhaites.

A+


Bonjour à tous.
J'ai besoin de remplir certaines colonnes en fonction de la valeur d'une
cellule particulière ($B1) pour chaque ligne.
J'ai donc créé des mises en formes conditionnelles en grisant ou non les
cellules pour "empêcher" ou non la saisie (en fait j'ai pour le moment 6
valeurs en $B1, mais je les ai regroupées par catégorie en $B2 pour en
avoir 3 et entrer ainsi les 3 conditions possibles des MEFC).
Cela fonctionne très bien.
Cependant, je souhaite vérouiller ou non les cellules en fonction des 6
valeurs d'origine en $B1 (pour l'instant), mais je n'ai rien trouvé pour
préciser cela dans FORMAT CELLULE PROTECTION.

Merci d'avance à tous pour vos idées.





Avatar
anonymousA
Bon,

il faut faire du VBA. La proposition suivante va permettre à
l'utilisateur de saisir dans la colonne B ce qu'il souhaite.Pour les
autres cellules, il y aura une vérification de la valeur de ce qui se
situe dans la colonne B pour autoriser la saisie ( ici j'ai pris un
exemple où il faut que ce qui est en B doit être égal à 6 ).

Dans le module de feuille , tu écris la procédure suivante
(Attention , le logiciel de messagerie tronquera peut-être les lignes
mais celle du Msgbox doit être sur une seule ligne

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

With ActiveCell
If Cells(.Row, 2).Value <> 6 And .Column <> 2 Then
MsgBox "la cellule " & Cells(.Row, 2).Address(0, 0) & " ne
contient pas la valeur requise pour la saisie"
Application.EnableEvents = False
Cells(.Row, 2).Activate
Application.EnableEvents = True
End If
End With

End Sub

A+

On 11 fév, 17:22, "Zebulion" wrote:
Super.
Ca marche bien, sauf que je peux saisir dans les cellules ainsi restreint es,
et ce n'est que lorsque j'appuie sur entrer ou sur la cellule suivante qu 'il
me dit que "la valeur que j'ai tapée n'est pas valide" car " un utilis ateur
a restreint les valeurs que peuvent prendre cette cellule"
J'aimerais mieux empêcher les utilisateurs de saisir ... pour rien!

Je connais assez peu VBA mais je sens qu'il est temps que je m'y mette
vraiment...

Si vous aviez une idée de ce qu'il me faut faire, je suis preneur.

--
Cordialement,
Philippe

"anonymousA" a écrit dans le message de news:
45cef905$0$21142$



Bonjour,

le + simple est sans doute d'utiliser Données/Validation. Je m'expliq ue
Si dans les cellules C1 à G1 , tu fais
Données/validation/Peronnalisé/formule et que tu écris dans la fo rmule
±=6 ( ici je prends l'exemple qu'il faut qu'il y ait la valeur 6 en B1
pour pouvoir saisir quelque chose en C1 à G1), alors tes utilisateurs ne
pourront pas saisir en C1 à G1 si la bonne valeur n'est pas en B1.
Ceci dit, ca n'empêche pas les utilisateurs de retirer Données/vali dation
mais peut-être n'est t-il pas nécéssaire d'aller jusque là.
Attention, il n'y a âs d'effet rétroactif, c.à.d si tu as saisi e n B1 la
bonne valeur et que tu as du coup saisi en C1 à G1 des valeurs, si tu
changes la valeur en B1,les valeurs de C1 à G1 ne vont pas s'envoler.

Il est bien sur possible de faire autrement par VBA et dans ce cas
d'empêcher à peu près tout ce qu'on veut sans possibilité ( enf in pas trop
simplement) de faire autrement que ce que tu souhaites.

A+

Bonjour à tous.
J'ai besoin de remplir certaines colonnes en fonction de la valeur d'u ne
cellule particulière ($B1) pour chaque ligne.
J'ai donc créé des mises en formes conditionnelles en grisant ou n on les
cellules pour "empêcher" ou non la saisie (en fait j'ai pour le mom ent 6
valeurs en $B1, mais je les ai regroupées par catégorie en $B2 pou r en
avoir 3 et entrer ainsi les 3 conditions possibles des MEFC).
Cela fonctionne très bien.
Cependant, je souhaite vérouiller ou non les cellules en fonction de s 6
valeurs d'origine en $B1 (pour l'instant), mais je n'ai rien trouvé pour
préciser cela dans FORMAT CELLULE PROTECTION.

Merci d'avance à tous pour vos idées.- Masquer le texte des messag es précédents -



- Afficher le texte des messages précédents -




Avatar
Zebulion
Bonsoir.
Super ,ça marche.
Sauf que mon souci est de sélectionner des plages et non pas toute la ligne
Lorsqueje saisis une plage tout va bien, mais il semble que ma syntaxe ne
soit pas bonne lorsque je signale 2 plages: pas de plantage, mais toutes les
cellules sont actives
Voilà ce que j'ai codé:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With ActiveCell
' If Cells(.Row, 2).Value = 2 And .Column > 4 And .Column < 15 Then ==>
ça marche
' If Cells(.Row, 2).Value = 2 And (.Column > 4 And .Column < 15) And
(.Column > 18 And .Column < 32) Then ==> ne marche pas
If Cells(.Row, 2).Value = 2 And .Column > 4 And .Column < 15 And
.Column > 18 And .Column < 32 Then ==> ne marche pas non plus

MsgBox "saisie non autorisée pour imports ou exports"
Application.EnableEvents = False
Cells(.Row, 2).Activate
Application.EnableEvents = True
End If
End With

Merci d'avance de votre aide
--
Cordialement,
Philippe

La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand tout fonctionne et que l'on ne sait pas pouquoi
(A.S.)

---****----*****-----*****-----****----*****-----*****-----*****


"anonymousA" a écrit dans le message de news:

Bon,

il faut faire du VBA. La proposition suivante va permettre à
l'utilisateur de saisir dans la colonne B ce qu'il souhaite.Pour les
autres cellules, il y aura une vérification de la valeur de ce qui se
situe dans la colonne B pour autoriser la saisie ( ici j'ai pris un
exemple où il faut que ce qui est en B doit être égal à 6 ).

Dans le module de feuille , tu écris la procédure suivante
(Attention , le logiciel de messagerie tronquera peut-être les lignes
mais celle du Msgbox doit être sur une seule ligne

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

With ActiveCell
If Cells(.Row, 2).Value <> 6 And .Column <> 2 Then
MsgBox "la cellule " & Cells(.Row, 2).Address(0, 0) & " ne
contient pas la valeur requise pour la saisie"
Application.EnableEvents = False
Cells(.Row, 2).Activate
Application.EnableEvents = True
End If
End With

End Sub

A+

On 11 fév, 17:22, "Zebulion" wrote:
Super.
Ca marche bien, sauf que je peux saisir dans les cellules ainsi
restreintes,
et ce n'est que lorsque j'appuie sur entrer ou sur la cellule suivante
qu'il
me dit que "la valeur que j'ai tapée n'est pas valide" car " un
utilisateur
a restreint les valeurs que peuvent prendre cette cellule"
J'aimerais mieux empêcher les utilisateurs de saisir ... pour rien!

Je connais assez peu VBA mais je sens qu'il est temps que je m'y mette
vraiment...

Si vous aviez une idée de ce qu'il me faut faire, je suis preneur.

--
Cordialement,
Philippe

"anonymousA" a écrit dans le message de news:
45cef905$0$21142$



Bonjour,

le + simple est sans doute d'utiliser Données/Validation. Je m'explique
Si dans les cellules C1 à G1 , tu fais
Données/validation/Peronnalisé/formule et que tu écris dans la formule
±=6 ( ici je prends l'exemple qu'il faut qu'il y ait la valeur 6 en B1
pour pouvoir saisir quelque chose en C1 à G1), alors tes utilisateurs ne
pourront pas saisir en C1 à G1 si la bonne valeur n'est pas en B1.
Ceci dit, ca n'empêche pas les utilisateurs de retirer
Données/validation
mais peut-être n'est t-il pas nécéssaire d'aller jusque là.
Attention, il n'y a âs d'effet rétroactif, c.à.d si tu as saisi en B1 la
bonne valeur et que tu as du coup saisi en C1 à G1 des valeurs, si tu
changes la valeur en B1,les valeurs de C1 à G1 ne vont pas s'envoler.

Il est bien sur possible de faire autrement par VBA et dans ce cas
d'empêcher à peu près tout ce qu'on veut sans possibilité ( enfin pas
trop
simplement) de faire autrement que ce que tu souhaites.

A+

Bonjour à tous.
J'ai besoin de remplir certaines colonnes en fonction de la valeur
d'une
cellule particulière ($B1) pour chaque ligne.
J'ai donc créé des mises en formes conditionnelles en grisant ou non
les
cellules pour "empêcher" ou non la saisie (en fait j'ai pour le moment
6
valeurs en $B1, mais je les ai regroupées par catégorie en $B2 pour en
avoir 3 et entrer ainsi les 3 conditions possibles des MEFC).
Cela fonctionne très bien.
Cependant, je souhaite vérouiller ou non les cellules en fonction des 6
valeurs d'origine en $B1 (pour l'instant), mais je n'ai rien trouvé
pour
préciser cela dans FORMAT CELLULE PROTECTION.

Merci d'avance à tous pour vos idées.- Masquer le texte des messages
précédents -



- Afficher le texte des messages précédents -




Avatar
anonymousA
Réfléchis à la valeur logique de ton test et tu comprendras. Il y a une
incohérence logique dans ton test.

A+


Bonsoir.
Super ,ça marche.
Sauf que mon souci est de sélectionner des plages et non pas toute la ligne
Lorsqueje saisis une plage tout va bien, mais il semble que ma syntaxe ne
soit pas bonne lorsque je signale 2 plages: pas de plantage, mais toutes les
cellules sont actives
Voilà ce que j'ai codé:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With ActiveCell
' If Cells(.Row, 2).Value = 2 And .Column > 4 And .Column < 15 Then ==>
ça marche
' If Cells(.Row, 2).Value = 2 And (.Column > 4 And .Column < 15) And
(.Column > 18 And .Column < 32) Then ==> ne marche pas
If Cells(.Row, 2).Value = 2 And .Column > 4 And .Column < 15 And
.Column > 18 And .Column < 32 Then ==> ne marche pas non plus

MsgBox "saisie non autorisée pour imports ou exports"
Application.EnableEvents = False
Cells(.Row, 2).Activate
Application.EnableEvents = True
End If
End With

Merci d'avance de votre aide


Avatar
Zebulion
Bonsoir
Effectivement, je crois que j'ai posté un peu vite

Voici ce qui marche (avec plusieurs tests différents):

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With ActiveCell

If Cells(.Row, 2).Value = 1 Then
If (.Column > 4 And .Column < 19) Or (.Column > 32) Then
MsgBox "saisie non autorisée pour sorties ou remontées"
Application.EnableEvents = False
Cells(.Row, 2).Activate
Application.EnableEvents = True
End If
End If

If Cells(.Row, 2).Value = 2 Then
If (.Column > 4 And .Column < 15) Or (.Column > 18 And .Column <
32) Or (.Column > 32) Then
MsgBox "saisie non autorisée pour imports ou exports"
Application.EnableEvents = False
Cells(.Row, 2).Activate
Application.EnableEvents = True
End If
End If

If Cells(.Row, 2).Value = 3 Then
If (.Column > 14 And .Column < 19) Or (.Column > 18 And .Column <
32) Or (.Column > 32) Then
MsgBox "saisie non autorisée pour impacts et modifs"
Application.EnableEvents = False
Cells(.Row, 2).Activate
Application.EnableEvents = True
End If
End If


If (Cells(.Row, 1).Value = "impacts") Or (Cells(.Row, 1).Value =
"modifs") Then
If (.Column > 14 And .Column < 19) Or (.Column > 18 And .Column <
32) Or (.Column > 32) Then
MsgBox "saisie non autorisée pour impacts et modifs"
Application.EnableEvents = False
Cells(.Row, 1).Activate
Application.EnableEvents = True
End If
End If

If Cells(.Row, 2).Value = 3 Then
If (.Column > 14 And .Column < 19) Or (.Column > 18 And .Column <
32) Or (.Column > 32) Then
' MsgBox "la cellule " & Cells(.Row, 2).Address(0, 0) & " ne
contient pas la valeur requise pour la saisie"
MsgBox "saisie non autorisée pour impacts et modifs"
Application.EnableEvents = False
Cells(.Row, 2).Activate
Application.EnableEvents = True
End If
End If
End With

End Sub



Comme quoi, il vaut toujours mieux réfléchir un peu avant de crier au
secours!!

Merci encore de l'aide apportée.
Je vais me mettre un peu à VBA
--
Cordialement,
Philippe

La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand tout fonctionne et que l'on ne sait pas pouquoi
(A.S.)

---****----*****-----*****-----****----*****-----*****-----*****


"anonymousA" a écrit dans le message de news:
45d824d2$0$5080$
Réfléchis à la valeur logique de ton test et tu comprendras. Il y a une
incohérence logique dans ton test.

A+


Bonsoir.
Super ,ça marche.
Sauf que mon souci est de sélectionner des plages et non pas toute la
ligne
Lorsqueje saisis une plage tout va bien, mais il semble que ma syntaxe ne
soit pas bonne lorsque je signale 2 plages: pas de plantage, mais toutes
les cellules sont actives
Voilà ce que j'ai codé:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With ActiveCell
' If Cells(.Row, 2).Value = 2 And .Column > 4 And .Column < 15 Then
==> ça marche
' If Cells(.Row, 2).Value = 2 And (.Column > 4 And .Column < 15) And
(.Column > 18 And .Column < 32) Then ==> ne marche pas
If Cells(.Row, 2).Value = 2 And .Column > 4 And .Column < 15 And
.Column > 18 And .Column < 32 Then ==> ne marche pas non plus

MsgBox "saisie non autorisée pour imports ou exports"
Application.EnableEvents = False
Cells(.Row, 2).Activate
Application.EnableEvents = True
End If
End With

Merci d'avance de votre aide