Excel et/ou VBA : 1er et dernier jour du mois

Résolu/Fermé
sym59
Messages postés
40
Date d'inscription
jeudi 10 mai 2012
Statut
Membre
Dernière intervention
11 août 2015
- 10 mai 2012 à 17:37
sym59
Messages postés
40
Date d'inscription
jeudi 10 mai 2012
Statut
Membre
Dernière intervention
11 août 2015
- 11 mai 2012 à 12:24
Bonjour,

J'ai actuellement un soucis avec Excel : j'ai en Cellule M4 une liste déroulante contenant les 12 mois de l'année + une vide (la liste déroulante a comme source "Mois" en E16:E28) et en L4 l'année désirée (simple nombre complété manuellement).

Je souhaiterais obtenir, en fonction de ces deux cellules, deux dates en M2 et M3 indiquant le premier et dernier jour du mois:
imaginons qu'on choisisse "février" en M4 et qu'on remplisse "2012" en L4 ; je souhaiterais obtenir "02/01/2012 00:00:00" en M2 et "02/29/2012 23:59:59" en M3
j'ai essayé de passer par un nombre standard (40140 pour 02/01/2012), des concatenate, des string, text, value, long et plein d'autres "techniques" sous VBA mais je n'ai obtenu que du caca en boite sans la boite :-/

Quelqu'un a une idée? =)

J'ai également essayé de faire un calendrier comme expliqué en forum mais je n'ai jamais trouvé la boite à outils (1ère étape XD)
https://forums.commentcamarche.net/forum/affich-1136865-excel-existe-t-il-un-calendrier

Merci à tous ceux qui pourront m'aider!

<config>Windows 2003 / Internet Explorer 8.0</config>

2 réponses

sym59
Messages postés
40
Date d'inscription
jeudi 10 mai 2012
Statut
Membre
Dernière intervention
11 août 2015

11 mai 2012 à 10:19
Youhouuu! J'ai finis par trouver avec une solution plus simple que je ne l'avais imaginé =) Le code est peut être un peu barbarre mais il marche! je vous le met pour le prochain interessé!

Sub ActualMois()
 
Dim Mois As String              ' = janvier, février...
Dim NumMois As Double      '=0 ; 1 .. 12
Dim NumAnnee As Double      

Mois = Cells(4, 13)     'liste déroulante contenant le nom du mois en M4
NumAnnee = Cells(4, 14).Value      ' cellule contenant l'année : N4

If Mois = "janvier" Then              ' je définis NumMois selon la valeur de Mois
    NumMois = 1
    
ElseIf Mois = "février" Then
    NumMois = 2
    
ElseIf Mois = "mars" Then
    NumMois = 3
    
ElseIf Mois = "avril" Then
    NumMois = 4
    
ElseIf Mois = "mai" Then
    NumMois = 5
    
ElseIf Mois = "juin" Then
    NumMois = 6
    
ElseIf Mois = "juillet" Then
    NumMois = 7
    
ElseIf Mois = "aout" Then
    NumMois = 8
    
ElseIf Mois = "septembre" Then
    NumMois = 9
    
ElseIf Mois = "octobre" Then
    NumMois = 10
    
ElseIf Mois = "novembre" Then
    NumMois = 11
    
ElseIf Mois = "décembre" Then
    NumMois = 12
Else
    NumMois = 0
End If


'Voilà les formules : 

If NumMois <> 0 Then
    Cells(2, 13).FormulaR1C1 = "=DATE(" & NumAnnee & "," & NumMois & ",1)"
    Cells(3, 13).FormulaR1C1 = "=DATE(" & NumAnnee & "," & NumMois + 1 & ",1) - 1 + 0.99999" 'dernier jour du mois = 1er jour du mois suivant - 1
End If                      ' + 0.99999 correspond à 23h59
End Sub
0
michel_m
Messages postés
16574
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
3 août 2022
3 277
11 mai 2012 à 10:52
Bonjour

cela peut de faire par formule (toujours penser Excel avant de penser VBA)

pour le dernier jour du mois
=FIN.MOIS(DATE(L4;EQUIV(M4;E16:E27;0);1);0)
pour le premier du suivant
=DATE(L4;EQUIV(M4;E16:E27;0);1)

si excel<2007 l'utilitaire d'analyse doit être activé (outil-macros complémentaires)

si on tiens à VBA : un peu de patience
Michel
0
michel_m
Messages postés
16574
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
3 août 2022
3 277
11 mai 2012 à 11:07
et voilà par VBA (dates francophones)
Sub xxx()
Dim Mois As Byte
     Mois = Application.Match(Range("M4"), Range("E16:E27"), 0)
     Range("M2") = Format(DateSerial(Range("L4"), Mois, 1), "mm/dd/yyyy")
     Range("M3") = Format(DateSerial(Range("L4"), Mois + 1, 1) - 1, "mm/dd/yyyy")
End Sub
0
sym59
Messages postés
40
Date d'inscription
jeudi 10 mai 2012
Statut
Membre
Dernière intervention
11 août 2015

11 mai 2012 à 12:11
Parfait!

le code marche dans le format souhaité! encore un grand merci!
0
sym59
Messages postés
40
Date d'inscription
jeudi 10 mai 2012
Statut
Membre
Dernière intervention
11 août 2015

11 mai 2012 à 12:12
je l'ai légèrement modifié pour le format que je souhaite :

Sub xxx()
Dim Mois As Byte
     Mois = Application.Match(Range("M4"), Range("E16:E27"), 0)
     Range("M2") = Format(DateSerial(Range("L4"), Mois, 1), "m/d/yy h:mm;@")
     Range("M3") = Format(DateSerial(Range("L4"), Mois + 1, 1) - 1 + 0.99999, "m/d/yy h:mm;@")
End Sub



Il affiche en plus l'heure ;)
0
sym59
Messages postés
40
Date d'inscription
jeudi 10 mai 2012
Statut
Membre
Dernière intervention
11 août 2015

11 mai 2012 à 12:24
Enfaite non, j'ai parlé trop vite :s

La zone "source" contient 13 cellules : 12 pour chacun des mois et une vide.
Lorsque je choisis la vide, il me trouve une erreure... d'où la petite modif suivante :

Sub ActualMois2()

'Remplace ActualMois

Dim Mois As Byte
    If Range("M4") <> "" Then
     Mois = Application.Match(Range("M4"), Range("E15:E26"), 0)
     Range("M2") = Format(DateSerial(Range("N4"), Mois, 1), "m/d/yy h:mm;@")
     Range("M3") = Format(DateSerial(Range("N4"), Mois + 1, 1) - 1 + 0.99999, "m/d/yy h:mm;@")
    Else
        Range("M2") = ""
        Range("M3") = ""
    End If


End Sub


Petite précision : la zone source est E14:E26
E14 = cellule vide
E15 = "janvier"

et
Mois=Application... Range("E15...


Il y a un décalage si on lui indique de chercher en E14:E26 et non E15:E26
0