OVH Cloud OVH Cloud

date d'échéance en fin de décade

9 réponses
Avatar
maslaf
Que se passe-t'il? pourquoi n'ais-je aucune r=E9ponse de=20
mon post de cette apr=E8s-midi? Merci de ne pas me bouder,=20
j'ai vraiment besoin de votre aide car ce nouvel =E9l=E9ment=20
me fausse compl=E8tement mon pr=E9visionnel de tr=E9sorerie!
Merci encore =E0 ceux qui voudront bien m'aider.
Maslaf

9 réponses

Avatar
anonymousA
bonjour,

ce n'est pas que je ne veuille pas répondre mais je ne comprends pas ton
problème du point de vue conceptuel car avant de m'attaquer à du code,
il faut que je comprenne ce que dont tu as besoin.
Un petit cours avec un exemple me ferait le plus grand bien.

A+

Que se passe-t'il? pourquoi n'ais-je aucune réponse de
mon post de cette après-midi? Merci de ne pas me bouder,
j'ai vraiment besoin de votre aide car ce nouvel élément
me fausse complètement mon prévisionnel de trésorerie!
Merci encore à ceux qui voudront bien m'aider.
Maslaf


Avatar
Paul V.
Bonjour,

AMHA, tu n'as pas eu de réponse parce que personne ne t'a répondu ;-)

Et personne ne t'a répondu car personne n'est obligé mais surtout parce que
ta question est ambigüé.

Tu ne précise pas ta notion de décade, tu ne précise pas la façon dont c'est
encodé et tu espères que quelqu'un aura envie de se casser le ... pour
deviner non seulement ce que tu veux mais en plus comment tu le veux.

Donc si tu veux une réponse à cette question simplissime (celui qui a écrit
la procédure originale peut le faire en trente seconde - qui est-ce? ),
repose ta question clairement en définissant ta notion de décades, les
différents cas de figure et la façon de déterminer le mode d'échéance.
Encore AMHA, dans ces conditions tu auras une réponse rapide.

Bonne chance

Paul V

"maslaf" a écrit dans le message de
news: 016b01c50318$dda629c0$
Que se passe-t'il? pourquoi n'ais-je aucune réponse de
mon post de cette après-midi? Merci de ne pas me bouder,
j'ai vraiment besoin de votre aide car ce nouvel élément
me fausse complètement mon prévisionnel de trésorerie!
Merci encore à ceux qui voudront bien m'aider.
Maslaf
Avatar
maslaf
Merci, anonymous, de l'intêret que tu portes à mon
problème, donc voici plus d'explications:
sur mon tableur j'ai notamment 2 colonnes dont l'une
contient les dates de facturation ( qui correspond
à "dat" ) et l'autre les conditions de paiement ( "cond").
une troisième colonne contient la date de paiement
calculée par le module ci-dessous. Les cellules de cette
colonne ont toutes comme formule: " = echeance
(date,cond) ".
Donc, en mettant dans la 1ère colonne la date de facture,
et dans la 2ème les conditions ( par ex.: 90JFDM" pour 90
jours fin de mois ou "60JNETS" pour 60 jours nets),
j'obtiens dans la cellule qui a comme formule " ìheance
(dat,cond)" la date de paiement.
Ce qu'il me faudrait, c'est une ligne en plus dans le
module ci-dessous qui commencerait par: " If Right(cond,
5) = "JFDEC" Then ..." pour les fins de décade.
J'espère avoir été clair.
Merci encore.

rappel du module actuel:

Public Function echeance(dat, cond)
'trouve la date d'échéance d'un paiement au 'dat'
à 'cond'
'exemple : ìheance(A1;B1)
Application.Volatile

'si dat est manquant ou vide ou si cond est manquant ou
vide -> renvoit 0
If IsMissing(dat) Or IsMissing(cond) Or IsEmpty(dat) Or
IsEmpty(cond) Then
dat = 0: GoTo etiq

f5 = dat.Value: cond = cond.Value

If Right(cond, 4) = "JFDM" Then
dat = DateSerial(Year(f5), Month(f5) + 1, -1) + CDbl
(Left(cond, InStr(1,
cond, "JFDM") - 1))
Else
If Right(cond, 5) = "JNETS" Then
dat = f5 + CDbl(Left(cond, InStr(1, cond, "JNETS") -
1))
Else
dat = 0
End If
End If

etiq:
'renvoyer le résultat à la fonction
echeance = dat

End Function
Avatar
anomymousA
bonjour,

