Undo et Union Intersect

Résolu/Fermé
touroul Messages postés 465 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 29 janvier 2024 - Modifié le 18 nov. 2020 à 20:57
touroul Messages postés 465 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 29 janvier 2024 - 21 nov. 2020 à 21:42
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 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
Modifié le 18 nov. 2020 à 21:42
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 465 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 29 janvier 2024 15
18 nov. 2020 à 22:13
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 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
Modifié le 18 nov. 2020 à 22:20
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 465 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 29 janvier 2024 15
18 nov. 2020 à 22:21
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 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
Modifié le 18 nov. 2020 à 23:35
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 465 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 29 janvier 2024 15
19 nov. 2020 à 06:02
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 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
19 nov. 2020 à 08:46
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 465 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 29 janvier 2024 15
19 nov. 2020 à 18:43
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 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
19 nov. 2020 à 23:43
[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 465 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 29 janvier 2024 15
21 nov. 2020 à 21:42
Bonjour Eric

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

Bien cordialement
0