Microsoft 365 Insérer Automatiquement l'Année en cours

Yoyo60

XLDnaute Junior
Bonsoir à tous et à tous,

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.

Qu'en pensez-vous ?

Merci

Yoyo
 

patricktoulon

XLDnaute Barbatruc
Bonsoir
un exemple dans l'event change
VB:
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

bonsoir
 
Dernière édition:

Yoyo60

XLDnaute Junior
Bonsoir
un exemple dans l'event change
VB:
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

bonsoir
Bonsoir Patrick.

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.
 

patricktoulon

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

Yoyo60

XLDnaute Junior
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
Bonjour Patrick,

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é.

Excellent week-end

Yoyo
 

patricktoulon

XLDnaute Barbatruc
tiens regarde
je tape sur google "textbox formaté patricktoulon" et regarde ce que je trouve et en premier en plus
1677919408565.png
 

Yoyo60

XLDnaute Junior
re
l'année est automatique et c'est bien l'année en cours dans le post #4 qui est ajouté automatiquement

tiens regarde
je tape sur google "textbox formaté patricktoulon" et regarde ce que je trouve et en premier en plus
Regarde la pièce jointe 1164826
re

J'ai regardé avec attention votre textbox formaté. Je vois que l'on peut faire pleins de choses...

Dans mon cas, la majeure partie du temps, cette année serait la bonne mais il ce peut qu'une autre année soit utilisée.

L'idée serait d'avoir la partie du code proposée dans le post #2 combinée avec celle du post #4

Je tente quelques essais.

Merci
 

patricktoulon

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

Yoyo60

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

Merci
 
Dernière édition:

Yoyo60

XLDnaute Junior
re
tu ne peux pas avoir l'année automatique et la possibilité de la changer ce n'est pas possible ça
tu t'en rend compte j'espère 🤣
Hihi.

Snifff

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.

Sincères salutations et bon week-end à vous
 

Discussions similaires

Statistiques des forums

Discussions
312 104
Messages
2 085 332
Membres
102 863
dernier inscrit
Selemani