Appel de procédure incorrect (problème de mois)

Bonjour,

Je me sens un peu bête car j'ai conçu un gros programme excel basé sur un tableau avec des mois et des années.

J'ai utilisé le code suivant :

MonthName(Month(Date) - 6)

Oui mais lorsque nous sommes au mois de Juin par exemple, on a MonthName(0) et là ça coince.

Une idée?

Merci d'avance.

Cordialement.

Bonjour.

Kuartz a écrit :
MonthName(Month(Date) - 6)

Oui mais lorsque nous sommes au mois de Juin par exemple, on a MonthName(Month(0) et là ça coince.

Nope. On a MonthName(0).

Pourquoi dois-tu faire - 6 ? A quoi correspondent ces appels ? Avec aussi peu d'infos on ne peut pas aider (à moins d'avoir un devin !)

Bonne journée.

C'est parti pour les explications :

Je dois créer un tableau se remplissant automatiquement avec des indexations gasoil. J'ai un tableau avec ce qu'on appelle des indices CNR que je vais chercher sur le net. Chaque formule est différente bien sûr en fonction du client.

Voici un exemple de formule :

(Indice CNR d'il y a 4 mois / 2 * 1.25

Mon tableau où je prend les indices CNR comporte des colonnes Janvier / Février / Mars etc et des années sur les lignes. J'ai une fonction (Mois_Annee()) avec une boucle qui va me chercher l'info où j'ai besoin dans le tableau. La première boucle va chercher le mois et la seconde l'année. En gros mon code donnera :

Range("A2").Value = ((Mois_Annee(MonthName(Month(Date) - 4)), Year(DateSerial(Year(Date), Month(Date) - 4, Day(Date)))) / 2 * 1.25

Seulement voilà, l'automatisme ne fonctionnera pas si nous sommes au mois d'Avril, et pour cause on aura :

Mois_Annee(MonthName(0), Year.....

Si cela peut intéresser, je mets ma fonction Mois_Annee() ci-dessous, elle permet d'aller chercher l'indice CNR en question dans le tableau, elle marche parfaitement pour l'avoir testée.

Function Mois_Annee(Mois As String, Annee As Integer)

Dim DL As Long, DC As Long, i As Integer, j As Integer

DL = Sheets(1).Cells(Application.Rows.Count, 1).End(xlUp).Row

DC = Sheets(1).Cells(1, Application.Columns.Count).End(xlToLeft).Column

For i = 2 To DL

If Sheets(1).Range("A" & i) = Annee Then

    Exit For

End If

Next i

For j = 2 To DC

If Sheets(1).Cells(1, j) = Mois Then

    Exit For

End If

Next j

Mois_Annee = Sheets(1).Cells(i, j).Value

End Function

Merci beaucoup pour vos réponses.

Cordialement.

Hmmm

à tenter

If Month(Date) > 4 then
Range("A2").Value = ((Mois_Annee(MonthName(Month(Date) - 4)), Year(DateSerial(Year(Date), Month(Date) - 4, Day(Date)))) / 2 * 1.25
Else 
Range("A2").Value = ((Mois_Annee(MonthName(8 + Month(Date) )), Year(DateSerial(Year(Date), Month(Date) - 4, Day(Date)))-1) / 2 * 1.25
End if

En gros si on est au dessus de quatre : m-4/y

Si on est en dessous 8+m/y-1

Re,

Je dois avoir une centaine de calcul car j'ai décidé de faire les calculs pour chaque client sur les 4 derniers mois.

Du coup pour les mois d'avant -4 devient -5 puis -6 puis -7. Ton code marche et j'y avais pensé. J'espérais quelque chose d'un peu moins lourd mais je vais m'en contenter je te remercie. Pour chaque calcul, j'aurais donc une condition qui élimine la possibilité d'avoir 0 dans les parenthèses.

Cordialement.

Bonjour,

pour être un peu moins lourds (à verifier je peut pas le tester pour le moment)

Year(DateSerial(Year(Date), Month(Date) - 4, Day(Date)))

et

year(Date)

c'est pas la même chose?

Bonjour,

Non, le Year(DateSerial(Year(Date), Month(Date) - 6, Day(Date)))) me donne par exemple l'année d'il y a 6 mois. Qui peut donc être 2015

Ce qui m'étonne c'est que :

 Year(DateSerial(Year(Date), Month(Date) - 9, Day(Date))))

Me donne 2015.

Je viens d'avoir l'illumination de fou en écrivant ce message. Je me suis dis, si Year(DateSerial(Year(Date), Month(Date) - 9, Day(Date)))), pourquoi le mois ne fonctionnerait pas??

J'ai donc écrit :

MsgBox(MonthName(Month(DateSerial(Year(Date), Month(Date) - 9, Day(Date)))))

Et VICTOIRE, j'obtiens octobre. Problème résolu. Merci

Rechercher des sujets similaires à "appel procedure incorrect probleme mois"