Microsoft 365 Clavier virtuel: SelectionChange, empêche la répétition

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 !

Simon 1234

XLDnaute Junior
Bonsoir
Je fais une sorte de calculette avec un petit clavier. Chaque touche de ce clavier est une cellule. Quand on clique sur une cellule, une action est déclenchée. J'utilise SelectionChange et ça fonctionne très bien SAUF si on sélectionne une même cellule plusieurs fois de suite. Logique mais pas très pratique:
Je triche en fin de code en sélectionnant une cellule vide ("A1").
Comment faire plus propre svp ?

VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

'DECLARATION
            Dim Contenu As String
            Dim XCoord As Byte
            Dim YCoord As Byte
            
'PROGRAMMATION
    If Selection.Count = 1 Then
    'clavier
        If Not Intersect(Target, Range("B6:D9")) Is Nothing Then 'coordonnées du clavier
            
            XCoord = Target.Column
            YCoord = Target.Row
            
            Contenu = Cells(YCoord, XCoord).Value
            
            Range("B2").FormulaR1C1 = Range("B2") & Contenu
            'MsgBox Contenu

        End If 'fin clavier
        'del
                If Not Intersect(Target, Range("E9")) Is Nothing Then 'touche del
                                
            Range("B2").ClearContents
            

        End If 'fin clavier
    End If
    
    Range("A1").Select 'Ca fonctionne mais c'est pas très joli et en plus c'est lent

End Sub
 
Bonsoir,
Il n'existe pas d'autre méthode à ma connaissance .
Vous pouvez simplifier cependant :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.EnableEvents = False ' Pour éviter de boucler dans l'événement
    Select Case True
    Case Target.Count > 1
    Case Not Intersect(Target, Range("B6:D9")) Is Nothing
        [B2].FormulaR1C1 = [B2] & Target
        [A1].Select
    Case Target.Address = [E9].Address
        [B2].ClearContents
        [A1].Select
    End Select
Application.EnableEvents = True
End Sub
 
Beaucoup plus élégant en effet. Je ne connaissais pas le CASE en VBA, ça ressemble au SWITCH/CASE du C.
Merci pour le bout de code.
je vais comparer le temps d'exécution avec des macros associées à chaque bouton. Beaucoup plus de travail mais peut-être plus efficace. A moins qu'un spécialiste ne trouve une alternative.
Bonne semaine Fanch55 et à tous ceux qui nous lisent.
 
- 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 Probléme VBA
Réponses
8
Affichages
213
Réponses
4
Affichages
332
Réponses
14
Affichages
337
Réponses
1
Affichages
301
Réponses
4
Affichages
486
Réponses
0
Affichages
520
Retour