!!! Cellules insaisissables !!!

  • Initiateur de la discussion fabrice
  • Date de début
F

fabrice

Guest
bonjour a tout le monde,

une petite question:
je cherche a empecher la saisie de données sur une plage de cellules.

Sous VB, j'ai rentré le code suivant:
Private Sub worksheet_change(ByVal target As Excel.Range)
If target.Address = "$A$1" Then
MsgBox "pas le droit"
End If
End Sub

Des que je veux modifier la celulle A1, il y a bien un message mais on peut qd meme écrire ds la cellule!!!
Comment faire??? est ce qu'il y aurait un moyen pour carément afficher une messeagbox des que l'on clic sur la celulle A1???

Merci de votre aide,
FAB
 
P

Pascal76

Guest
Salut

Tu as plusieurs solutions je pense

Peut-être rajouter Range("B1").select dans ton code comme cela à chaque fois que tu sélectionnes A1 ta sélection repart en B1.

ou autres astuces en vba

Mais sinon tu peux protéger ta cellule pour empécher la modification

Bon courage

Pascal
 
R

Robert

Guest
Salut Fabrice, salut le forum,

Pourquoi ne pas utiliser simplement le verrouillage et la protection de la feuille.

Par défaut, toutes les cellules sont verrouillées. Il faut donc commencer par déprotéger celles que l'on veut laisser accessibles. Sélectionner ces cellules puis menu "Format / Cellule..." Onglet "Protection", décocher la case "Verrouillée".

Ensuite menu "Outils/Protection/Protéger la feuille..." avec ou sans mot de passe au choix.

À partir de là, seules les cellules qui ont été déverrouillées sont accessibles tandis que les autres renvoient systématiquement un message interdisant toute modification.

À plus,

Robert
 
F

fabrice

Guest
bonjour a vous deux,

en fait je n'utilise pas le verrouillage d'XL, car g des macros qui doivent utiliser des cellules qui sont verrouillées!!!

Sinon, Pascal76, je ne vois pas ou il faut mettre ton code!!!

Merci,
FAb
 
P

Pascal76

Guest
Re

Je pensais à un truc de ce genre

Private Sub worksheet_change(ByVal target As Excel.Range)
If target.Address = "$A$1" Then
range("B1").select
MsgBox "pas le droit"
End If
End Sub

Bon courage

Pascal
 
F

fabrice

Guest
resalut

en fait ca fait exactement pareil (du moins chez moi déjà!!!)

Je clic sur A1 (rien ne se passe), je tape quelques chiffre (tjs rien), et je valide et la, la macro se met en marche avec la messagbox et le changement de cellule mais ce que j'ai tapé est bien ds la cellule A1!!!! :=(

Une autre dée pê ???? :=(

Merci,
FAb
 
M

michel

Guest
bonsoir Fabrice ,Pascal et Robert

tu peux essayer

Private Sub worksheet_change(ByVal target As Excel.Range)
If target.Address = "$A$1" Then
MsgBox "pas le droit"
Application.EnableEvents = False
Application.Undo
target.Offset(0, 1).Select
Application.EnableEvents = True
End If
End Sub


bonne soiree
michel
 
@

@+Thierry

Guest
Bonsoir Michel, Pascal, Robert et Fabrice, ainsi que le Forum of course.

Assez brièvement, car je ne fais que passer vite fait sur le forum .

J'ai surtout noté que notre ami Fabrice à répondu à Robert qui conseillait très simplement (et très justement) d'utiliser les protections standards d'Excel, mais qu'il ne pouvait pas appliquer le "verrouillage d'XL", car il a des macros qui doivent utiliser des cellules qui sont verrouillées...

Et bien dans ce cas précis, je conseille de ne pas faire des "usines à gaz" avec les évènementielles qui ont été proposées mais, tout simplement, d'utiliser La Protection Combinée à UserInterfaceOnly qui est tout à fait prévue pour ceci...

Pour tous les détails je vous conseille à tous de lire :

Lien supprimé

qui se réfère aussi à :

Lien supprimé

On peut même combiner encore cette méthode à "EnableSelection" uniquement sur "xlUnlockedCells" et là les cellules seront vraiment insaisissables !!!

Je pense que ce sera bien plus simple (et plus fiable aussi) mais maintenant si on veut vraiment le faire par évènementielle, sans protection, alors moi je privilègerais l'évenement "Worksheet_SelectionChange" car l'évènement "Worksheet_Change" ne peut convenir puisque l'évènement est capté après le changement (donc trop tard !) voici ce que çà donnerait sans message stressant !!

Private Sub Worksheet_SelectionChange(ByVal target As Range)
If target.Address = "$A$1" Then
Range("A2").Activate
End If
End Sub

Mais la protection reste le plus simple à mes yeux

Bonne Soirée
@+Thierry
 
F

fabrice

Guest
Bonjour a vous trois!!!

Ca fait plaisir de voir toutes ces réponses!!!

Je vous en remercie!!! je viens d'apprendre encore pleins de nouvelles subtilités d'XL!!!!

Maintenant que ca marche, je voudrai poser une question sur la methode:
Private Sub Worksheet_SelectionChange(ByVal target As Range)
If target.Address = "$A$1" Then
Range("A2").Activate
End If
End Sub

Dans ce cas là, on ne selectionne que la celulle A1! Mais si on veut selectionner une plage de cellules, faut-il la rentrer en variables et dire "If target.Address = NOM DE MA VARIALBE Then ... ???

Autrement, merci de vos réponses,
FAB

PS: @+Thierry, ca plaisir de te croiser!!!!
 
P

Pascal76

Guest
Re fabrice

Pour une plage voici une méthode (je ne sais s'il en existe d'autres):

Private Sub Worksheet_SelectionChange(ByVal target As Range)
If Not Application.Intersect(Target, Range("A1:A12")) Is Nothing Then
Range("B1").Activate
End If
End Sub

Si ta selection apparteitn à A1:A12 alors B1 activé

Bon courage

Pascal
 
@

@+Thierry

Guest
Bonjour Fabrice, Michel, Pascal, Robert et le Forum

Pour avoir des actions évènementielles sur des cellulules ou des plages de cellules, contigues ou non-contigues, ou bien des Colonnes entières, ou encore des Lignes, etc

Je te conseille ce fil de discussion où j'ai essayé de regrouper pas mal d'information sur la méthode de sélection "intersect"... un Fil bien cousu !!!

Lien supprimé

Je pense que ce fil répondra complètement à ta question.

Bonne journée
@+Thierry
 
@

@+Thierry

Guest
Bonjour Pascal,

On s'est croisé sur ce coup là pendant que je cherchais mon Fil N°74771. Mais en fait je te réponds aussi car tu auras la "panoplie" des méthodes basée sur "Intersect" !

Bonne Journée à toi aussi
@+Thierry
 
P

Pascal76

Guest
salut Thierry


Et voilà encore un de tes fils et une de tes explications que je vais imprimer de ce pas pour l'avoir sous la main.
Merci non seulement pour tout le travail que tu fais mais aussi pour toutes les explications qui me servent énormément. En fait je me sers beaucoup de la fonction recherche ainsi que de ton aplli de recherche sur le forum pour les applis que je développe au boulot. Et j'en apprends tous les jours.

Bonne journée à toi aussi.

Pascal

PS : Fabrice je suis sur que tu ne prendras pas ombrage d'avoir utilisé ton fil pour remercier Thierry
 

Discussions similaires

Réponses
1
Affichages
249

Statistiques des forums

Discussions
312 329
Messages
2 087 334
Membres
103 519
dernier inscrit
Thomas_grc11