Microsoft 365 Convertir en VBA

PORCHER

XLDnaute Junior
Bonjour,
Je souhaiterais convertir une formule en VBA... voici ci-dessous la macro ;
Nombre de mois entre deux date
zv_Debut = CDate(TextDepart.Value) ' Date de naissance
zv_Fin = CDate(TextDateDuJour.Value) ' Date Aujourdhui

If zv_Fin <= zv_Debut Then
zv_Msg = MsgBox("La date de fin ne peut pas être antérieure à la date de début ...", 48, "Erreur")
Exit Sub
End If

nbre_mois = DATEDIF(zv_Debut;zv_Fin;"m")+(DATEDIF(zv_Debut;zv_Fin;"md")/JOUR(FIN.MOIS(zv_Fin;0)))
Txt_NbMois = FormatNumber(nbre_mois, 2) ' Deux chiffres après la virgule
Pourriez-vous SVP me corriger
Merci
 

PORCHER

XLDnaute Junior
Bonjour daniel,
Merci pour ta réponse rapide.
Cela fonctionne: mais (exemple: zv_debut = 16/04/2019 me donne en nbre_mois 18,129 - formule Excel) et en VBA me donne(ta formule) 18
les deux chiffres après la virgule est important
Amicalement
 

herve62

XLDnaute Barbatruc
Bonjour
Pour aider quelqu'un ici j'avais développé une appli, il y avait un combo > date de naissance puis dans sa liste excel >on retrouvait l'Age au jour de l'ouverture du fichier (via workbook open)
J'avais donc ecrit cette fonction que je te joins à adapter dans ton cas
Comme en réserve dans mon grenier , je laisse si cela peut aider
Tu entres en A > resultat en B
Après tu pourras transformer la fonction pour mettre en mois ou autre à ta mode
Comme c'est une fonction , tu pourras l'appeler aussi ( hors vba) en temps que formule dans une cellule
 

Pièces jointes

  • Calcul_age.xlsm
    20.9 KB · Affichages: 2

danielco

XLDnaute Accro
Daniel pour ton information la formule Excel est celle-ci
E22 = zv_Debut
C1 = zv_Fin

=SI(E22="";"";DATEDIF(E22;$C$1;"m")+(DATEDIF(E22;$C$1;"md")/JOUR(FIN.MOIS($C$1;0))))
Bonjour daniel,
Merci pour ta réponse rapide.
Cela fonctionne: mais (exemple: zv_debut = 16/04/2019 me donne en nbre_mois 18,129 - formule Excel) et en VBA me donne(ta formule) 18
les deux chiffres après la virgule est important
Amicalement

Comment as-tu défini nbre_mois ? nbre_mois ne doit pas être défini comme integer ou long mas comme single ou double. Et quelle est la valeur de zv_fin ?
Daniel
 
Dernière édition:

PORCHER

XLDnaute Junior
Bonjour Hervé et merci
Le seul problème est que au restos du coeur un enfant de 0 à 6 mois et 1 jour ou de 6 à 12 mois et 1 jour ou de 12 à 18 mois et 1 jour recois un repas enfant au 2 éme jour ne recois rien.
Ta formale est génial et rapide mail il manque les jous !
Merci encore hervé et si tu as une réponse je prends.
 

danielco

XLDnaute Accro
@danielco
Ce que je fais est l'affinage au mois près avec mise en forme : impossible en formule
@PORCHER : tu es au jour près ?? avec mon fichier , il faut donc l'ouvrir tous les jours !! là pas évident au jour le jour ......mais possible , je regarde mon calcul , seul hic jongler avec les 30 et 31
Bonjour @herve62 ,
Excuse-moi, je ne comprends pas le sens de to, message.

Daniel
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour tout le monde,
Sinon par macro avec FormulaR1C1, bestial mais simple :
VB:
Sub CalcNbMois() ' Macro
    [C3].FormulaR1C1 = "= DATEDIF(zv_Debut,zv_Fin,""m"")+(DATEDIF(zv_Debut,zv_Fin,""md"")/DAY(EOMONTH(zv_Fin,0)))"
    [C3] = [C3].Value
End Sub
 

Pièces jointes

  • Porcher.xlsm
    14.4 KB · Affichages: 2

Statistiques des forums

Discussions
283 758
Messages
1 854 174
Membres
152 416
dernier inscrit
jedimaster10
Haut Bas