USF ...pour automatiser des saisies horaires...

Christian0258

XLDnaute Accro
Bonjour à tout le forum,

Je souhaiterais votre aide pour l'écriture de code VBA.

J'ai créé un USF, afin d'automatiser la saisie d'horaires.... voir fichier joint....

Je vous remercie pour le temps que vous voudrez bien m'accorder.

Bien à vous, bon dimanche à tous.
Christian
 

Pièces jointes

  • USF saisies d'horaires.zip
    27.9 KB · Affichages: 32

Papou-net

XLDnaute Barbatruc
Re : USF ...pour automatiser des saisies horaires...

Bonjour Christian0258,

Ci-joint copie de ton fichier avec les macros modifiées. Pour permettre d'effacer les chiffres saisis, j'ai dû ajouter une procédure événementielle :

Code:
Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 8 Then
  Effacer = True
  Select Case Right(TextBox2, 1)
    Case Is = ":", Is = "-", Is = " "
      TextBox2 = Left(TextBox2, Len(TextBox2) - 1)
      Cancel = True
    Case Else
  End Select
  Effacer = False
  Exit Sub
End If
If KeyCode < 96 Or KeyCode > 105 Then
  Effacer = True
  Application.EnableEvents = False
  MsgBox ("Ne saisissez pas du texte!")
  TextBox2 = IIf(Len(TextBox2) < 2, "", Replace(TextBox2, Right(TextBox2, 1), ""))
  Application.EnableEvents = True
End If
End Sub

sans quoi il était impossible d'effacer les caractères de séparation.

La variable "Effacer", déclarée dans "Module1" évite que le caractère de séparation ne soit ajouté après effacement, suite au déclenchement de la procédure "TextBox2_Change" :

Code:
Private Sub TextBox2_Change()
If Effacer = True Then Exit Sub
Application.EnableEvents = False
Select Case Len(TextBox2)
  Case 2, 8, 14, 20, 26, 32
    TextBox2 = TextBox2 & ":"
  Case 5, 17, 29
    TextBox2 = TextBox2 & "-"
  Case 11, 23
    TextBox2 = TextBox2 & " "
End Select
Application.EnableEvents = True
End Sub

Espérant avoir résolu.

Cordialement.
 

Pièces jointes

  • Copie de FonctionHeureRoger.xls
    91.5 KB · Affichages: 53

Christian0258

XLDnaute Accro
Re : USF ...pour automatiser des saisies horaires...

Re le forum, Papou-net,

Merci, Papou-net pour ce gros et beau boulot.

C'est exactement ce que je souhaitais, une petite chose toutefois ; comment ne pas mettre l'espace si rien ne suit un bloc de saisie

expl : 08:00-16:00 ne pas mettre un espace derrière le dernier chiffre SAUF SI UN AUTRE BLOC est saisi après...???

Encore un grand merci.

Bien à toi,
Christian
 

Papou-net

XLDnaute Barbatruc
Re : USF ...pour automatiser des saisies horaires...

RE Christian258,

Le plus simple est de supprimer le dernier espace lors de la sortie du contrôle. Par exemple :

Code:
Private Sub TextBox2_Exit()
If Right(TextBox2, 1) = " "  Then Right(TextBox2, 1) = ""
End Sub

Bon dimanche à toi.

Cordialement.
 

Papou-net

XLDnaute Barbatruc
Re : USF ...pour automatiser des saisies horaires...

Re, le forum, Papou-net,

Merci, Papou-net pour ta solution.
Dis-moi, où dois-je insérer ce bout de code ?

Bien à toi,
Christian

Bonsoir Christian,

Pour insérer ce code :

Dans la fenêtre de l'éditeur VBA, tu affiches le formulaire (UserForm1), tu double-cliques sur 'TextBox2' et, dans la liste déroulante en haut à droite de la fenêtre principale de l'éditeur (qui affiche 'Change' par défaut), tu choisis 'Exit'. Tu obtiens ces deux lignes :

Code:
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)

End Sub

Par contre, la ligne de code que je t'ai communiquée ne supprime pas le dernier espace car l'événement 'Change' s'applique. Il faut donc le neutraliser, ce qui donne au final :

Code:
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Right(TextBox2, 1) = " " Then
  Effacer = True
  TextBox2 = Left(TextBox2, Len(TextBox2) - 1)
  Effacer = False
End If
End Sub

Voila, j'espère que cela répond à ta question.

En te souhaitant une bonne nuit.

Cordialement.
 

Discussions similaires