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
Je ne comprends pas pourquoi tu utilises la valeur "18,01" dans tes tests. Apparemment, avec l'exemple initial, toutes les réponses proposées (à l'exception de la mienne (tant pis pour la "gloire" sic) donnent un résultat supérieur à 18 (et même apparemment à 18,01).

Daniel
 
C

Compte Supprimé 979

Guest
Re,

Pourquoi ne pas afficher le résultat en clair : 18 mois et 1 jour, plutôt qu'un chiffre à virgule ?

@+
 
Dernière modification par un modérateur:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous,

@danielco,
Je ne pense pas que la fonction DateDif soit bugguée. C'est simplement sa méthode de calcul qui n'est pas basée sur un nombre de jours écoulés mais sur des unités de temps ( année, mois, jour )
Ainsi 1.5 mois peut vouloir dire 43 jours ou 46 jours. ( 28+15 ou 31+15 )

C'est pour cela qu'un calcul en jours écoulés et par DateDif donneront des résultats différent.
A noter que d'un point de vue administratif ou du sens commun, c'est cette fonction qui est utilisée.
Vous obtenez la majorité à 18 ans date anniversaire quelle que soit le nombre d'années bissextiles que vous ayez vécu.
 

PORCHER

XLDnaute Occasionnel
Bien raisonné Daniel mais alors que peut on faire pour répondre à mon problème.
J'ai envoyé un fichier sans mot de passe, peut tu corriger à ta convenance
je t'en remercie
amicalement
Jean-Yves
 

Dranreb

XLDnaute Barbatruc
Bonjour.
DATEDIF(E28;$C$1;"m")+(DATEDIF(E28;$C$1;"md")/JOUR(FIN.MOIS($C$1;0)))
Que le DATEDIF soit bogué ou non, cette formule ne me semble pas correcte dans la mesure où le nombre excédentaire de jours trouvé sur le nombre de mois est répartit seulement sur le mois en cours, ce qui est faux si on est justement au dernier jour du mois, alors que les jours en excédent sont dûs à ce que la naissance est vers la fin de son mois, et que c'est donc celui-ci qui n'est pas complet.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re le fil,
Si le problème à l'origine est simplement :
Si un enfant de 0 à 18 mois et un jour, reçois un repas Enfant
Si un enfant de 18 mois et deux jours reçois un repas Adulte
Alors pourquoi ne pas utiliser cette simple formule :
Code:
=SI(MOIS.DECALER(C9;18)+1<AUJOURDHUI();"Repas Adulte";"Repas Enfant")
 

Pièces jointes

  • Porcher (9).xlsx
    10.8 KB · Affichages: 2

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous,

Des unités de Temps : Seul le jour peut être une unité mais certainement pas le mois ou l'année.
Donc pour le mois ou l'année, seul l'usage courant et populaire peut être pris en compte (voir une tentative dans mon post #25).
D'ailleurs à chaque question sur les durées en mois ou années, la discussion se transforme en roman fleuve toujours sans conclusion claire et tranchée.

C'est surprenant qu'une organisation aussi caritative (et combien utile) se transforme en établissement de clercs comptables (c'est de la provocation amicale) . Un petit, à un jour près, va manger comme un enfant et soudain le lendemain prendra une ration d'adulte ? Certes non ! Alors faisons un calcul simple, on n'est pas à un jour près. Voir la proposition de @sylvanu (que je salue ) juste ci-dessus.
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
bonjour a tous

@merci mapomme
puré on revient en 45 c'est pas possible
il faudrait que notre ami Porcher aille visiter une maternité et demande les volumes donnés au nourrissons de MÊME AGE (VOIR MÊME DIFFÉRENT) au puéricultrices
et qu'il mette cela dans un tableau et qu'il se rende compte par lui même le wrong way qu'il a pris
je connais bien le principe et règle de distribution du resto du coeur pour y avoir été bénévole qui parfois peut être surprenant
et je parle même pas du profit des œuvrant à la distribution
le pauvre coluche doit se retourner dans sa tombe
et ce que j'ai vu c'est avéré exact et pareil sur 3 site
pardon je m’égare Ok je sort
 

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD
Bonjour tout le monde, un petit bout de code d'un projet commencer, si ça peut servir.


VB:
Private Sub TextBox1_AfterUpdate()
Tmp = Me.TextBox1.Value
Nba = Year(Date) - Year(Tmp)
Nbm = Month(Date) - Month(Tmp)
Nbj = Day(Date) - Day(Tmp)
Nb = Day(DateSerial(Year(Date), Month(Date), 0))
Pan = Day(Tmp) & "/" & Month(Tmp) & "/" & Year(Date)
Pan1 = DateAdd("yyyy", 1, Pan)
    If Month(Date) < Month(Tmp) Or (Month(Date) = Month(Tmp) And Day(Date) < Day(Tmp)) Then
        Me.TextBox2.Value = Year(Date) - Year(Tmp) - 1 & " " & "ans"
            Else
        Me.TextBox2.Value = Year(Date) - Year(Tmp) & " " & "ans"
    End If
        If Nbj < 0 Then
            Nbm = Nbm - 1
                Nbj = Nbj + Nb
                    End If
        If Nbm < 0 Then
            Nba = Nba - 1
                Nbm = Nbm + 12
                    End If
Me.TextBox5.Value = Nba & " " & "ans," & " " & Nbm & " " & "mois," & " " & Nbj & " " & "jours."
Me.TextBox3.Value = DateDiff("m", Tmp, Date) & " " & "mois"
 

herve62

XLDnaute Barbatruc
Supporter XLD
Bonjour
Je remarque que ça discute sur le sujet
J'ai re vérifié ma fonction en fait les jours existaient mais je n'en avait pas besoin pour l'appli
donc je les re validés ; j'ai mis la fonction en F
A tester
 

Pièces jointes

  • Dotation-1.xlsm
    90.6 KB · Affichages: 9

PORCHER

XLDnaute Occasionnel
Bonjour,
Je dois m’excuser car le sujet que j’aborde est hors Excel, mais l’homme de 73 ans que je suis est blessé par ceux qui vivent dans l’ignorance. Aux restos du Cœur un Bébé 0 – 6 mois : 1 portion de lait infantile 1er âge +1 portion de 1 paquet de couches adaptées au poids, un Bébé 6 – 12 mois : 1 portion de lait infantile 2ème âge, 1 paquet de couches adaptées au poids, 6 petits pots variés (4 sucrés, 2 salés). Un Bébé de de 12 – 18 mois : 1 dotation adulte hebdomadaire + 1 paquet de couches adaptées au poids + 1 portion de lait de croissance.
Le cadeau naissance, Les produits d’hygiène, du matériel de puériculture, Vêtements et linge.

Un adulte de plus de 18 mois : 1 dotation adulte comprenant 36 repas, 1 portion de protides, 1 portion de d’accompagnement(légumes), 1 portion de produit laitier,1 portion de dessert /personne /Semaine + 1,5 L de lait UHT + des produits complémentaires + des produits d’hygiène + Vêtements pour adultes. Deux passages minimum par semaine.

L’accompagnement à l’aide alimentaire, Les actions d’orientation et d’accompagnement

Atelier cuisine, atelier Coiffure, Place de cinéma, Culture (Bibliothèque) Etc.…

Je suis un simple bénévole qui est là pour aider, partager et je le fait depuis plus de 10 ans.
Amicalement
 

Discussions similaires

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