Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

VBA : selection/protection/effacement de cellule...

9 réponses
Avatar
Domi
Bonjour à tous,

Je tourne en rond depuis un bon moment sur un problème qui me semblait
simple au départ..
J'ai dans une cellule Choix1, la possibilité de sélectionner une valeur dans
une liste de choix.
Parmis les choix possibles figure "Autre". Si "Autre" est sélectionné dans
Choix1, une cellule Choix2 doit être remplie.
Je voudrais que :
Si Choix1 contient une valeur <> de "Autre", Choix2 soit vide (ou éffacée)
et qu'il soit impossible d'y écrire.
Si Choix1 contient "Autre"; Choix2 est sélectionné et accessible en
écriture.


Je suis parti la dessus mais j'ai rapidement perdu pied...
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("Choix1").Address Then
If Target <> "Autre" Then
Range("Choix2").Select
Selection.ClearContents
................

Merci pour votre aide
Domi

9 réponses

Avatar
LeSteph
Bonjour Domi,
Je réfléchis selon ce que tu demandes exactement bien sûr mais en outre
une question a priori me vient ,sauf autres considérations que j'ignore:
si seul au cas d'"Autre" en choix1 échoit un accès à choix2 ne serait il
pas
plus simple de remplacer "Autre" par la liste prévue en choix2 et ne faire
qu'un seul choix?


LeSteph

"Domi" a écrit dans le message de
news:e%
Bonjour à tous,

Je tourne en rond depuis un bon moment sur un problème qui me semblait
simple au départ..
J'ai dans une cellule Choix1, la possibilité de sélectionner une valeur
dans

une liste de choix.
Parmis les choix possibles figure "Autre". Si "Autre" est sélectionné dans
Choix1, une cellule Choix2 doit être remplie.
Je voudrais que :
Si Choix1 contient une valeur <> de "Autre", Choix2 soit vide (ou éffacée)
et qu'il soit impossible d'y écrire.
Si Choix1 contient "Autre"; Choix2 est sélectionné et accessible en
écriture.


Je suis parti la dessus mais j'ai rapidement perdu pied...
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("Choix1").Address Then
If Target <> "Autre" Then
Range("Choix2").Select
Selection.ClearContents
................

Merci pour votre aide
Domi




Avatar
Domi
Salut ,
Il n'y a pas de liste en Choix2, on peut y saisir ce qu'on veut, je prévois
cette case pour des choix "bizarres" qui ne figurent pas dans la liste de
Choix1, qui elle ne contient que des valeurs "standard". Je voudrais faire
faire la saisie dans une autre cellule pour bien faire ressortir l'aspect
"anormal"...
Merci
Domi


"LeSteph" a écrit dans le message de
news:41288d9d$0$29676$
Bonjour Domi,
Je réfléchis selon ce que tu demandes exactement bien sûr mais en outre
une question a priori me vient ,sauf autres considérations que j'ignore:
si seul au cas d'"Autre" en choix1 échoit un accès à choix2 ne serait il
pas
plus simple de remplacer "Autre" par la liste prévue en choix2 et ne
faire

qu'un seul choix?


LeSteph

"Domi" a écrit dans le message de
news:e%
Bonjour à tous,

Je tourne en rond depuis un bon moment sur un problème qui me semblait
simple au départ..
J'ai dans une cellule Choix1, la possibilité de sélectionner une valeur
dans

une liste de choix.
Parmis les choix possibles figure "Autre". Si "Autre" est sélectionné
dans


Choix1, une cellule Choix2 doit être remplie.
Je voudrais que :
Si Choix1 contient une valeur <> de "Autre", Choix2 soit vide (ou
éffacée)


et qu'il soit impossible d'y écrire.
Si Choix1 contient "Autre"; Choix2 est sélectionné et accessible en
écriture.


Je suis parti la dessus mais j'ai rapidement perdu pied...
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("Choix1").Address Then
If Target <> "Autre" Then
Range("Choix2").Select
Selection.ClearContents
................

Merci pour votre aide
Domi








Avatar
michdenis
Bonjour Domi,

à mettre dans le code module où l'action se déroule
'-------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("Choix1")) Is Nothing Then
Application.EnableEvents = False
If UCase(Range("Choix1")) = "AUTRE" Then
Range("Choix2").Select
Else
Range("Choix2") = ""
End If
Application.EnableEvents = True
End If

End Sub
'-------------------------


Salutations!


"Domi" a écrit dans le message de news:e%
Bonjour à tous,

