Fonctions Personnalisées par VBA

  • Initiateur de la discussion Initiateur de la discussion momo
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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
 
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
 
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
 
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+
 
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
 
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
 
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.
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
XL 2021 Macro
Réponses
6
Affichages
244
  • Question Question
Microsoft 365 Formule excel
Réponses
7
Affichages
305
Réponses
2
Affichages
495
Retour