un truc comme ca si j'ai vraiment tout compris à ta demande. Mais si c'est
ca, c'est tellement facile et comme tu as l'air de connaitre un peu VBA je me
demande comment tu n'as pas pu trouver donc je suis dubitatif sur ma réponse.
Je suis resté dasn l'esprit du code initial mais il pourrait sans doute etre
plus clair.

Public Function echeance(dat, cond)
'trouve la date d'échéance d'un paiement au 'dat'
'Ã 'cond'
'exemple : ìheance(A1;B1)
Application.Volatile

'si dat est manquant ou vide ou si cond est manquant ou vide -> renvoit 0
If IsMissing(dat) Or IsMissing(cond) Or IsEmpty(dat) Or IsEmpty(cond) Then
dat = 0: GoTo etiq

f5 = dat.Value: cond = cond.Value

If Right(cond, 4) = "JFDM" Then
dat = DateSerial(Year(f5), Month(f5) + 1, -1) + CDbl(Left(cond, InStr(1,
cond, "JFDM") - 1))
Else
If Right(cond, 5) = "JNETS" Then
dat = f5 + CDbl(Left(cond, InStr(1, cond, "JNETS") - 1))
ElseIf Right(cond, 5) = "JFDEC" Then
dat = f5 + CDbl(Left(cond, InStr(1, cond, "JFDEC") - 1))
Else
dat = 0
End If
End If
etiq:
'renvoyer le résultat à la fonction
echeance = dat

End Function

A+


Merci, anonymous, de l'intêret que tu portes à mon
problème, donc voici plus d'explications:
sur mon tableur j'ai notamment 2 colonnes dont l'une
contient les dates de facturation ( qui correspond
à "dat" ) et l'autre les conditions de paiement ( "cond").
une troisième colonne contient la date de paiement
calculée par le module ci-dessous. Les cellules de cette
colonne ont toutes comme formule: " = echeance
(date,cond) ".
Donc, en mettant dans la 1ère colonne la date de facture,
et dans la 2ème les conditions ( par ex.: 90JFDM" pour 90
jours fin de mois ou "60JNETS" pour 60 jours nets),
j'obtiens dans la cellule qui a comme formule " ìheance
(dat,cond)" la date de paiement.
Ce qu'il me faudrait, c'est une ligne en plus dans le
module ci-dessous qui commencerait par: " If Right(cond,
5) = "JFDEC" Then ..." pour les fins de décade.
J'espère avoir été clair.
Merci encore.

rappel du module actuel:

Public Function echeance(dat, cond)
'trouve la date d'échéance d'un paiement au 'dat'
à 'cond'
'exemple : ìheance(A1;B1)
Application.Volatile

'si dat est manquant ou vide ou si cond est manquant ou
vide -> renvoit 0
If IsMissing(dat) Or IsMissing(cond) Or IsEmpty(dat) Or
IsEmpty(cond) Then
dat = 0: GoTo etiq

f5 = dat.Value: cond = cond.Value

If Right(cond, 4) = "JFDM" Then
dat = DateSerial(Year(f5), Month(f5) + 1, -1) + CDbl
(Left(cond, InStr(1,
cond, "JFDM") - 1))
Else
If Right(cond, 5) = "JNETS" Then
dat = f5 + CDbl(Left(cond, InStr(1, cond, "JNETS") -
1))
Else
dat = 0
End If
End If

etiq:
'renvoyer le résultat à la fonction
echeance = dat

End Function





Avatar
Paul V.
Je crois que t'es à coté ;-)

Il faudrait savoir ce que le demandeur entend par décade , s'il peut y en
avoir plusieurs pour la même échéance et comment s'est encodé .

Dans l'attente d'explications complète, je m'abstiendrai de donner une
réponse.

A+

Paul V

"anomymousA" a écrit dans le message
de news:
bonjour,

un truc comme ca si j'ai vraiment tout compris à ta demande. Mais si c'est
ca, c'est tellement facile et comme tu as l'air de connaitre un peu VBA je
me
demande comment tu n'as pas pu trouver donc je suis dubitatif sur ma
réponse.
Je suis resté dasn l'esprit du code initial mais il pourrait sans doute
etre
plus clair.

Public Function echeance(dat, cond)
'trouve la date d'échéance d'un paiement au 'dat'
'Ã 'cond'
'exemple : ìheance(A1;B1)
Application.Volatile

'si dat est manquant ou vide ou si cond est manquant ou vide -> renvoit 0
If IsMissing(dat) Or IsMissing(cond) Or IsEmpty(dat) Or IsEmpty(cond) Then
dat = 0: GoTo etiq

