IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Formule pour calculer un âge dans un TextBox


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut Formule pour calculer un âge dans un TextBox
    Bonjour à tous,

    J'ai un problème un peu compliqué pour moi. J'ai fait des recherches mais je n'ai rien trouvé ou seulement une partie.
    Voilà : Dans un UserForm (FrmEnf) 2 TextBox, le premier contient une date de naissance (TEnf3) avec un format date "dd/mm/yyyy", le 2ème (TEnf4) doit contenir l'âge calculé par rapport à la date du jour.
    En plus, le Label (Label6) doit être si l'âge est inférieur à 1an = mois, si égal ou supérieur à 1an = an.
    Pouvez-vous m'aider s'il vous plait ?
    Merci par avance

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Pour simplifier, on peut passer par une colonne intermédiaire :
    Nom : Age.JPG
Affichages : 2116
Taille : 5,9 Ko
    Dans ce cas, les formules sont celles-ci
    Nom : âge - formules.JPG
Affichages : 2245
Taille : 12,2 Ko
    On peut tout placer dans une seule colonne mais ça comlique inutilement.
    Bonne journée

  3. #3
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Bonjour ouskel'n'or,

    Là c'est une formule pour un calcul dans une feuille Excel. Je souhaite que le calcul se fasse dans l'UserForm (Private Sub TEnf3 AfterUpdate()).
    Mais ta formule me donne une idée de ce qu'il faut faire, mais l'appliquer en Vba ????

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Tu ne connais pas l'utilisation de Application.WorksheetFunction ?
    Tu dis, au cas où, je te mettrai ça

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 191
    Par défaut
    Salut NEC14,

    pour les calculs sur les dates par rapport à celle d'aujourd'hui, tu peux utiliser l'instruction Now() qui te donnera la date d'aujourd'hui, et faire une différence avec la date de la Textbox TEnf3 avec ce bout de code par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Dim dateEntrée As Date
    Dim age, nbAnnées, nbMois, nbJours As Integer
     
    dateEntrée = TEnf3.Value
    nbAnnées = (Year(Now()) - Year(dateEntrée))
    nbMois = (Month(Now()) - Month(dateEntrée))
    nbJours = (Day(Now()) - Day(dateEntrée))
    If nbAnnées > 0 And nbMois > 0 Then
        age = nbAnnées
    ElseIf nbAnnées > 0 And nbMois = 0 And nbJours >= 0 Then
        age = nbAnnées
    Else
        age = nbAnnées - 1
    End If
    TEnf4.Value = age
    If age < 1 Then
        Label6.Caption = nbMois
    Else
        Label5.Caption = nbAnnées
    End If
    J'espère que cela t'aidera...

    Cordialement,

    Lyonel

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    Je te propose ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Function Age1(D1 As String, D2 As String) As String
      Age1 = "une date est manquante"
      If D1 = "" Or D2 = "" Then Exit Function
      Age1 = "La 2ème date doit nécessairement être plus grande que la 1ère !"
      If DateValue(D1) > DateValue(D2) Or Not IsDate(D2) Then Exit Function
      Dim toto As String, a As Integer, m As Integer, j As Integer
      toto = DateValue(DateSerial(Year(D2) - Year(D1), Month(D2) - Month(D1), Day(D2) - Day(D1)))
      a = Val(Format(toto, "yy"))
      m = Val(Format(toto, "mm"))
      j = Val(Format(toto, "dd"))
      Age1 = Str(a) & " an" & IIf(a > 1, "s, ", ", ") & Str(m) & " mois et " _
      & Str(j) & " jour" & IIf(j > 1, "s", "")
    End Function
    où D1 est la date la plus grande et D2 la plus ancienne
    Tu peux l'aappeler et l'afficher ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Label1.Caption = Age1(TextBox1Text, TextBox2.Text)
    Il est clair que si tu ne veux afficher que les années et mois, tu transformes ainsi la dernière ligne de la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Age1 = Str(a) & " an" & IIf(a > 1, "s, ", ", ") & Str(m)

  7. #7
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Bonjour,

    J'ai donc mis en place ce code. Mais j'ai un petit soucis, si je tape par exemple 01/09/2008 dans TEnf3, TEnf4 me donne comme résultat -1.
    Sinon, le reste fonctionne bien, le label se met bien en place, si je tape 12/02/1961 le résultat est bien 47.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Private Sub TEnf3_AfterUpdate()
    Dim dateEntrée As Date
    Dim age, NbAnnées, NbMois, nbJours As Integer
     
    dateEntrée = TEnf3.Value
    NbAnnées = (Year(Now()) - Year(dateEntrée))
    NbMois = (Month(Now()) - Month(dateEntrée))
    nbJours = (Day(Now()) - Day(dateEntrée))
    If NbAnnées > 0 And NbMois > 0 Then
        age = NbAnnées
    ElseIf NbAnnées > 0 And NbMois = 0 And nbJours >= 0 Then
        age = NbAnnées
    Else
        age = NbAnnées - 1
    End If
    TEnf4.Value = age
    If age < 1 Then
        Label6.Caption = "Mois"
    Else
        Label6.Caption = "An(s)"
    End If
    End Sub

  8. #8
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Attention : ce code-là ne semble pas tenir compte des années bissectiles

  9. #9
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Citation Envoyé par ucfoutu Voir le message
    Attention : ce code-là ne semble pas tenir compte des années bissectiles
    Ah ouais! je n'y avais pas pensé à cela.
    Moi qui était content parce que cela fonctionnait.....
    Et il faut que je rajoute quoi pour les bisextiles ?

  10. #10
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    J'ai trouvé la réponse
    Voici le code tel qu'il fonctionne correctement, cela peut servir à quelqu'un d'autre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Private Sub TEnf3_AfterUpdate()
    Dim dateEntrée As Date
    Dim age, NbAnnées, NbMois, nbJours As Integer
     
    dateEntrée = TEnf3.Value
    NbAnnées = (Year(Now()) - Year(dateEntrée))
    NbMois = (Month(Now()) - Month(dateEntrée))
    nbJours = (Day(Now()) - Day(dateEntrée))
    If NbAnnées > 0 And NbMois > 0 Then
        age = NbAnnées
    ElseIf NbAnnées > 0 And NbMois = 0 And nbJours >= 0 Then
        age = NbAnnées
    Else
        age = NbMois
    End If
    TEnf4.Value = age
    If NbAnnées < 1 Then
        Label6.Caption = "Mois"
    Else
        Label6.Caption = "An(s)"
    End If
    End Sub
    Merci à tous pour votre aide.
    Qu'est-ce que l'on ferait sans vous ????

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Formule pour calcul de prime
    Par zirh92 dans le forum Excel
    Réponses: 18
    Dernier message: 27/12/2008, 22h05
  2. [FORMULES] Formule pour calcul des marges
    Par termor dans le forum Excel
    Réponses: 8
    Dernier message: 15/07/2008, 17h15
  3. [CR XI] Erreur formule pour calculer pourcentage
    Par campia dans le forum Formules
    Réponses: 1
    Dernier message: 19/07/2007, 09h35
  4. Quels sont les difficultés pour calculer le ROI dans un projet BI?
    Par dessinateurttuyen dans le forum Emploi
    Réponses: 2
    Dernier message: 17/07/2007, 16h18
  5. [DEBUTANT] Probelme pour calculer 2 champs dans un etat
    Par The_freeman dans le forum Access
    Réponses: 1
    Dernier message: 18/06/2006, 18h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo