Bonjour,
Excel propose une fonction « JOURS360 » qui renvoie le nombre de jours entre 2 dates en considérant tous les mois à 30 jours.
Exemple : JOURS360(30/01/2015 ; 02/02/2015 ;1)= 2 ( =01/02 et 02/02, le 31/01 n’étant pas compté)
je souhaiterais créer la fonction inverse sous macro qui me renverrait une date donnée si en entrée, je lui donnais une date et un nombre de jours (toujours en considérant des mois de 30 jours)
Je souhaiterais dénommer cette fonction INVERSE360. Ainsi INVERSE360 (30/01/2015 ;2) donnerai la date du 02/02/2015. Autre exemple, INVERSE360 (28/02/2015 ; 3) renverrai le 01/03/2015.
La macro pourrait s’articuler comme cela :
Function INVERSE360(Date, Nombre)
Dim iCas
If JOURS360(Date, iCas, 1) = Nombre Then INVERSE360 = iCas
End Function
Mais il me manque certaines notions de syntaxe pour terminer ce petit programme ?
Quelqu'un pourrait-il m'assister pour inclure les qqes lignes manquantes?
Merci d'avance,
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
MichD
Bonjour,
Copie cette fonction personnalisée dans un MODULE STANDARD
'--------------------------------------------------------------------- Function INVERSE360(D As Date, Nbjours As Long) Dim M As Long, X As Long, A As Long M = Month(D + Nbjours) - Month(D)
For A = 1 To M X = Day(DateSerial(Year(D), Month(D) + A, 0)) Select Case X Case 28 Nbjours = Nbjours - 2 Case 29 Nbjours = Nbjours - 1 Case 31 Nbjours = Nbjours + 1 End Select Next INVERSE360 = DateSerial(Year(D), Month(D), Day(D) + Nbjours) End Function '---------------------------------------------------------------------
Et dans la cellule de ton choix, tu saisis la formule suivante, La cellule contenant la formule doit être au format "DATE" de ton choix =INVERSE360(A1;C4)
A1 est un format date reconnue par Excel C4 la cellule contenant le nombre de jours
Bonjour,
Copie cette fonction personnalisée dans un MODULE STANDARD
'---------------------------------------------------------------------
Function INVERSE360(D As Date, Nbjours As Long)
Dim M As Long, X As Long, A As Long
M = Month(D + Nbjours) - Month(D)
For A = 1 To M
X = Day(DateSerial(Year(D), Month(D) + A, 0))
Select Case X
Case 28
Nbjours = Nbjours - 2
Case 29
Nbjours = Nbjours - 1
Case 31
Nbjours = Nbjours + 1
End Select
Next
INVERSE360 = DateSerial(Year(D), Month(D), Day(D) + Nbjours)
End Function
'---------------------------------------------------------------------
Et dans la cellule de ton choix, tu saisis la formule suivante,
La cellule contenant la formule doit être au format "DATE" de ton choix
=INVERSE360(A1;C4)
A1 est un format date reconnue par Excel
C4 la cellule contenant le nombre de jours
Copie cette fonction personnalisée dans un MODULE STANDARD
'--------------------------------------------------------------------- Function INVERSE360(D As Date, Nbjours As Long) Dim M As Long, X As Long, A As Long M = Month(D + Nbjours) - Month(D)
For A = 1 To M X = Day(DateSerial(Year(D), Month(D) + A, 0)) Select Case X Case 28 Nbjours = Nbjours - 2 Case 29 Nbjours = Nbjours - 1 Case 31 Nbjours = Nbjours + 1 End Select Next INVERSE360 = DateSerial(Year(D), Month(D), Day(D) + Nbjours) End Function '---------------------------------------------------------------------
Et dans la cellule de ton choix, tu saisis la formule suivante, La cellule contenant la formule doit être au format "DATE" de ton choix =INVERSE360(A1;C4)
A1 est un format date reconnue par Excel C4 la cellule contenant le nombre de jours
MichD
OUPS ! Il en manque un petit bout à la fonction :
'-------------------------------------------------------------------------------------------------- Function INVERSE360(D As Date, Nbjours As Long) Dim M As Long, X As Long, A As Long M = Month(D + Nbjours) - Month(D)
For A = 1 To M X = Day(DateSerial(Year(D), Month(D) + A, 0)) Select Case X Case 28 Nbjours = Nbjours - 2 Case 29 Nbjours = Nbjours - 1 Case 31 Nbjours = Nbjours + 1 End Select Next If Day(DateSerial(Year(D), Month(D), Day(D) + Nbjours)) = 31 Then INVERSE360 = DateSerial(Year(D), Month(D), Day(D) + Nbjours + 1) Else INVERSE360 = DateSerial(Year(D), Month(D), Day(D) + Nbjours) End If End Function '--------------------------------------------------------------------------------------------------
"MichD" a écrit dans le message de groupe de discussion : mu0oh2$169$
Bonjour,
Copie cette fonction personnalisée dans un MODULE STANDARD
'--------------------------------------------------------------------- Function INVERSE360(D As Date, Nbjours As Long) Dim M As Long, X As Long, A As Long M = Month(D + Nbjours) - Month(D)
For A = 1 To M X = Day(DateSerial(Year(D), Month(D) + A, 0)) Select Case X Case 28 Nbjours = Nbjours - 2 Case 29 Nbjours = Nbjours - 1 Case 31 Nbjours = Nbjours + 1 End Select Next INVERSE360 = DateSerial(Year(D), Month(D), Day(D) + Nbjours) End Function '---------------------------------------------------------------------
Et dans la cellule de ton choix, tu saisis la formule suivante, La cellule contenant la formule doit être au format "DATE" de ton choix =INVERSE360(A1;C4)
A1 est un format date reconnue par Excel C4 la cellule contenant le nombre de jours
OUPS ! Il en manque un petit bout à la fonction :
'--------------------------------------------------------------------------------------------------
Function INVERSE360(D As Date, Nbjours As Long)
Dim M As Long, X As Long, A As Long
M = Month(D + Nbjours) - Month(D)
For A = 1 To M
X = Day(DateSerial(Year(D), Month(D) + A, 0))
Select Case X
Case 28
Nbjours = Nbjours - 2
Case 29
Nbjours = Nbjours - 1
Case 31
Nbjours = Nbjours + 1
End Select
Next
If Day(DateSerial(Year(D), Month(D), Day(D) + Nbjours)) = 31 Then
INVERSE360 = DateSerial(Year(D), Month(D), Day(D) + Nbjours + 1)
Else
INVERSE360 = DateSerial(Year(D), Month(D), Day(D) + Nbjours)
End If
End Function
'--------------------------------------------------------------------------------------------------
"MichD" a écrit dans le message de groupe de discussion : mu0oh2$169$1@speranza.aioe.org...
Bonjour,
Copie cette fonction personnalisée dans un MODULE STANDARD
'---------------------------------------------------------------------
Function INVERSE360(D As Date, Nbjours As Long)
Dim M As Long, X As Long, A As Long
M = Month(D + Nbjours) - Month(D)
For A = 1 To M
X = Day(DateSerial(Year(D), Month(D) + A, 0))
Select Case X
Case 28
Nbjours = Nbjours - 2
Case 29
Nbjours = Nbjours - 1
Case 31
Nbjours = Nbjours + 1
End Select
Next
INVERSE360 = DateSerial(Year(D), Month(D), Day(D) + Nbjours)
End Function
'---------------------------------------------------------------------
Et dans la cellule de ton choix, tu saisis la formule suivante,
La cellule contenant la formule doit être au format "DATE" de ton choix
=INVERSE360(A1;C4)
A1 est un format date reconnue par Excel
C4 la cellule contenant le nombre de jours
'-------------------------------------------------------------------------------------------------- Function INVERSE360(D As Date, Nbjours As Long) Dim M As Long, X As Long, A As Long M = Month(D + Nbjours) - Month(D)
For A = 1 To M X = Day(DateSerial(Year(D), Month(D) + A, 0)) Select Case X Case 28 Nbjours = Nbjours - 2 Case 29 Nbjours = Nbjours - 1 Case 31 Nbjours = Nbjours + 1 End Select Next If Day(DateSerial(Year(D), Month(D), Day(D) + Nbjours)) = 31 Then INVERSE360 = DateSerial(Year(D), Month(D), Day(D) + Nbjours + 1) Else INVERSE360 = DateSerial(Year(D), Month(D), Day(D) + Nbjours) End If End Function '--------------------------------------------------------------------------------------------------
"MichD" a écrit dans le message de groupe de discussion : mu0oh2$169$
Bonjour,
Copie cette fonction personnalisée dans un MODULE STANDARD
'--------------------------------------------------------------------- Function INVERSE360(D As Date, Nbjours As Long) Dim M As Long, X As Long, A As Long M = Month(D + Nbjours) - Month(D)
For A = 1 To M X = Day(DateSerial(Year(D), Month(D) + A, 0)) Select Case X Case 28 Nbjours = Nbjours - 2 Case 29 Nbjours = Nbjours - 1 Case 31 Nbjours = Nbjours + 1 End Select Next INVERSE360 = DateSerial(Year(D), Month(D), Day(D) + Nbjours) End Function '---------------------------------------------------------------------
Et dans la cellule de ton choix, tu saisis la formule suivante, La cellule contenant la formule doit être au format "DATE" de ton choix =INVERSE360(A1;C4)
A1 est un format date reconnue par Excel C4 la cellule contenant le nombre de jours
2buches
Le jeudi 24 Septembre 2015 à 11:59 par 2buches :
Bonjour, Excel propose une fonction « JOURS360 » qui renvoie le nombre de jours entre 2 dates en considérant tous les mois à 30 jours.
Exemple : JOURS360(30/01/2015 ; 02/02/2015 ;1)= 2 ( /02 et 02/02, le 31/01 n’étant pas compté) je souhaiterais créer la fonction inverse sous macro qui me renverrait une date donnée si en entrée, je lui donnais une date et un nombre de jours (toujours en considérant des mois de 30 jours)
Je souhaiterais dénommer cette fonction INVERSE360. Ainsi INVERSE360 (30/01/2015 ;2) donnerai la date du 02/02/2015. Autre exemple, INVERSE360 (28/02/2015 ; 3) renverrai le 01/03/2015.
La macro pourrait s’articuler comme cela :
Function INVERSE360(Date, Nombre)
Dim iCas If JOURS360(Date, iCas, 1) = Nombre Then INVERSE360 = iCas
End Function
Mais il me manque certaines notions de syntaxe pour terminer ce petit programme ? Quelqu'un pourrait-il m'assister pour inclure les qqes lignes manquantes? Merci d'avance,
Cordialement
Bonjour
Merci pour la réactivité!
J'ai testé la macro. Elle fonctione correctement dans l'ensemble mais présente une erreur lorsque le résultat est le 29 février Ex : INVERSE360 (01/01/2015; 58) = 01/03/2015 au lieu du 28/02/2015 Idem INVERSE360(01/02/2015; 28) = 27/02/2015 au lieu du 29/02/2015.
C'est pour cela que j'aurai eu tendance à créer la fonction sur la base d'une récurrence autour de la fonction JOURS360 (qui quant à elle fonctionne correctement) en testant 1 à 1 les solutions jusqu'à l'obtention de la bonne réponse.
Mais peut être n'est ce pas possible?
Stéphane
Le jeudi 24 Septembre 2015 à 11:59 par 2buches :
Bonjour,
Excel propose une fonction « JOURS360 » qui renvoie le nombre de
jours entre 2 dates en considérant tous les mois à 30 jours.
Exemple : JOURS360(30/01/2015 ; 02/02/2015 ;1)= 2 ( =01/02 et 02/02, le 31/01
n’étant pas compté)
je souhaiterais créer la fonction inverse sous macro qui me renverrait
une date donnée si en entrée, je lui donnais une date et un
nombre de jours (toujours en considérant des mois de 30 jours)
Je souhaiterais dénommer cette fonction INVERSE360. Ainsi INVERSE360
(30/01/2015 ;2) donnerai la date du 02/02/2015. Autre exemple, INVERSE360
(28/02/2015 ; 3) renverrai le 01/03/2015.
La macro pourrait s’articuler comme cela :
Function INVERSE360(Date, Nombre)
Dim iCas
If JOURS360(Date, iCas, 1) = Nombre Then INVERSE360 = iCas
End Function
Mais il me manque certaines notions de syntaxe pour terminer ce petit programme
?
Quelqu'un pourrait-il m'assister pour inclure les qqes lignes manquantes?
Merci d'avance,
Cordialement
Bonjour
Merci pour la réactivité!
J'ai testé la macro. Elle fonctione correctement dans l'ensemble mais présente une erreur lorsque le résultat est le 29 février
Ex : INVERSE360 (01/01/2015; 58) = 01/03/2015 au lieu du 28/02/2015
Idem INVERSE360(01/02/2015; 28) = 27/02/2015 au lieu du 29/02/2015.
C'est pour cela que j'aurai eu tendance à créer la fonction sur la base d'une récurrence autour de la fonction JOURS360 (qui quant à elle fonctionne correctement) en testant 1 à 1 les solutions jusqu'à l'obtention de la bonne réponse.
Bonjour, Excel propose une fonction « JOURS360 » qui renvoie le nombre de jours entre 2 dates en considérant tous les mois à 30 jours.
Exemple : JOURS360(30/01/2015 ; 02/02/2015 ;1)= 2 ( /02 et 02/02, le 31/01 n’étant pas compté) je souhaiterais créer la fonction inverse sous macro qui me renverrait une date donnée si en entrée, je lui donnais une date et un nombre de jours (toujours en considérant des mois de 30 jours)
Je souhaiterais dénommer cette fonction INVERSE360. Ainsi INVERSE360 (30/01/2015 ;2) donnerai la date du 02/02/2015. Autre exemple, INVERSE360 (28/02/2015 ; 3) renverrai le 01/03/2015.
La macro pourrait s’articuler comme cela :
Function INVERSE360(Date, Nombre)
Dim iCas If JOURS360(Date, iCas, 1) = Nombre Then INVERSE360 = iCas
End Function
Mais il me manque certaines notions de syntaxe pour terminer ce petit programme ? Quelqu'un pourrait-il m'assister pour inclure les qqes lignes manquantes? Merci d'avance,
Cordialement
Bonjour
Merci pour la réactivité!
J'ai testé la macro. Elle fonctione correctement dans l'ensemble mais présente une erreur lorsque le résultat est le 29 février Ex : INVERSE360 (01/01/2015; 58) = 01/03/2015 au lieu du 28/02/2015 Idem INVERSE360(01/02/2015; 28) = 27/02/2015 au lieu du 29/02/2015.
C'est pour cela que j'aurai eu tendance à créer la fonction sur la base d'une récurrence autour de la fonction JOURS360 (qui quant à elle fonctionne correctement) en testant 1 à 1 les solutions jusqu'à l'obtention de la bonne réponse.
Mais peut être n'est ce pas possible?
Stéphane
MichD
A ) INVERSE360(01/02/2015; 28) = 27/02/2015 au lieu du 29/02/2015. **** L'an 2015 n'est pas bissextil et par conséquent la date du 29/02/2015 n'existe pas
B ) INVERSE360 (01/01/2015; 58) = 01/03/2015 au lieu du 28/02/2015 **** J'ai modifié la fonction pour tenir compte de ce cas d'exception. Soustrait de 58, 29 jours pour les additionner à 01/01/2015 = 30/01/2015 les autres 29 jours vont au mois de février et comme dans l'exemple précédent le mois de février de 2015 ne peut pas avoir plus de 28 jours. Par conséquent la réponse devrait être 01/03/2015. Non? Explique...
Teste cette fonction à fond dans une feuille et s'il y a des problèmes, publie ton classeur en utilisant le site Web Cjoint.com et tu nous retransmets l'adresse ici.
'---------------------------------------------------------------- Function INVERSE360(D As Date, Nbjours As Long) Dim M As Long, X As Long, A As Long
M = Month(D + Nbjours) - Month(D) If Month(D) = 2 And Day(D) + Nbjours = 29 And _ Day(DateSerial(Year(D), Month(D), 0)) <> 29 Then Nbjours = Nbjours + 2 End If
For A = 1 To M X = Day(DateSerial(Year(D), Month(D) + A, 0)) Select Case X Case 28 Nbjours = Nbjours - 2 Case 29 Nbjours = Nbjours - 1 Case 31 Nbjours = Nbjours + 1 End Select Next If Day(DateSerial(Year(D), Month(D), Day(D) + Nbjours)) = 31 Then INVERSE360 = DateSerial(Year(D), Month(D), Day(D) + Nbjours + 1) Else INVERSE360 = DateSerial(Year(D), Month(D), Day(D) + Nbjours) End If End Function '----------------------------------------------------------------
A ) INVERSE360(01/02/2015; 28) = 27/02/2015 au lieu du 29/02/2015.
**** L'an 2015 n'est pas bissextil et par conséquent la date du 29/02/2015 n'existe pas
B ) INVERSE360 (01/01/2015; 58) = 01/03/2015 au lieu du 28/02/2015
**** J'ai modifié la fonction pour tenir compte de ce cas d'exception.
Soustrait de 58, 29 jours pour les additionner à 01/01/2015 = 30/01/2015
les autres 29 jours vont au mois de février et comme dans l'exemple précédent
le mois de février de 2015 ne peut pas avoir plus de 28 jours. Par conséquent
la réponse devrait être 01/03/2015. Non? Explique...
Teste cette fonction à fond dans une feuille et s'il y a des problèmes, publie ton
classeur en utilisant le site Web Cjoint.com et tu nous retransmets l'adresse ici.
'----------------------------------------------------------------
Function INVERSE360(D As Date, Nbjours As Long)
Dim M As Long, X As Long, A As Long
M = Month(D + Nbjours) - Month(D)
If Month(D) = 2 And Day(D) + Nbjours = 29 And _
Day(DateSerial(Year(D), Month(D), 0)) <> 29 Then
Nbjours = Nbjours + 2
End If
For A = 1 To M
X = Day(DateSerial(Year(D), Month(D) + A, 0))
Select Case X
Case 28
Nbjours = Nbjours - 2
Case 29
Nbjours = Nbjours - 1
Case 31
Nbjours = Nbjours + 1
End Select
Next
If Day(DateSerial(Year(D), Month(D), Day(D) + Nbjours)) = 31 Then
INVERSE360 = DateSerial(Year(D), Month(D), Day(D) + Nbjours + 1)
Else
INVERSE360 = DateSerial(Year(D), Month(D), Day(D) + Nbjours)
End If
End Function
'----------------------------------------------------------------
A ) INVERSE360(01/02/2015; 28) = 27/02/2015 au lieu du 29/02/2015. **** L'an 2015 n'est pas bissextil et par conséquent la date du 29/02/2015 n'existe pas
B ) INVERSE360 (01/01/2015; 58) = 01/03/2015 au lieu du 28/02/2015 **** J'ai modifié la fonction pour tenir compte de ce cas d'exception. Soustrait de 58, 29 jours pour les additionner à 01/01/2015 = 30/01/2015 les autres 29 jours vont au mois de février et comme dans l'exemple précédent le mois de février de 2015 ne peut pas avoir plus de 28 jours. Par conséquent la réponse devrait être 01/03/2015. Non? Explique...
Teste cette fonction à fond dans une feuille et s'il y a des problèmes, publie ton classeur en utilisant le site Web Cjoint.com et tu nous retransmets l'adresse ici.
'---------------------------------------------------------------- Function INVERSE360(D As Date, Nbjours As Long) Dim M As Long, X As Long, A As Long
M = Month(D + Nbjours) - Month(D) If Month(D) = 2 And Day(D) + Nbjours = 29 And _ Day(DateSerial(Year(D), Month(D), 0)) <> 29 Then Nbjours = Nbjours + 2 End If
For A = 1 To M X = Day(DateSerial(Year(D), Month(D) + A, 0)) Select Case X Case 28 Nbjours = Nbjours - 2 Case 29 Nbjours = Nbjours - 1 Case 31 Nbjours = Nbjours + 1 End Select Next If Day(DateSerial(Year(D), Month(D), Day(D) + Nbjours)) = 31 Then INVERSE360 = DateSerial(Year(D), Month(D), Day(D) + Nbjours + 1) Else INVERSE360 = DateSerial(Year(D), Month(D), Day(D) + Nbjours) End If End Function '----------------------------------------------------------------