Excel et/ou VBA : 1er et dernier jour du mois
Résolu
sym59
Messages postés
46
Statut
Membre
-
sym59 Messages postés 46 Statut Membre -
sym59 Messages postés 46 Statut Membre -
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