Message d'erreur type d'argument Byref incompatible

Angelo7891

XLDnaute Junior
Bonjour le forum

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 :eek:
 

Hervé

XLDnaute Barbatruc
Re : Message d'erreur type d'argument Byref incompatible

re

Dim Annee, Jour, Mois As Integer

dans cette syntaxe, annee et jour sont déclarées variant et non integer

Dim Annee as integer, Jour as integer, Mois As Integer

tandis que là toutes les variables sont bien du type integer.

de plus :
dim annee
Année = year(Now)

salut

salut
 

Angelo7891

XLDnaute Junior
Re : Message d'erreur type d'argument Byref incompatible

Dim Annee, Jour, Mois As Integer

dans cette syntaxe, annee et jour sont déclarées variant et non integer

Dim Annee as integer, Jour as integer, Mois As Integer

tandis que là toutes les variables sont bien du type integer.

depusi le temps que je fais ca !!

merci en tout ca le ByRef semble marché maintenant j'ai d'autre probleme lol
mais bon d'abord je vais voir ce que je peux faire moi meme
 

myDearFriend!

XLDnaute Barbatruc
Re : Message d'erreur type d'argument Byref incompatible

Bonsoir Angelo7891, Hervé,

En complément des remarques (judicieuses comme d'habitude !) d'Hervé, j'ajouterais que :

La variable Année n'étant pas déclarée (c'est Annee qui l'est), elle est donc considérée comme de type Variant.
Par conséquent, quand tu fais :
Code:
[SIZE=2]nbjour = DaysInThisMonth(Mois, [B]Année[/B])[/SIZE]
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]
Cordialement,
 

Discussions similaires

Réponses
32
Affichages
4 K

Statistiques des forums

Discussions
312 636
Messages
2 090 379
Membres
104 515
dernier inscrit
lnc-glr