Microsoft 365 Convertir en VBA

  • Initiateur de la discussion Initiateur de la discussion PORCHER
  • 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 !

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

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

- 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

Réponses
45
Affichages
4 K
Réponses
21
Affichages
2 K
Retour