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
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
A voir également:
- Excel et/ou VBA : 1er et dernier jour du mois
- Si et excel - Guide
- Word et excel gratuit - Guide
- Liste déroulante excel - Guide
- Déplacer une colonne excel - Guide
- Excel compter cellule couleur sans vba - Guide
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
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
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 312
11 mai 2012 à 10:52
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
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 312
11 mai 2012 à 11:07
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
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
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
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
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
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
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