Excel et/ou VBA : 1er et dernier jour du mois
Résolu/Fermé
sym59
sym59
- Messages postés
- 40
- Date d'inscription
- jeudi 10 mai 2012
- Statut
- Membre
- Dernière intervention
- 11 août 2015
sym59
- Messages postés
- 40
- Date d'inscription
- jeudi 10 mai 2012
- Statut
- Membre
- Dernière intervention
- 11 août 2015
A voir également:
- Excel et/ou VBA : 1er et dernier jour du mois
- Excel et/ou VBA : 1er et dernier jour du mois ✓ - Forum - VB / VBA
- Formules pour 1er et dernier jour du trimestre ? ✓ - Forum - Excel
- Php dernier jour du mois - Conseils pratiques - PHP
- EXCEL Somme des 30 derniers jours ✓ - Forum - Excel
- Excel - Dernier jour ouvre du mois ✓ - Forum - Excel
2 réponses
sym59
11 mai 2012 à 10:19
- 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
michel_m
11 mai 2012 à 10:52
- Messages postés
- 16574
- Date d'inscription
- lundi 12 septembre 2005
- Statut
- Contributeur
- Dernière intervention
- 3 août 2022
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
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
michel_m
11 mai 2012 à 11:07
- Messages postés
- 16574
- Date d'inscription
- lundi 12 septembre 2005
- Statut
- Contributeur
- Dernière intervention
- 3 août 2022
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
sym59
11 mai 2012 à 12:11
- 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!
le code marche dans le format souhaité! encore un grand merci!
sym59
11 mai 2012 à 12:12
- 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 :
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 ;)
sym59
11 mai 2012 à 12:24
- 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 :
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