Undo et Union Intersect

Résolu
touroul Messages postés 509 Date d'inscription   Statut Membre Dernière intervention   -  
touroul Messages postés 509 Date d'inscription   Statut Membre Dernière intervention   -
Bonsoir le forum

N'étant pas fan des protections Excel de verrouillage de cellules, je préfère souvent la méthode Undo, qui autorise les copier-coller de texte.

Ici, j'aimerai appliquer cette méthode à un Range composé de plusieurs plages (via Union).
Mais Excel ne semble pas en tenir compte.

Une autre méthode consisterait à définir un Range plus global, et à exclure les 2 cellules fusionnées sur lesquelles je veux laisser l'édition libre.

Voici un fichier d'exemple avec explications : https://www.cjoint.com/c/JKst4inWvdd

Private Sub Worksheet_Selection_Change(ByVal Target As Range)
If Not Intersect(Union(Range("A1:C6"), Range("E1:H6"), Range("D1:D4"), Target)) Is Nothing Then
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
End If
End Sub


Par avance merci pour votre aide !


Configuration: Windows 10 / Excel 365

8 réponses

eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
Bonjour,
Worksheet_Selection_Change est une invention de ton cru qui n'existe.
Sers-toi plutôt des listes déroulantes en haut pour choisir tes événements, ils seront corrects.

Et tu vas te faire jeter aussi sur
If Not Intersect(Union(Range("A1:C6"), Range("E1:H6"), Range("D1:D4"), Target)) Is Nothing Then 

tu as mis Target dans l'union, et cherche donc à faire un Intersect avec rien...
eric

1
touroul Messages postés 509 Date d'inscription   Statut Membre Dernière intervention   16
 
Bonsoir Eric

Merci pour ta réponse.
OK pour le Worksheet_SelectionChange .
J'ai supprimé le Target, mais mon code est toujours sans effet :
https://www.cjoint.com/c/JKsvmPLOq1d

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Union(Range("A1:C6"), Range("E1:H6")), Range("D1:D4")) Is Nothing Then
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
End If
End Sub


Je ne comprends pas pourquoi.
Merci pour la suite :)
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
Dis plutôt précisément ce que tu veux faire.
Ce n'est pas avec un code manifestement faux qu'on va deviner.
Parce que cet événement sans se servir de Target est pour le moins étrange...
eric
0
touroul Messages postés 509 Date d'inscription   Statut Membre Dernière intervention   16
 
OK.
Je pensais que c'était clair avec le fichier joint.
Simplement, je veux protéger avec UNDO la plage A1:H6, sauf les cellules fusionnées D5 et D6.

Merci !
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
mais ça peut être un collé sur tout A1:H6 ?
Car un Undo te nettoiera aussi D5:D6...
Ou bien ce sont juste des saisies dans des cellules individuelles ?
eric

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
touroul Messages postés 509 Date d'inscription   Statut Membre Dernière intervention   16
 
Bonjour Eric

Ah d'accord je comprends à présent pourquoi je t'ai embrouillé.
Oublie cette histoire de copier-coller.
Simplement je veux empêcher la saisie individuelle dans A1:H6, sauf les cellules fusionnées D5 et D6.
Merci par avance
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
Bonjour,
dans ce cas :
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Union([A1:C6], [D1:C3], [E1:H6])) Is Nothing Then
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
End If
End Sub

eric

0
touroul Messages postés 509 Date d'inscription   Statut Membre Dernière intervention   16
 
Oui bravo Eric !
C'était bien ça !
Ma syntaxe était inexacte.
J'avais bien vu ces crochets sur le forum, mais dans des Range nommés, du coup je pensais que ça ne s'appliquait pas à mon cas.

Parfait.
Merci beaucoup pour ton aide !
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
[A1:C6] est équivalent à Range("A1:C6"), mais il est préférable d'utiliser la seconde, celle que tu utilisais.
Ton erreur était autre, relis tranquillement
eric
0
touroul Messages postés 509 Date d'inscription   Statut Membre Dernière intervention   16
 
Bonjour Eric

C'est vu.
Merci encore de m'avoir permis de progresser.

Bien cordialement
0