Excel et/ou VBA : 1er et dernier jour du mois
Résolu
sym59
Messages postés
40
Date d'inscription
Statut
Membre
Dernière intervention
-
sym59 Messages postés 40 Date d'inscription Statut Membre Dernière intervention -
sym59 Messages postés 40 Date d'inscription Statut Membre Dernière intervention -
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>
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>
A voir également:
- Excel et/ou VBA : 1er et dernier jour du mois
- Word et excel gratuit - Guide
- Si et ou excel - Guide
- Liste déroulante excel - Guide
- Déplacer colonne excel - Guide
- Excel compter cellule couleur sans vba - Guide
2 réponses
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
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
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
je l'ai légèrement modifié pour le format que je souhaite :
Il affiche en plus l'heure ;)
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 ;)
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 :
Petite précision : la zone source est E14:E26
E14 = cellule vide
E15 = "janvier"
et
Il y a un décalage si on lui indique de chercher en E14:E26 et non E15:E26
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