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

Le
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
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
LeSteph
Le #1803203
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" 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




Domi
Le #1803201
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" 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" 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








michdenis
Le #1803200
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" 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
Domi
Le #1803199
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" 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" 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








Domi
Le #1803198
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" 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" 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





Domi
Le #1803196
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" 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" 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





LeSteph
Le #1803195
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" 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" 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" 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












LeSteph
Le #1803193
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" 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" 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





michdenis
Le #1803190
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" 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" 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" 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





Publicité
Poster une réponse
Anonyme