Undo et Union Intersect
Résolu
touroul
Messages postés
520
Date d'inscription
Statut
Membre
Dernière intervention
-
touroul Messages postés 520 Date d'inscription Statut Membre Dernière intervention -
touroul Messages postés 520 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
Par avance merci pour votre aide !
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
-
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 surIf 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
-
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 :) -
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 ! -
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
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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 -
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
-
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 ! -
Bonjour Eric
C'est vu.
Merci encore de m'avoir permis de progresser.
Bien cordialement