Je tourne en rond depuis un bon moment sur un problème qui me semblait
simple au départ..
J'ai dans une cellule Choix1, la possibilité de sélectionner une valeur dans
une liste de choix.
Parmis les choix possibles figure "Autre". Si "Autre" est sélectionné dans
Choix1, une cellule Choix2 doit être remplie.
Je voudrais que :
Si Choix1 contient une valeur <> de "Autre", Choix2 soit vide (ou éffacée)
et qu'il soit impossible d'y écrire.
Si Choix1 contient "Autre"; Choix2 est sélectionné et accessible en
écriture.


Je suis parti la dessus mais j'ai rapidement perdu pied...
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("Choix1").Address Then
If Target <> "Autre" Then
Range("Choix2").Select
Selection.ClearContents
................

Merci pour votre aide
Domi
Avatar
Domi
Je viens de "pondre ça" :
C'est un peu laborieux mais ça à l'air de tourner rond...
Je pense qu'un fort en VBA doit pouvoir faire quelque chose de plus
concis...
Je reste preneur de corrections, suggestions ou améliorations ;o)
Merci
Domi

If Target.Address = Range("Choix1").Address Then
If [Choix1].Value = "Autre" Then
Application.ScreenUpdating = False
ActiveSheet.Unprotect
[Choix2].Select
Selection.Locked = False
Selection.ClearContents
ActiveSheet.Protect
Application.ScreenUpdating = True
Else
Application.ScreenUpdating = False
ActiveSheet.Unprotect
[Choix2].Select
Selection.ClearContents
Selection.Locked = True
ActiveSheet.Protect
[Choix1].Select
Application.ScreenUpdating = True
End If
End If





"LeSteph" a écrit dans le message de
news:41288d9d$0$29676$
Bonjour Domi,
Je réfléchis selon ce que tu demandes exactement bien sûr mais en outre
une question a priori me vient ,sauf autres considérations que j'ignore:
si seul au cas d'"Autre" en choix1 échoit un accès à choix2 ne serait il
pas
plus simple de remplacer "Autre" par la liste prévue en choix2 et ne
faire

qu'un seul choix?


LeSteph

"Domi" a écrit dans le message de
news:e%
Bonjour à tous,

Je tourne en rond depuis un bon moment sur un problème qui me semblait
simple au départ..
J'ai dans une cellule Choix1, la possibilité de sélectionner une valeur
dans

une liste de choix.
Parmis les choix possibles figure "Autre". Si "Autre" est sélectionné
dans


Choix1, une cellule Choix2 doit être remplie.
Je voudrais que :
Si Choix1 contient une valeur <> de "Autre", Choix2 soit vide (ou
éffacée)


et qu'il soit impossible d'y écrire.
Si Choix1 contient "Autre"; Choix2 est sélectionné et accessible en
écriture.


Je suis parti la dessus mais j'ai rapidement perdu pied...
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("Choix1").Address Then
If Target <> "Autre" Then
Range("Choix2").Select
Selection.ClearContents
................

Merci pour votre aide
Domi








Avatar
Domi
Bonjour et merci pour ta suggestion,
sauf erreur de ma part, ta solution n'empêche pas la saisie d'une valeur
dans Choix2 si Choix1 contient autre chose que "Autre"...
Me trompe-je ? :o)
Domi

"michdenis" a écrit dans le message de
news:%
Bonjour Domi,

à mettre dans le code module où l'action se déroule
'-------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("Choix1")) Is Nothing Then
Application.EnableEvents = False
If UCase(Range("Choix1")) = "AUTRE" Then
Range("Choix2").Select
Else
Range("Choix2") = ""
End If
Application.EnableEvents = True
End If

End Sub
'-------------------------


Salutations!


"Domi" a écrit dans le message de
news:e%

Bonjour à tous,

Je tourne en rond depuis un bon moment sur un problème qui me semblait
simple au départ..
J'ai dans une cellule Choix1, la possibilité de sélectionner une valeur
dans

une liste de choix.
Parmis les choix possibles figure "Autre". Si "Autre" est sélectionné dans
Choix1, une cellule Choix2 doit être remplie.
Je voudrais que :
Si Choix1 contient une valeur <> de "Autre", Choix2 soit vide (ou éffacée)
et qu'il soit impossible d'y écrire.
Si Choix1 contient "Autre"; Choix2 est sélectionné et accessible en
écriture.


