XL 2010 Tabulation ne fonctionne pas (Tab ou Entrée)

cathodique

XLDnaute Barbatruc
Bonjour,

Bien qu'ayant réglé l'ordre de tabulation, elle ne fonctionne ni avec la touche Tab, ni avec la touche Entrée.
Je ne comprends pas pourquoi et ne parviens pas à résoudre mon problème.
J'utilise un code masque de saisie de numéro de téléphone de @patricktoulon.
à la fin de la saisie d'un numéro, les 2 touches (tab et entrée) sont inactives.
Merci pour votre aide.
 

Pièces jointes

  • Probleme touche Tab+Entrée.xlsm
    24.2 KB · Affichages: 8

patricktoulon

XLDnaute Barbatruc
re
il faut simplement ajouter le case 9 ou et 13
et bloquer le keycode=0 à la fin c'est tout
VB:
'********************************************************************
'Option Explicit
Public Sub TextBox_KeyDown(ByRef Textbox As MSForms.Textbox, ByVal KeyCode As MSForms.ReturnInteger)
   Dim x&
   Dim Xl&
   '   Dim d&
   '   Dim M&
   '   Dim A
   Dim t$
   Dim mask
   mask = "__ __ __ __ __"
   'pour ceux qui n'ont pas le pavé numerique conversion du keycode du pavé haut du clavier(Attention!!!pas besoins de bloquer la touche MAJ!!!!!!!!le code se charge de convertir)
   If KeyCode >= 48 And KeyCode <= 57 Then KeyCode = KeyCode + 48
   'c'est parti on démarre le controle!!
   With Textbox
      Xl = .SelLength: If Xl = 0 Then Xl = 1    'Xl= la longeur de texte selectionné
      .Value = IIf(.Value = "", mask, .Value): If KeyCode = 8 And Xl > 1 Then KeyCode = 46
      t = .Value: .SelStart = IIf(t = mask, 0, .SelStart): x = .SelStart:
      Select Case KeyCode
      Case 96 To 105  'pavé numerique haut et bas
         If x = 14 Then KeyCode = 0: Exit Sub
         If x = 2 Or x = 5 Or x = 8 Or x = 11 Then x = x + 1
         Mid(t, x + 1, Xl) = Chr(KeyCode - 48) & Mid(mask, x + 2, Xl - 1)
         x = x + 1: Xl = 0: If x = 2 Or x = 5 Or x = 8 Or x = 11 Then x = x + 1
         KeyCode = 0
      Case 8:
         If x = 0 Then KeyCode = 0:: .Value = "": Exit Sub
         Mid(t, x, 1) = Mid(mask, x, 1): x = x - 1: Xl = 0: If t = mask Then t = ""
         KeyCode = 0    ' on annule toujours la touche
      Case 46:
         If x = 14 Then KeyCode = 0: Exit Sub
         Mid(t, x + 1, Xl) = Mid(mask, x + 1, Xl): x = x: Xl = Xl - 1: If t = mask Then t = ""
         KeyCode = 0    ' on annule toujours la touche
      
      Case 9, 13
      
      Case Else
         KeyCode = 0
      End Select
      .Value = t   'restitution
      .SelStart = x: .SelLength = Xl
      'KeyCode = 0
   End With
End Sub
 

wDog66

XLDnaute Occasionnel
Mon cher Cador roi des connaissances de ce forum à priori :rolleyes:
je pense qu'il serait bien de redescendre un peu de ton piédestal 🤔

Un numéro de téléphone peut se traiter par un simple
VB:
TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)

Maintenant, ne connaissant pas la demande de départ, je n'irais pas plus en avant

Bonne continuation

Edit : je n'avais pas vu mais on peut ignorer un membre sur ce forum... cool 😜 ✌️
 

cathodique

XLDnaute Barbatruc
re
il faut simplement ajouter le case 9 ou et 13
et bloquer le keycode=0 à la fin c'est tout
VB:
'********************************************************************
'Option Explicit
Public Sub TextBox_KeyDown(ByRef Textbox As MSForms.Textbox, ByVal KeyCode As MSForms.ReturnInteger)
   Dim x&
   Dim Xl&
   '   Dim d&
   '   Dim M&
   '   Dim A
   Dim t$
   Dim mask
   mask = "__ __ __ __ __"
   'pour ceux qui n'ont pas le pavé numerique conversion du keycode du pavé haut du clavier(Attention!!!pas besoins de bloquer la touche MAJ!!!!!!!!le code se charge de convertir)
   If KeyCode >= 48 And KeyCode <= 57 Then KeyCode = KeyCode + 48
   'c'est parti on démarre le controle!!
   With Textbox
      Xl = .SelLength: If Xl = 0 Then Xl = 1    'Xl= la longeur de texte selectionné
      .Value = IIf(.Value = "", mask, .Value): If KeyCode = 8 And Xl > 1 Then KeyCode = 46
      t = .Value: .SelStart = IIf(t = mask, 0, .SelStart): x = .SelStart:
      Select Case KeyCode
      Case 96 To 105  'pavé numerique haut et bas
         If x = 14 Then KeyCode = 0: Exit Sub
         If x = 2 Or x = 5 Or x = 8 Or x = 11 Then x = x + 1
         Mid(t, x + 1, Xl) = Chr(KeyCode - 48) & Mid(mask, x + 2, Xl - 1)
         x = x + 1: Xl = 0: If x = 2 Or x = 5 Or x = 8 Or x = 11 Then x = x + 1
         KeyCode = 0
      Case 8:
         If x = 0 Then KeyCode = 0:: .Value = "": Exit Sub
         Mid(t, x, 1) = Mid(mask, x, 1): x = x - 1: Xl = 0: If t = mask Then t = ""
         KeyCode = 0    ' on annule toujours la touche
      Case 46:
         If x = 14 Then KeyCode = 0: Exit Sub
         Mid(t, x + 1, Xl) = Mid(mask, x + 1, Xl): x = x: Xl = Xl - 1: If t = mask Then t = ""
         KeyCode = 0    ' on annule toujours la touche
     
      Case 9, 13
     
      Case Else
         KeyCode = 0
      End Select
      .Value = t   'restitution
      .SelStart = x: .SelLength = Xl
      'KeyCode = 0
   End With
