XL 2013 date fin de moi dans label

nadem0068

XLDnaute Junior
Bonsoir,

je viens vers vous car j'ai une erreur dans mon code VBA que je ne comprend pas.
j'ai deux bouton dans une userform.
1 bouton pour les mois et l'autre pour les années.
je cherche à afficher la date du dernier jour du mois sélectionné dans un label.
quand je change le mois pas de soucis mais quand je change l'année j'ai un code erreur.
je ne comprend pas pourquoi.

merci d'avance à tout ceux qui prendrons le temps de se pencher sur mon PB.;)
 

Pièces jointes

  • date fin de mois.xlsm
    21.9 KB · Affichages: 5

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Essaye ça :
VB:
Private Sub UserForm_Initialize()
'
Dim x As Date

    With Me.SpinButton1
        .Min = 1 'Valeur mini
        .Max = 12 'Valeur maxi
        'Spécifie le déplacement se produisant lorsque l'utilisateur clique sur
        'les flèches de défilement dans le contrôle SpinButton
        '(La valeur par défaut = 1)
        .SmallChange = 1
        .Value = Month(Now())
    End With
    Label1.Caption = SpinButton1.Value

    With SpinButton2
        .Min = 2000 'Valeur mini
        .Max = 2100 'Valeur maxi
        'Spécifie le déplacement se produisant lorsque l'utilisateur clique sur
        'les flèches de défilement dans le contrôle SpinButton
        '(La valeur par défaut = 1)
        .SmallChange = 1
        .Value = Year(Now())
    End With
    Label2.Caption = SpinButton2.Value

    x = CDate(Day(Now) & "/" & Label1.Caption & "/" & Label2.Caption)
    Label3.Caption = CDate(Application.WorksheetFunction.EoMonth(x, 0))

End Sub
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil

Une autre façon
(j'ai renseigné en dur (dans les propriétés des Spinbutton) leur Min, Max et SmallChange
VB:
Dim Jour As Date
Private Sub SpinButton1_Change()
Label1.Caption = SpinButton1.Value
Jour = CDate("1-" & Label1.Caption & "-" & Label2.Caption)
Label3.Caption = DJ(Jour)
End Sub

Private Sub SpinButton2_Change()
Label2.Caption = SpinButton2.Value
Jour = CDate("1-" & Label1.Caption & "-" & Label2.Caption)
Label3.Caption = DJ(Jour)
End Sub

Function DJ(D As Date) As Date
DJ = DateSerial(Year(D), Month(D) + 1, 0)
End Function

Private Sub UserForm_Initialize()
Label1.Caption = SpinButton1.Min
Label2.Caption = SpinButton2.Min
Label3.Caption = CDate("1-" & SpinButton1.Min & "-" & SpinButton2.Min)
End Sub
NB: test OK lors de mon test sur mon PC.
 

p56

XLDnaute Occasionnel
Bonjour à tous,
Est-ce qu'on peut se permettre de proposer de simplifier avec un seul Spinbutton et un seul Label?
Demo_dtfdm.gif


Le code devient alors :
VB:
Private Sub UserForm_Initialize()
    Me.SpinButton1.Value = DateDiff("m", DateSerial(2021, 1, 1), Date)
End Sub


Private Sub SpinButton1_Change()
Dim Dt As Date, Sng As Single

    Sng = Me.SpinButton1.Value / 24 / 12
    Dt = DateAdd("m", 1, DateSerial(2021 + Hour(Sng), 1 + Minute(Sng) / 5, 1))
    Me.Label1.Caption = DateAdd("d", -1, Dt)
End Sub
P.
 

Pièces jointes

  • date fin de mois.xlsm
    22.6 KB · Affichages: 9

Staple1600

XLDnaute Barbatruc
Re

Désolé, je suis encore sous Windows 10
(celui-ci me disant que mon PC ne peut recevoir W11)

J'ai cru que c'était grâce aux API, puis j'ai ouvert ton fichier
alors j'ai cru que c'était avec les nouvelles versions d'Excel
(Désolé bis, je suis encore sous Excel 2013 ;))

En tout cas, ton code est concis, simple et efficace.
Bravo.
 

Discussions similaires

Réponses
14
Affichages
718

Statistiques des forums

Discussions
312 163
Messages
2 085 859
Membres
103 005
dernier inscrit
gilles.hery