Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Convertir en VBA

PORCHER

XLDnaute Occasionnel
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
 

danielco

XLDnaute Accro
Bonjour,

Essaie :

VB:
nbre_mois = DateDiff("m", zv_Debut, zv_Fin) + (Evaluate("DATEDIF(" & zv_Debut & "," & zv_Fin & ",""md"")") _
  / Day(DateSerial(Year(zv_Fin), Month(zv_Fin) + 1, 0)))

Cordialement.

Daniel
 

PORCHER

XLDnaute Occasionnel
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
Supporter XLD
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: 16

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 Occasionnel
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
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: 3

Discussions similaires

Réponses
45
Affichages
4 K
Réponses
21
Affichages
988
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…