DateDiff entre deux dates avec les mois non arrondis

Bonjour à tous, dans le cadre de mon projet VBA j'aimerais calculer la différence entre deux dates en nombre de mois mais sans les arrondir.

Voici le code du bouton qui me permet de faire le calcul:

Private Sub CommandButton1_Click()

Dim premieredate As Date
Dim secondedate As Date
Dim nb_mois As Long

premieredate = datedebut.Value
secondedate = datefin.Value

nb_mois = DateDiff("m", premieredate, secondedate)

convertiondatehaut = nb_mois

End Sub

Ce code fonctionne très bien mais ne convient pas totalement à mon besoin car trop imprécis. J'ai appliqué un format de nombre sur la case du résultat mais sans succès.

Voici le code:

Private Sub convertiondatehaut_Change()

convertiondatehaut = Format(convertiondatehaut, "0.00")

'EXEMPLE POUR LE FORMAT
'tauxremplacement.Value = Format(tauxremplacement.Value, "00 %")

End Sub

Le résultat sera toujours les mois,00 comme vous pouvez le voir ci-dessous:

image

Merci par avance

Cordialement;

Bonjour,

Désolé, mais que faudrait-il trouver par rapport à vos deux dates ?

Bonjour, il me faudrait les mois plus les jours, enfin que le résultat ne soit pas arrondi car c'est pour des calculs de prime.

Voici un exemple:

image

La formule utilisée est =+(I4-H4)/31, il me faudrait un équivalant en VBA

Sur ce forum, vous aurez plus de réponses si vous mettez un fichier exemple en ligne.

Sinon, mettez-vous sur un cellule où vous avez une formule qui fonctionne.

Basculez sur l'éditeur VBA et ouvrez la fenêtre exécution Ctrl-G

Ecrivez la formule suivante et faites Entrer :

? ActiveCell.Formula2R1C1

Vous allez obtenir l'équivalent VBA de votre formule.

Bonsoir,
Pour le principe.
Cdlt.

capture d ecran 2022 04 13 191333

Bonjour, merci pour ces exemples. Ce serait mieux de partager un fichier il est vrai mais le problème étant que celui-ci contient des données confidentielles. Peut-être qu'en créant une copie avec ces données en moins vous permettrait de mieux me guider

Edit: Un fichier d'exemple est prêt, la question initiale fait partie d'un projet plus important qui, une fois terminé permettrait de calculer des primes selon le nombre de mois de remplacement. Il y a donc un formulaire avec des informations à remplir, ces informations sont récupérées et stockées sur une feuille pour que nous puissions les consulter quand nous en avons besoin

Bonjour à tous, voici un fichier d'exemple. Le résultat qui est retourné est toujours arrondi...

Bonjour,

Votre variable nb_mois étant de type long, vous allez avoir du mal à avoir des décimales...

Sinon, pourquoi ne pas baser votre calcul selon la formule Jours360/30

capture

Nb : Dans votre décompte, il faut partir du jour avant la date de début.

Dans le cas où votre formule serait appliquée, il faudrait enlever la génération des mois dans le userform ? et simplement indiquer les dates voulues dans les textBox, et elles seraient calculées sur la feuille ?

Le calcul peut se faire directement dans le userform, mais je pense qu'il serait préférable de conserver la formule dans le tableau.

Merci beaucoup, je viens d'essayer votre formule, elle fonctionne parfaitement et j'ai donc enlevé la génération des mois dans le UserForm pour le moment. Le seul inconvénient est qu'il faut étirer la formule pour qu'elle s'applique aux nouvelles lignes ajoutées

Votre tableau étant un tableau structuré, si vous générez les lignes au fur et à mesure, la formule va être dupliquée. En clair : pas de ligne vide dans votre tableau comme actuellement.

Voici la nouvelle version du tableau

Modifiez votre code pour placer la formule plutôt que la valeur :

    With ActiveCell.Offset(0, 11)
         .Formula2R1C1 = "=DAYS360(RC[-2]-1,RC[-1],TRUE)/30" 'convertiondatehaut 'posteremplacé
         .NumberFormat = "0.0"
    End With

Je place ce code dans le bouton "générer les mois" du UserForm et je met tout le reste du code en commentaire ?

Il faut remplacer la ligne actuelle commençant par ActiveCell.Offset(0, 11)

image

Comme ceci ?

Oui.

Le mieux est de faire un essai à blanc en rentrant une date de début et une date de fin et en validant.

Merci beaucoup pour votre aide, cela fonctionne enfin, votre formule est toujours appliquée sur le tableau qui est dans mon cas =JOURS360(J2-1;K2;VRAI)/30

Cela ne doit pas empêcher le fonctionnement du reste... Dans le UserForm la valeur retournée est arrondie mais lors de la validation elle est convertie correctement

image image

Si vous souhaitez rendre cohérent votre userform, remplacez la ligne de code actuelle par celle-ci :

convertiondatehaut = WorksheetFunction.Days360(premieredate - 1, secondedate, True) / 30 'nb_mois
Rechercher des sujets similaires à "datediff entre deux dates mois arrondis"