Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
alors voila j'ai un souci
pour deux de mes macro je dois connaitre le nombre de jour qu'il y a dans le mois en cours (par exemple pour juillet il y a 31 jours )
j'ai donc fais une petite fonction
comme ceci :
Code:
Function DaysInAMonth(d As Date) As Integer
DaysInAMonth = DateAdd("m", 1, d) - d
End Function
Function DaysInThisMonth(month, year As Integer) As Integer
DaysInThisMonth = DaysInAMonth("1/" & month & "/" & year)
End Function
et dans mes macro je met ce code :
Code:
Dim Annee, Jour, Mois As Integer
Jour = Day(Now)
Mois = month(Now)
Année = year(Now)
nbjour = DaysInThisMonth(Mois, Année)
or pour l'une de mes macro ca passe et pas pour l'autre 😱
Tu envoies en paramètre une donnée Variant, alors que ta fonction...
Code:
[SIZE=2]Function DaysInThisMonth(month, [B]year As Integer[/B]) As Integer
...[/SIZE]
...attend un argument de type Integer.
L'ajout du mot clé ByVal te permet donc de contourner cette erreur, la donnée étant passée "par valeur" et non plus "par référence" (comme ça l'est par défaut).
Pour éviter ce genre d'erreur à l'avenir, je te conseille vivement l'utilisation de l'instruction Option Explicit en entête de chaque module (dans VBE, voir Outils / Options / Editeur / Déclaration des variables obligatoires)
Par ailleurs, ce qui est valable pour les Dim est également valable pour les arguments de fonction : tu devrais aussi mettre : "Month As..." comme tu l'as fait pour "Year As...". On peut remarquer également que la variable correspondant au Mois (de valeur 12 maximum) peut être déclarée As Byte au lieu d'Integer. Il en est de même pour la variable nbjours (que tu as d'ailleurs oublié de déclarer).
De plus, il n'est pas vraiment conseillé d'utiliser des noms de variables comme Month ou Year car ce sont des mots réservés VBA (ce sont des fonctions VBA existantes !)
Pour finir, tu peux simplifier son code comme suit (et éviter l'utilisation de la fonction intermédiaire DaysInAMonth) :
Code:
[SIZE=2]Option [COLOR=navy]Explicit[/COLOR]
[COLOR=navy]Sub[/COLOR] Test()
[COLOR=navy]Dim [/COLOR]Annee[COLOR=navy] As Integer[/COLOR][COLOR=navy]
Dim [/COLOR]Mois[COLOR=navy] As Byte[/COLOR][/SIZE][SIZE=2], nbjour[COLOR=navy] As Byte[/COLOR][/SIZE][SIZE=2]
Mois = month([COLOR=navy]Date[/COLOR])
Annee = year([COLOR=navy]Date[/COLOR])
nbjour = DaysInThisMonth(Mois, Annee)
MsgBox nbjour
[COLOR=navy]End Sub[/COLOR]
[COLOR=navy]Function[/COLOR] DaysInThisMonth(vMois[COLOR=navy] As Byte[/COLOR], vAnnee[COLOR=navy] As Integer[/COLOR])[COLOR=navy] As Byte[/COLOR]
DaysInThisMonth = Day([COLOR=navy]Date[/COLOR]Serial(vAnnee, vMois + 1, 1) - 1)
[COLOR=navy]End[/COLOR] Function[/SIZE]
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.