f5 = dat.Value: cond = cond.Value

If Right(cond, 4) = "JFDM" Then
dat = DateSerial(Year(f5), Month(f5) + 1, -1) + CDbl(Left(cond,
InStr(1,
cond, "JFDM") - 1))
Else
If Right(cond, 5) = "JNETS" Then
dat = f5 + CDbl(Left(cond, InStr(1, cond, "JNETS") - 1))
ElseIf Right(cond, 5) = "JFDEC" Then
dat = f5 + CDbl(Left(cond, InStr(1, cond, "JFDEC") - 1))
Else
dat = 0
End If
End If
etiq:
'renvoyer le résultat à la fonction
echeance = dat

End Function

A+


Merci, anonymous, de l'intêret que tu portes à mon
problème, donc voici plus d'explications:
sur mon tableur j'ai notamment 2 colonnes dont l'une
contient les dates de facturation ( qui correspond
à "dat" ) et l'autre les conditions de paiement ( "cond").
une troisième colonne contient la date de paiement
calculée par le module ci-dessous. Les cellules de cette
colonne ont toutes comme formule: " = echeance
(date,cond) ".
Donc, en mettant dans la 1ère colonne la date de facture,
et dans la 2ème les conditions ( par ex.: 90JFDM" pour 90
jours fin de mois ou "60JNETS" pour 60 jours nets),
j'obtiens dans la cellule qui a comme formule " ìheance
(dat,cond)" la date de paiement.
Ce qu'il me faudrait, c'est une ligne en plus dans le
module ci-dessous qui commencerait par: " If Right(cond,
5) = "JFDEC" Then ..." pour les fins de décade.
J'espère avoir été clair.
Merci encore.

rappel du module actuel:

Public Function echeance(dat, cond)
'trouve la date d'échéance d'un paiement au 'dat'
à 'cond'
'exemple : ìheance(A1;B1)
Application.Volatile

'si dat est manquant ou vide ou si cond est manquant ou
vide -> renvoit 0
If IsMissing(dat) Or IsMissing(cond) Or IsEmpty(dat) Or
IsEmpty(cond) Then
dat = 0: GoTo etiq

f5 = dat.Value: cond = cond.Value

If Right(cond, 4) = "JFDM" Then
dat = DateSerial(Year(f5), Month(f5) + 1, -1) + CDbl
(Left(cond, InStr(1,
cond, "JFDM") - 1))
Else
If Right(cond, 5) = "JNETS" Then
dat = f5 + CDbl(Left(cond, InStr(1, cond, "JNETS") -
1))
Else
dat = 0
End If
End If

etiq:
'renvoyer le résultat à la fonction
echeance = dat

End Function







Avatar
Maslaf
Bonjour!
Alors, je vais essayer d'être clair:
il y a 3 décades dans un mois.
un délai de paiement peut être par exemple encodé en "60JFDEC", ce qui
signifie que l'on compte 60 jours nets à compter de la date de facturation et
si ça tombe par exemple le 5 du mois, le paiement sera fait le 10; si ça
tombe le 17 du mois, le paiement sera fait le 20.
donc chaque fois à la fin de la décade immédiatement supérieure au jour.
si vous le souhaitez, je peux vous envoyer le classeur afin que puissiez le
"bidouiller" et le faire fonctionner pour mieux comprendre .
bonne journée.
Avatar
Paul V.
AMHA , tes explications sont toujours incomplètes ;-)
Quelle est la décade du 31/1?
Quelle est la date d'échéance du 25/2?

Bref, voila comment je ferais si c'était pour moi
___________________________________________________________
Public Function echeance(dat, cond)
'trouve la date d'échéance d'un paiement au 'dat'à 'cond'
'exemple : ìheance(A1;B1)
Application.Volatile

'si dat est manquant ou vide ou si cond est manquant ouvide -> renvoit 0
If IsMissing(dat) Or IsMissing(cond) Or IsEmpty(dat) Or IsEmpty(cond) Then
dat = 0: GoTo etiq

f5 = dat


If Right(cond, 4) = "JFDM" Then
dat = DateSerial(Year(f5), Month(f5) + 1, -1) + CDbl(Left(cond, InStr(1,
cond, "JFDM") - 1))
ElseIf Right(cond, 5) = "JNETS" Then
dat = f5 + CDbl(Left(cond, InStr(1, cond, "JNETS") - 1))
ElseIf Right(cond, 5) = "JFDEC" Then

