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

Simon 1234

XLDnaute Nouveau
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
 

fanch55

XLDnaute Barbatruc
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
 

Simon 1234

XLDnaute Nouveau
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.
 

Discussions similaires

Statistiques des forums

Discussions
313 271
Messages
2 096 724
Membres
106 720
dernier inscrit
Alain EDZOA