Je suis parti la dessus mais j'ai rapidement perdu pied...
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("Choix1").Address Then
If Target <> "Autre" Then
Range("Choix2").Select
Selection.ClearContents
................

Merci pour votre aide
Domi





Avatar
Domi
Je me suis inspiré d'une de tes réponses dans un post de 2001....!!!
voir :
http://groups.google.fr/groups?hl=fr&lr=&ie=UTF-8&threadm=%23QAFBiaYBHA.1512%40tkmsftngp05&rnum&prev=/groups%3Fq%3Dexcel%2Bfr%2Bempecher%2Bsaisie%2Bdans%2Bcellule%2Bsi%26start%3D10%26hl%3Dfr%26lr%3D%26ie%3DUTF-8%26selm%3D%2523QAFBiaYBHA.1512%2540tkmsftngp05%26rnum%3D11

Je cite..."B) Pour empêcher toute saisi dans une cellule, la feuille doit
être protégée et la propriété "Locked" à true....."

Domi


"michdenis" a écrit dans le message de
news:%
Bonjour Domi,

à mettre dans le code module où l'action se déroule
'-------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("Choix1")) Is Nothing Then
Application.EnableEvents = False
If UCase(Range("Choix1")) = "AUTRE" Then
Range("Choix2").Select
Else
Range("Choix2") = ""
End If
Application.EnableEvents = True
End If

End Sub
'-------------------------


Salutations!


"Domi" a écrit dans le message de
news:e%

Bonjour à tous,

Je tourne en rond depuis un bon moment sur un problème qui me semblait
simple au départ..
J'ai dans une cellule Choix1, la possibilité de sélectionner une valeur
dans

une liste de choix.
Parmis les choix possibles figure "Autre". Si "Autre" est sélectionné dans
Choix1, une cellule Choix2 doit être remplie.
Je voudrais que :
Si Choix1 contient une valeur <> de "Autre", Choix2 soit vide (ou éffacée)
et qu'il soit impossible d'y écrire.
Si Choix1 contient "Autre"; Choix2 est sélectionné et accessible en
écriture.


Je suis parti la dessus mais j'ai rapidement perdu pied...
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("Choix1").Address Then
If Target <> "Autre" Then
Range("Choix2").Select
Selection.ClearContents
................

Merci pour votre aide
Domi





Avatar
LeSteph
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("Choix1").Address Then
If Target.Value <> "Autre" Then
Range("Choix2") = ""
Else
Do While Range("Choix2") = ""
Range("Choix2") = InputBox("choix:", "choix autre", "NR")
Loop

End If
End If
End Sub


"Domi" a écrit dans le message de
news:
Je viens de "pondre ça" :
C'est un peu laborieux mais ça à l'air de tourner rond...
Je pense qu'un fort en VBA doit pouvoir faire quelque chose de plus
concis...
Je reste preneur de corrections, suggestions ou améliorations ;o)
Merci
Domi

If Target.Address = Range("Choix1").Address Then
If [Choix1].Value = "Autre" Then
Application.ScreenUpdating = False
ActiveSheet.Unprotect
[Choix2].Select
Selection.Locked = False
Selection.ClearContents
ActiveSheet.Protect
Application.ScreenUpdating = True
Else
Application.ScreenUpdating = False
ActiveSheet.Unprotect
[Choix2].Select
Selection.ClearContents
Selection.Locked = True
ActiveSheet.Protect
[Choix1].Select
Application.ScreenUpdating = True
End If
End If





"LeSteph" a écrit dans le message de
news:41288d9d$0$29676$
Bonjour Domi,
Je réfléchis selon ce que tu demandes exactement bien sûr mais en outre
une question a priori me vient ,sauf autres considérations que j'ignore:
si seul au cas d'"Autre" en choix1 échoit un accès à choix2 ne serait
il


pas
plus simple de remplacer "Autre" par la liste prévue en choix2 et ne
faire

qu'un seul choix?


LeSteph

"Domi" a écrit dans le message de
news:e%
Bonjour à tous,

Je tourne en rond depuis un bon moment sur un problème qui me semblait
simple au départ..
J'ai dans une cellule Choix1, la possibilité de sélectionner une
valeur



dans
une liste de choix.
Parmis les choix possibles figure "Autre". Si "Autre" est sélectionné
dans


Choix1, une cellule Choix2 doit être remplie.
Je voudrais que :
Si Choix1 contient une valeur <> de "Autre", Choix2 soit vide (ou
éffacée)


