Fonctions Personnalisées par VBA

momo

XLDnaute Occasionnel
Bonjour à tous

Je voudrais votre petite contribution sur la mise en place d'une formule personnalisée par VBA

En fait je voudrais par VBA pouvoir faire un calcul de date sur une base de 365 jours mais avec une formule dans le style de la formule Jours360(Date_Début; Date_Fin)

Ma Formule devrait donner Jours365(Date_Début; Date_Fin)

Je joins une feuille excel pour mieux expliquer ma demande


Je vous remercie par avance et bonne journée dominicale...
 

Pièces jointes

  • Fonction Personnalisée.xlsx
    8.9 KB · Affichages: 39

Paf

XLDnaute Barbatruc
Re : Fonctions Personnalisées par VBA

Bonjour,

Je ne vois pas l'intérêt d'une fonction personnalisée pour remplacer la formule =I2-B2+1.

Mais bon ! :

dans une cellule : =Jours365($I$2;$B$2)

dans un module standard:

Code:
Function Jours365(DateFin, DateDeb)
 Jours365 = DateFin - DateDeb + 1
End Function

on pourrait rajouter un test pour vérifier que date de fin est postérieure à date de début.

A+

Edit : Bonjour jpb388
 

momo

XLDnaute Occasionnel
Re : Fonctions Personnalisées par VBA

Bonjour à vous deux

Merci encore pour vos Réponse

@ PAf: En fait je voulais intégrer ma formule jour365 dans une formule déjà existante et faire plus simple serait d'utiliser la formule Jours parce que après j’intègre Min et d'autres paramètres.
Je te remercie énormément pour le coup de pouce

@JPB la formule I2-B2+1 est dans ma feuille excel javais dit que c'était le résultat attendu
 

momo

XLDnaute Occasionnel
Re : Fonctions Personnalisées par VBA

Si je peux me permettre

Est ce qu'il serait possible d'identifier les années bissextiles dans les calculs et lorsque c'est le cas il retranche un jour en fonction du nombre d'année bissextiles qu'il existe entre les deux dates?

En fait je fais des calculs d'amortissement et les taux sont calculés sur des bases de 365 jrs du coup lorsque j'ai une année a 366 jour le résultat de ma formule n'est bonne
 

Paf

XLDnaute Barbatruc
Re : Fonctions Personnalisées par VBA

Re

il y avait donc une erreur dans la formule =I2-B2+1 puisque du 28/12/2014 au 28/12/2015 on obtenait 366.

Sinon

Code:
Function Jours365(DateFin As Range, DateDeb As Range)
 For i = DateDeb + 1 To DateFin
    If Month(i) = 2 And Day(i) = 29 Then tot = tot + 1
 Next
 Jours365 = DateFin - DateDeb - tot
End Function

A+
 

jpb388

XLDnaute Accro
Re : Fonctions Personnalisées par VBA

Bonjour à tous
Bonjour Paf
ma version
Code:
Option Explicit

Function Jours365(DateDeb As Date, DateFin As Date)
    Dim Md As Date, An%, Nb%
    Select Case (DateFin - DateDeb)
       Case Is < 365
           On Error Resume Next
               Md = "29/02/" & Year(DateFin)
               Select Case Err.Number
                   Case 0
                       If Md > DateDeb And Md < DateFin Then
                           Jours365 = DateFin - DateDeb
                       Else
                           Jours365 = DateFin - DateDeb + 1
                       End If
                   Case Else
                       Jours365 = DateFin - DateDeb + 1
               End Select
           On Error GoTo 0
        Case Else
            Select Case DateDeb
                Case Is < "1/3/" & Year(DateDeb)
                    An = Year(DateDeb)
                Case Else
                    An = Year(DateDeb) + 1
            End Select
            Do
                On Error Resume Next
                Md = "29/02/" & An
               Select Case Err.Number
                   Case 0
                       If Md < DateFin Then Nb = Nb + 1
                   Case Else
               End Select
           On Error GoTo 0
                An = An + 1
            Loop Until DateFin <= DateSerial(An, Month(Md), Day(Md))
            Jours365 = (DateFin - DateDeb) - Nb
    End Select
End Function
 

momo

XLDnaute Occasionnel
Re : Fonctions Personnalisées par VBA

Re Bonjour,

Désolé de ne écrire que maintenant je n'étais pas vraiment connecté...

J'ai essayé le code de Job et de paf et ca n'a pas marché.... Je n'ai pas compris pourquoi

c'est peut être parce que j'ai supprimé le tout premier code de Paf avant d'ajouter les nouveaux?

Par contre le code de JP a bien fonctionné...

Par soucis du détail je voudrais quand même savoir pourquoi les deux codes n'ont pas fonctionné...

Je vous remercie encore vraiment pour m'avoir aidé a enlever mon épine du pieds
 

JHA

XLDnaute Barbatruc
Re : Fonctions Personnalisées par VBA

Bonjour à tous,

Ci joint un récap des solutions apportées, apparemment, les fonctions fontionnent toutes, à toi de voir laquelle te convient.
il faut les mettre dans un module.

JHA
 

Pièces jointes

  • Fonction Personnalisée momo.xlsm
    22.2 KB · Affichages: 41

job75

XLDnaute Barbatruc
Re : Fonctions Personnalisées par VBA

Bonjour à tous,

Et merci à JHA de s'être donné cette peine.

Concernant les solutions de Paf et job75 (très voisines), il est évident que si l'on veut compter la date de début il faut écrire :

Code:
For i = DateDeb To DateFin
Bonne journée.
 

momo

XLDnaute Occasionnel
Re : Fonctions Personnalisées par VBA

Merci JHA ,pour ce récap, Effectivement vu comment tu l'as présenté toutes les formules marchent.

J'ai réesayé la formule de Job qui a finalement marché mais celle de Paf non... Je vais tenir compte de la remarque de job pour correction...
Par contre la formule de JPA a bien fonctionné sur ma première ligne mais bizarrement pas sur le reste... Je continue a penser que le problème doit être de mon côté

Merci à vous tous de vous être penché sur mon petit soucis vraiment Merci
 

Discussions similaires

Statistiques des forums

Discussions
312 104
Messages
2 085 344
Membres
102 865
dernier inscrit
FreyaSalander