dat = f5 + CInt(Left(cond, InStr(1, cond, "JFDEC") - 1))
If Day(dat) < 11 Then
dat = DateSerial(Year(f5), Month(f5), 10)
ElseIf Day(dat) < 21 Then
dat = DateSerial(Year(f5), Month(f5), 20)
Else
dat = DateSerial(Year(f5), Month(f5) + 1, -1)
End If

Else
dat = 0
End If

etiq:
'renvoyer le résultat à la fonction
echeance = dat

End Function
________________________________________________________

A+

Paul V

"Maslaf" a écrit dans le message de news:


Bonjour!
Alors, je vais essayer d'être clair:
il y a 3 décades dans un mois.
un délai de paiement peut être par exemple encodé en "60JFDEC", ce qui
signifie que l'on compte 60 jours nets à compter de la date de facturation
et
si ça tombe par exemple le 5 du mois, le paiement sera fait le 10; si ça
tombe le 17 du mois, le paiement sera fait le 20.
donc chaque fois à la fin de la décade immédiatement supérieure au jour.
si vous le souhaitez, je peux vous envoyer le classeur afin que puissiez
le
"bidouiller" et le faire fonctionner pour mieux comprendre .
bonne journée.


Avatar
Paul V.
Bonjour,

En recevant mon message sur le forum et en le relisant ( je ne lis que des
choses intéressantes ;-))) ), je constate que faire du copier coller pour
gagner du temps fais souvent faire des erreures. Et comme je n'ai pas testé
;-(

Bref il faut remplacer les lignes

dat = DateSerial(Year(f5), Month(f5), 10)

dat = DateSerial(Year(f5), Month(f5), 20)

dat = DateSerial(Year(f5), Month(f5) + 1, -1)
Par


dat = DateSerial(Year(dat), Month(dat), 10)
ElseIf Day(dat) < 21 Then
dat = DateSerial(Year(dat), Month(dat), 20)
Else
dat = DateSerial(Year(dat), Month(dat) + 1, -1)


Sans quoi cela fera désordre.

Toujours pas pesté mais cela me paraît pas mal ;-)

Paul V

"Paul V." a écrit dans le message de news:

AMHA , tes explications sont toujours incomplètes ;-)
Quelle est la décade du 31/1?
Quelle est la date d'échéance du 25/2?

Bref, voila comment je ferais si c'était pour moi
___________________________________________________________
Public Function echeance(dat, cond)
'trouve la date d'échéance d'un paiement au 'dat'à 'cond'
'exemple : ìheance(A1;B1)
Application.Volatile

'si dat est manquant ou vide ou si cond est manquant ouvide -> renvoit 0
If IsMissing(dat) Or IsMissing(cond) Or IsEmpty(dat) Or IsEmpty(cond) Then
dat = 0: GoTo etiq

f5 = dat


If Right(cond, 4) = "JFDM" Then
dat = DateSerial(Year(f5), Month(f5) + 1, -1) + CDbl(Left(cond, InStr(1,
cond, "JFDM") - 1))
ElseIf Right(cond, 5) = "JNETS" Then
dat = f5 + CDbl(Left(cond, InStr(1, cond, "JNETS") - 1))
ElseIf Right(cond, 5) = "JFDEC" Then

dat = f5 + CInt(Left(cond, InStr(1, cond, "JFDEC") - 1))
If Day(dat) < 11 Then
dat = DateSerial(Year(f5), Month(f5), 10)
ElseIf Day(dat) < 21 Then
dat = DateSerial(Year(f5), Month(f5), 20)
Else
dat = DateSerial(Year(f5), Month(f5) + 1, -1)
End If

Else
dat = 0
End If

etiq:
'renvoyer le résultat à la fonction
echeance = dat

End Function
________________________________________________________

A+

Paul V

"Maslaf" a écrit dans le message de
news:

Bonjour!
Alors, je vais essayer d'être clair:
il y a 3 décades dans un mois.
un délai de paiement peut être par exemple encodé en "60JFDEC", ce qui
signifie que l'on compte 60 jours nets à compter de la date de
facturation et
si ça tombe par exemple le 5 du mois, le paiement sera fait le 10; si ça
tombe le 17 du mois, le paiement sera fait le 20.
donc chaque fois à la fin de la décade immédiatement supérieure au jour.
si vous le souhaitez, je peux vous envoyer le classeur afin que puissiez
le
"bidouiller" et le faire fonctionner pour mieux comprendre .
bonne journée.






Avatar
Maslaf
Bonsoir Paul V.
Merci beaucoup, ça marche très bien !
Merci encore et bonne soirée.

Maslaf