Ces quelques lignes car je me pose une petite question pour savoir si c'est possible...
J'ai dans un Userform, une TextBox qui sert à afficher une date.
Cette date est issue d'une cellule dans mon classeur mais l'utilisateur à la possibilité de la modifier (ou non).
Aussi, en cas de modification de cette dernière par l'utilisateur, je me demandais s'il était possible qu'en saisissant cette date, que le système propose l'année en cours du système ?
Exemple : quand on saisit 03/03/ => je voudrais que ça me propose 03/03/2023 (mais conserver la possibilité de saisir une autre année si celle proposée ne convient pas)
L'idée serait que si la proposition convient, quand on actionne la touche "entrée" ou "tabulation" voir même un "clic" dans une autre TextBox, le choix proposé (s'il n'est pas modifié) soit conservé.
Je précise que j'utilise un code qui permet l'insertion automatique du ''/'' après les 2ème et 5ème caractères.
Private Sub TextBox1_Change()
With TextBox1
If .Value Like "*[!0-9|!/]*" Then .Value = "": Exit Sub
If Len(.Value) = 5 Then
If IsDate(.Value & "/" & Year(Date)) Then
.Value = .Value & "/" & Year(Date)
Else
.Value = ""
End If
End If
End With
End Sub
mais si tu utilise le moteur de recherche du forum tu trouvera avec mon pseudo des model de code bien plus precis et opérant interdisant toute erreur de saisie
Private Sub TextBox1_Change()
With TextBox1
If .Value Like "*[!0-9|!/]*" Then .Value = "": Exit Sub
If Len(.Value) = 5 Then
If IsDate(.Value & "/" & Year(Date)) Then
.Value = .Value & "/" & Year(Date)
Else
.Value = ""
End If
End If
End With
End Sub
mais si tu utilise le moteur de recherche du forum tu trouvera avec mon pseudo des model de code bien plus precis et opérant interdisant toute erreur de saisie
Merci pour votre réponse. Votre code fonctionne correctement. Merci pour votre aide.
Pour perfectionner d'avantage la saisie, je me demandais si il était possible que les "/" s'ajoutent (ou plûtot LE "/" s'ajoute automatiquement après avoir saisie les 2 chiffres du jour ?
J'ai tenté d'ajouter le code suivant :
VB:
Me.TextBox1.MaxLength = 10
MaValeur = Len(Me.TextBox1)
If MaValeur = 2 Or MaValeur = 5 Then Me.TextBox1 = Me.TextBox1 & "/"
Hélas sans succès...
Auriez-vous une idée ?
Merci
Je vais regarder votre pseudo dans le moteur de recherche, sans doute de bonnes choses à voir.
re
comme je te l'ai dis tu peux trouver des solution plus pointu avec mon pseudo
et "textbox formaté"
alors oui le slach auto est possible mais dans l'event change serait une erreur car
si tu te trompe
exemple tu veux rentrer le le 25/12 tu tape
24/1
tu ne peux plus revenir en arrière car le slash est auto a 2 caractères
c'est un autre event qu'il faut utiliser et en fonction des touche car on doit pouvoir aussi revenir en arriere ou supprimer la saisie
c'est l'event keydown et c'est un peu plus complexe dans le sens ou on peut tout gérer
je te donne donc le truc mais la prochaine fois fait l'effort de faire une recherche sur le forum
c'est une version allégée sans contrôle de la validité de la date saisie
si tu veux le contôle fait une recherche
VB:
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim V$, K$
With TextBox1
V = .Value
Select Case KeyCode
Case 96 To 105
.SelStart = Application.Max(Len(V) - 1, 0)
If Len(V) >= 5 Then .Value = Mid(V, 1, 5) & "/" & Year(Date): KeyCode = 0: Exit Sub
K = KeyCode - 48
If Len(V) = 2 Then V = V & "/"
V = V & Chr(K)
If Len(V) = 2 Then V = V & "/"
If Len(V) = 5 Then V = V & "/" & Year(Date)
KeyCode = 0
.Value = Mid(V, 1, 10)
Case 8, 46
Case Else
KeyCode = 0
End Select
End With
End Sub
re
comme je te l'ai dis tu peux trouver des solution plus pointu avec mon pseudo
et "textbox formaté"
alors oui le slach auto est possible mais dans l'event change serait une erreur car
si tu te trompe
exemple tu veux rentrer le le 25/12 tu tape
24/1
tu ne peux plus revenir en arrière car le slash est auto a 2 caractères
c'est un autre event qu'il faut utiliser et en fonction des touche car on doit pouvoir aussi revenir en arriere ou supprimer la saisie
c'est l'event keydown et c'est un peu plus complexe dans le sens ou on peut tout gérer
je te donne donc le truc mais la prochaine fois fait l'effort de faire une recherche sur le forum
c'est une version allégée sans contrôle de la validité de la date saisie
si tu veux le contôle fait une recherche
VB:
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim V$, K$
With TextBox1
V = .Value
Select Case KeyCode
Case 96 To 105
.SelStart = Application.Max(Len(V) - 1, 0)
If Len(V) >= 5 Then .Value = Mid(V, 1, 5) & "/" & Year(Date): KeyCode = 0: Exit Sub
K = KeyCode - 48
If Len(V) = 2 Then V = V & "/"
V = V & Chr(K)
If Len(V) = 2 Then V = V & "/"
If Len(V) = 5 Then V = V & "/" & Year(Date)
KeyCode = 0
.Value = Mid(V, 1, 10)
Case 8, 46
Case Else
KeyCode = 0
End Select
End With
End Sub
Merci d'avoir à nouveau pris le temps de m'éclairer sur mon problème.
J'ai pris soin hier soir de regarder un de tes fichiers (collection fausse boite de dialogue)
J'en profite ici pour te féliciter car c'est un sacré travail.
C'est en voyant ce genre de programmation que je me sent tout petit en la matière.
Je vais tenter de voir si je trouve comment modifier ton code pour avoir la possibilité de changer l'année pour le cas ou celle proposée ne serait pas la bonne.
Sans partir défaitiste, j'y crois peu mais je vais tenter quand même car ça serait dommage d'être si près du but sans obtenir le résultat final désiré. A mes yeux, c'est du détail mais pourquoi ne pas utiliser les capacités de l'informatique quand cela est possible...
En tout cas, merci sincèrement pour le temps passé.
re
déja pour commencer je t'ajoute le contrôle de la validité de la date saisie
si tu commence par taper plus que 31 c'est vide
si tu tape 31/02 ca revient a 31/
si tu tape 25/14 ca revient à 31/
les slachs sont toujours automatiques
l'année est toujours automatique
après pour le choix de l'année je pige pas tres bien ton intention
car ta demande d'ailleurs ça en est le titre c'est bien l'année en cours
voici le code avec le contrôle de validité date
VB:
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim V$, K$
With TextBox1
V = .Value
Select Case KeyCode
Case 96 To 105
.SelStart = Application.Max(Len(V) - 1, 0)
If Len(V) >= 5 Then .Value = Mid(V, 1, 5) & "/" & Year(Date): KeyCode = 0: Exit Sub
K = KeyCode - 48
If Len(V) = 2 Then V = V & "/"
V = V & Chr(K)
If Len(V) = 2 Then
V = V & "/"
If Not IsDate(V & "12/2023") Then V = ""
End If
If Len(V) = 5 Then
V = V & "/" & Year(Date)
If Not IsDate(V) Then V = Mid(V, 1, 3)
End If
KeyCode = 0
.Value = Mid(V, 1, 10)
Case 8, 46
Case Else
KeyCode = 0
End Select
End With
End Sub
re
déja pour commencer je t'ajoute le contrôle de la validité de la date saisie
si tu commence par taper plus que 31 c'est vide
si tu tape 31/02 ca revient a 31/
si tu tape 25/14 ca revient à 31/
les slachs sont toujours automatiques
l'année est toujours automatique
après pour le choix de l'année je pige pas tres bien ton intention
car ta demande d'ailleurs ça en est le titre c'est bien l'année en cours
voici le code avec le contrôle de validité date
VB:
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim V$, K$
With TextBox1
V = .Value
Select Case KeyCode
Case 96 To 105
.SelStart = Application.Max(Len(V) - 1, 0)
If Len(V) >= 5 Then .Value = Mid(V, 1, 5) & "/" & Year(Date): KeyCode = 0: Exit Sub
K = KeyCode - 48
If Len(V) = 2 Then V = V & "/"
V = V & Chr(K)
If Len(V) = 2 Then
V = V & "/"
If Not IsDate(V & "12/2023") Then V = ""
End If
If Len(V) = 5 Then
V = V & "/" & Year(Date)
If Not IsDate(V) Then V = Mid(V, 1, 3)
End If
KeyCode = 0
.Value = Mid(V, 1, 10)
Case 8, 46
Case Else
KeyCode = 0
End Select
End With
End Sub
Je m'excuse par avance si parfois je m'exprime pas correctement.
L'idée générale est d'obtenir le résultat suivant :
Quand il y a une saisie de date, l'utilisateur commence par taper le jour (admettons 04)
Ensuite le "/" s'ajoute automatiquement (ce qui devient 04/)
Puis l'utilisateur saisie le mois (par exemple 03)
Ce qui devient 04/03
Et l'idée de l'étape suivante serait que 04/03 devienne 04/03/2023 Mais en conservant la possibilité de modifier l'année (par exemple 04/03/2024 ou 04/03/2022)
Espérant ne pas être trop exigeant sur cette demande car j'avoue que toutes ces lignes de code me dépassent un peu (voir beaucoup)... Je comprends certaines choses mais je reste novice en la matière.
Pour information, mon fichier final s'adressera à des personnes âgées. Etant jeune, le "/" n'est pas un problème pour que je l'ajoute. Mais j'aimerais leur "macher" au maximum le travail pour un très certain confort d'utilisation.
Pensant qu'on pouvait faire tellement de choses (quand on dispose du savoir).
Même s'il est vrai que mon tout premier post indiquait cette précision, j'avoue qu'avec les romans que je fais, l'information était sans doute mal précisée...
En tout cas merci d'avoir pris le temps de regarder ce problème qui reste une idée de confort dont j'aurais bien aimé pouvoir intégrer dans mon code.