End Sub
Bonjour @patricktoulon ;),

Je te remercie d'être intervenu rapidement. Je t'avoue que je n'ai pas voulu toucher à ton code. Car je n’étais pas certain de la source du problème. Ensuite, j'aurai peut-être fait n'importe quoi.

Je viens de tester. Fonctionne parfaitement.

Avec tous mes remerciements.
 

patricktoulon

XLDnaute Barbatruc
re
Oui bien sur mais tu n'a pas le masque de saisie et l’assistance des séparateur et l’assistance des replacement
alors peut être que toi ça t'intéresse pas et c'est ton droit
mais les autres n'ont pas a supporter des remarques ou des réponses inutiles et non constructives tel que
celle du post #2
avant de donner des conseils regarde de ton coté avant
c'est toujours pareil les chiwawa 🤣

y viendrait de dvp c'lui là que ça ne m'étonnerait pas
diabolo.gif
 

cathodique

XLDnaute Barbatruc
Mon cher Cador roi des connaissances de ce forum à priori :rolleyes:
je pense qu'il serait bien de redescendre un peu de ton piédestal 🤔

Un numéro de téléphone peut se traiter par un simple
VB:
TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)

Maintenant, ne connaissant pas la demande de départ, je n'irais pas plus en avant

Bonne continuation

Edit : je n'avais pas vu mais on peut ignorer un membre sur ce forum... cool 😜 ✌️
@wDog66 : Sur un piédestal ou non, @patricktoulon a toujours aidé les membres D'XLD sans avoir la grosse tête. Il partage volontiers ses connaissances et son expérience.
Personnellement, je lui en serai toujours reconnaissant.

Quant à la possibilité d'ignorer un membre, bonne idée. Elle est mise à la disposition des tous les membres.
Surtout, par rapport à un membre qui n'apporte rien à la discussion.

Bonne soirée.
 

patricktoulon

XLDnaute Barbatruc
une version plus récente
VB:
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
PhoneBox TextBox1, KeyCode
End Sub

Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
PhoneBox TextBox2, KeyCode
End Sub

Private Sub PhoneBox(TxtB As MSForms.TextBox, ByVal KeyCode As MSForms.ReturnInteger)
    'Collection textbox formatés 2022
    Dim Mask, X, L
    With TxtB
        X = .SelStart
       L = .SelLength: If L = 0 Then L = 1
        If .Value = "" Then .Value = "__ __ __ __ __": Mask = .Value: .SelStart = X Else Mask = .Value
        Select Case KeyCode
            Case 96 To 105, 48 To 57
                If KeyCode < 96 Then KeyCode = KeyCode + 48
                If X = 14 Then KeyCode = 0: Exit Sub
                If Mid(Mask, X + 1, 1) = " " Then X = X + 1
                Mid(Mask, X + 1, 1) = Chr(KeyCode - 48)
                KeyCode = 0
            Case 8:
                If X = 1 Then KeyCode = 0: .Value = "": Exit Sub
                If Mid(Mask, X, 1) = " " Then X = X - 1
                Mid(Mask, X, 1) = "_": KeyCode = 0: X = X - 2
            Case 9, 13
            Case Else: KeyCode = 0
        End Select
        .Value = Mask
       If X > 0 Then If Mid(Mask, X + 2, 1) = " " Then X = X + 1
       .SelStart = X + 1
    .SelLength = L - 1
    End With
End Sub
 

cathodique

XLDnaute Barbatruc
une version plus récente
VB:
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
PhoneBox TextBox1, KeyCode
End Sub

Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
PhoneBox TextBox2, KeyCode
End Sub

Private Sub PhoneBox(TxtB As MSForms.TextBox, ByVal KeyCode As MSForms.ReturnInteger)
    'Collection textbox formatés 2022
    Dim Mask, X, L
    With TxtB
        X = .SelStart
       L = .SelLength: If L = 0 Then L = 1
        If .Value = "" Then .Value = "__ __ __ __ __": Mask = .Value: .SelStart = X Else Mask = .Value
        Select Case KeyCode
            Case 96 To 105, 48 To 57
                If KeyCode < 96 Then KeyCode = KeyCode + 48
                If X = 14 Then KeyCode = 0: Exit Sub
                If Mid(Mask, X + 1, 1) = " " Then X = X + 1
                Mid(Mask, X + 1, 1) = Chr(KeyCode - 48)
                KeyCode = 0
            Case 8:
                If X = 1 Then KeyCode = 0: .Value = "": Exit Sub
                If Mid(Mask, X, 1) = " " Then X = X - 1
                Mid(Mask, X, 1) = "_": KeyCode = 0: X = X - 2
            Case 9, 13
            Case Else: KeyCode = 0
        End Select
        .Value = Mask
       If X > 0 Then If Mid(Mask, X + 2, 1) = " " Then X = X + 1
       .SelStart = X + 1
    .SelLength = L - 1
    End With
End Sub
Bonjour @patricktoulon ;),

Merci beaucoup Patrick.
Je te suis sincèrement très reconnaissant pour ton partage.
Bon dimanche.
 

Discussions similaires

Réponses
18
Affichages
884
Réponses
16
Affichages
726

Statistiques des forums

Discussions
315 088
Messages
2 116 089
Membres
112 658
dernier inscrit
doro 76