et qu'il soit impossible d'y écrire.
Si Choix1 contient "Autre"; Choix2 est sélectionné et accessible en
écriture.


Je suis parti la dessus mais j'ai rapidement perdu pied...
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("Choix1").Address Then
If Target <> "Autre" Then
Range("Choix2").Select
Selection.ClearContents
................

Merci pour votre aide
Domi












Avatar
LeSteph
Effectivement j'oubliais ce détail:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("Choix2").Address Then
Range("Choix1") = "Autre"
Else
If Target.Address = Range("Choix1").Address Then
If Target.Value <> "Autre" Then
Range("Choix2") = ""
Else
Do While Range("Choix2") = ""
Range("Choix2") = InputBox("choix:", "choix autre", "NR")
Loop

End If
End If
End If
End Sub

LeSteph
"michdenis" a écrit dans le message de
news:%
Bonjour Domi,

à mettre dans le code module où l'action se déroule
'-------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("Choix1")) Is Nothing Then
Application.EnableEvents = False
If UCase(Range("Choix1")) = "AUTRE" Then
Range("Choix2").Select
Else
Range("Choix2") = ""
End If
Application.EnableEvents = True
End If

End Sub
'-------------------------


Salutations!


"Domi" a écrit dans le message de
news:e%

Bonjour à tous,

Je tourne en rond depuis un bon moment sur un problème qui me semblait
simple au départ..
J'ai dans une cellule Choix1, la possibilité de sélectionner une valeur
dans

une liste de choix.
Parmis les choix possibles figure "Autre". Si "Autre" est sélectionné dans
Choix1, une cellule Choix2 doit être remplie.
Je voudrais que :
Si Choix1 contient une valeur <> de "Autre", Choix2 soit vide (ou éffacée)
et qu'il soit impossible d'y écrire.
Si Choix1 contient "Autre"; Choix2 est sélectionné et accessible en
écriture.


Je suis parti la dessus mais j'ai rapidement perdu pied...
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("Choix1").Address Then
If Target <> "Autre" Then
Range("Choix2").Select
Selection.ClearContents
................

Merci pour votre aide
Domi





Avatar
michdenis
Bonjour Domi,

Essaie ce qui suit :

les 2 procédures à copier dans le module feuille où l'action se déroule

'----------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Union(Range("Choix1"), Range("Choix2"))) Is Nothing Then
Application.EnableEvents = False
If UCase(Range("Choix1")) <> "AUTRE" Then
Range("Choix2") = ""
End If
Application.EnableEvents = True
End If

End Sub
'----------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address <> Range("choix1").Address Then
If UCase(Range("Choix1")) = "AUTRE" Then
If Range("Choix2") = "" Then
Application.EnableEvents = False
Range("Choix2").Select
Application.EnableEvents = True
MsgBox "Une donnée doit être saisie"
End If
End If
End If
End Sub
'----------------------------


Salutations!




"Domi" a écrit dans le message de news:
Bonjour et merci pour ta suggestion,
sauf erreur de ma part, ta solution n'empêche pas la saisie d'une valeur
dans Choix2 si Choix1 contient autre chose que "Autre"...
Me trompe-je ? :o)
Domi

"michdenis" a écrit dans le message de
news:%
Bonjour Domi,

à mettre dans le code module où l'action se déroule
'-------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("Choix1")) Is Nothing Then
Application.EnableEvents = False
If UCase(Range("Choix1")) = "AUTRE" Then
Range("Choix2").Select
Else
Range("Choix2") = ""
End If
Application.EnableEvents = True
End If

End Sub
'-------------------------


Salutations!


"Domi" a écrit dans le message de
news:e%

Bonjour à tous,

Je tourne en rond depuis un bon moment sur un problème qui me semblait
simple au départ..
J'ai dans une cellule Choix1, la possibilité de sélectionner une valeur
dans

une liste de choix.
Parmis les choix possibles figure "Autre". Si "Autre" est sélectionné dans
Choix1, une cellule Choix2 doit être remplie.
Je voudrais que :
Si Choix1 contient une valeur <> de "Autre", Choix2 soit vide (ou éffacée)
et qu'il soit impossible d'y écrire.
Si Choix1 contient "Autre"; Choix2 est sélectionné et accessible en
écriture.


Je suis parti la dessus mais j'ai rapidement perdu pied...
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("Choix1").Address Then
If Target <> "Autre" Then
Range("Choix2").Select
Selection.ClearContents
................

Merci pour votre aide
Domi