Trouver dernier jour mois précédent

Résolu/Fermé
a51432 Messages postés 37 Date d'inscription lundi 13 juillet 2015 Statut Membre Dernière intervention 20 octobre 2015 - Modifié par a51432 le 2/09/2015 à 15:33
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 - 2 sept. 2015 à 16:04
Bonjour,

Je cherche à trouver la date du dernier jour du mois dernier (hors week end).

Pour cela, j'ai testé le code suivant (qui ne fonctionne pas) :

Dim année
Dim MoisCh As String
Dim first, last As Date

année = Year(Now())
MoisCh = Format(Now(), "mm")
first = "01\" & MoisCh & "\" & année
last = first - 1

If Weekday(last) = 7 Then
last = last - 1
ElseIf Weekday(last) = 1 Then
last = last - 2
End If


la ligne : last = first - 1 ne renvoit pas le jour précédant le premier jour du mois actuel (= le dernier jour du mois précédant).

Auriez-vous une solution ?

Merci d'avance !
A voir également:

3 réponses

Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
2 sept. 2015 à 15:50
Bonjour

last = DateSerial(Year(Date), Month(Date), 1) - 1

A+
0
a51432 Messages postés 37 Date d'inscription lundi 13 juillet 2015 Statut Membre Dernière intervention 20 octobre 2015 1
2 sept. 2015 à 15:58
Merci beaucoup ça fonctionne !
0
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
Modifié par PlacageGranby le 2/09/2015 à 16:04
Bonjour,

Quelques petites erreur.

first = "01\" & MoisCh & "\" & année

Ne donnera pas une date mais une chaine texte.
Il faut utiliser Cdate() pour convertir la chaine texte en date.
Aussi, un backslash \ n'est pas reconnu comme délimiteur de date dans excel.
C'est soit le slash / ou le tiret -

Donc
Dim année
Dim MoisCh As String
Dim first as date, last As Date

année = Year(Now())
MoisCh = Format(Now(), "mm")
first = cdate("01/" & MoisCh & "/" & année)
last = first - 1


Dernière subtilitée
Dim first, last As Date

VBA n'assigne pas toute les variable comme étant une énumération du même type.
Ta déclaration, First sera un type variant, et Last sera une date.

Il n'y aura pas d'erreur même si First est un variant, mais j'imagine que le type variant consomme plus de mémoire et ton code est moins optimisé.
0