XL 2016 Lancement macro sur cellules fusionnées

  • Initiateur de la discussion Initiateur de la discussion joel31
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

joel31

XLDnaute Junior
Bonjour le forum,

Je bute depuis hier sur un casse tête que je n'arrive pas à résoudre.
Je souhaite lancer une macro quand je sélectionne une cellule fusionnée (oui je sais, mais je peux difficilement faire autrement !)
J'ai fait le fichier joint pour exemple :
Je clic sur A4, la macro se lance et le résultat est bon.
Je souhaiterais , quand je reviens ensuite sur cette cellule, l'effacer quand elle est renseignée, et c'est là que je n'arrive pas à trouver ma solution.
La macro fonctionne parfaitement avec de simples cellules, mais pas avec mes cellules fusionnées

Celui ci ne fonctionne pas, sauf si on ne tient pas compte de Z, qui renseigne alors la plage souhaitée, mais impossible de l'effacer ensuite !

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim isect, Z$, plage
plage = "A4:A6 ,A9:A11, D4😀6, D9😀11"
If Target.Count = 3 Then
'Z = Target.Value
Set isect = Application.Intersect(Target, Range(plage))
If Not isect Is Nothing Then
Target.Value = IIf(Z = "", "ü", "")
End If
End If
End Sub

Et celui ci fonctionne parfaitement sur des cellules non fusionnées
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim isect, Z$, plage
plage = "B4:B6,B9:B11,E4:E6,E9:E11"
If Target.Count = 1 Then
Z = Target.Value
Set isect = Application.Intersect(Target, Range(plage))
If Not isect Is Nothing Then
Target.Value = IIf(Z = "", "ü", "")
End If
End If
End Sub

Un petit fichier vaut mieux qu'un long discours !
Merci pour votre aide !
Cordialement
 

Pièces jointes

Bonjour Joel,
Si vous faites "v = Target.Value" avec des cellules fusionnées vous trouvez :
1630156687471.png

C'est à dire que le VBA renvoie un array avec toutes les valeurs de la plage Target.address.
Une solution est :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'Change(ByVal Target As Range)
Dim isect, Z$, plage
plage = "A4:A6,A9:A11,D4:D6,D9:D11"
If Target.Count = 3 Then
'Z = Target.Value
Set isect = Application.Intersect(Target, Range(plage))
If Not isect Is Nothing Then
If Application.Index(Range(Target.Address), 1) = "" Then
    Application.Index(Range(Target.Address), 1) = "ü"
Else
    Application.Index(Range(Target.Address), 1) = ""
End If
End If
End If
End Sub
J'ai décomposé le IIF pour être plus clair.
Voir PJ.
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
250
Réponses
1
Affichages
322
Réponses
4
Affichages
148
  • Question Question
Microsoft 365 Probléme VBA
Réponses
8
Affichages
233
Réponses
14
Affichages
371
Retour