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 :

Calculer un âge dans un userform


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Logisticien
    Inscrit en
    Janvier 2022
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Logisticien

    Informations forums :
    Inscription : Janvier 2022
    Messages : 38
    Par défaut Calculer un âge dans un userform
    Bonjour,

    Je suis en ce moment sur un projet de gestion des adhérents,

    J'aimerais faire ressortir l'âge d'un adhérent à partir de la textbox "datedenaissance" et afficher dans la textbox "âge", l'âge automatiquement dans cette textbox.

    J'aimerais également savoir si vous aviez des solutions pour dire dans une textbox que l'utilisateur doit mettre soit "OUI" ou "NON" si il met autre chose que cela ne fonctionne pas.

    Merci d'avance pour vos solutions,

    Bonne soirée.

    Théo

  2. #2
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 121
    Par défaut
    Salut

    Pour le calcul de l'age, il suffit dans le _Change du textbox contenant la date de naissance de mettre le calcul de l'age et de le placer dans le textbox "Age". Ainsi quand le contenu de DateDeNaissance est modifié, l'age est mis à jour.

    Pour le Oui/Non dans un textbox, pourquoi ne pas simplement utiliser une checkbox?

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Voici une fonction VBA pour calculer l'âge d'une personne. D'autres utiliseront Datediff mais perso, je n'aime pas, chacun son truc.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Function GetAge(BirthDate As Date, Optional CalculationDate As Date) As Long
      If CalculationDate = 0 Then CalculationDate = Date
     
      GetAge = Year(CalculationDate) - Year(BirthDate)
      If DateSerial(Year(CalculationDate), Month(BirthDate), Day(BirthDate)) < CalculationDate Then GetAge = GetAge - 1
    End Function
    Cette fonction devrait être placée dans un module Tools pour être réutilisée à l'envi sur d'autres projets.

    Du coup, il suffit d'utiliser l'évènement AfterUpdate du textbox sur la date de naissance pour actualiser le textbox Age. Normalement, il faut bien entendu un test sur la validité de la saisie de la date.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub tboBirthDate_AfterUpdate()
      tboAge.Value = DateTools.GetAge(tboBirthDate)
    End Sub

    Pour le oui/non, je rejoint Qwazerty, un CheckBox est le contrôle idéal pour cela.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  4. #4
    Membre averti
    Homme Profil pro
    Logisticien
    Inscrit en
    Janvier 2022
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Logisticien

    Informations forums :
    Inscription : Janvier 2022
    Messages : 38
    Par défaut
    Bonjour merci de vos réponses,

    Cependant, je ne comprends pas comment intégrer votre code dans mon vba. Effectivement, j'ai changé les noms pour l'affecter à mon formulaire mais cela m'indique que "l'objet requis", voici mon code,

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    Private Sub datedenaissance1_AfterUpdate()
    âge1.Value = DateTools.GetAge(datedenaissance1)
     
    End Sub
     
    Function GetAge(BirthDate As Date, Optional CalculationDate As Date) As Long
      If CalculationDate = 0 Then CalculationDate = Date
     
      GetAge = Year(CalculationDate) - Year(BirthDate)
      If DateSerial(Year(CalculationDate), Month(BirthDate), Day(BirthDate)) < CalculationDate Then GetAge = GetAge - 1
    End Function
     
    Private Sub datedenaissance1_Change()
     
        Dim Valeur As Byte
      datedenaissance1.MaxLength = 10 'nb caractères maxi autorisé dans le textbox
        Valeur = Len(datedenaissance1)
        If Valeur = 2 Or Valeur = 5 Then datedenaissance1 = datedenaissance1 & "/"
     
    End Sub
     
     
    Private Sub âge1_Change()
     âge1.MaxLength = 2 'nb caractères maxi autorisé dans le textbox
     
    'avec la virgule non valide (entier)
     
        On Error Resume Next
     
        If Not IsNumeric(Right(âge1, 1)) Then
            MsgBox "Le caractère saisi n'est pas valide, il faut entrée une valeur numérique"
     
        End If
    End Sub
    Pouvez-vous m'expliquer ce qu'il faut modifier exactement ?

    Merci d'avance,

    Théo.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Apparemment, la fonction GetAge est dans le module du userform. Dans ce cas, il faut supprimer DateTools. devant l'appel de la fonction. Il faut également bien vérifier les noms des contrôles. Perso, je mets toujours une majuscule quelque part dans le nom. Par contre, je saisis le code en minuscules et le VBE se charge de "corriger" en remettant les majuscules là où il faut. Ainsi, on vérifie visuellement très vite que la saisie est correcte.

    N'hésite pas à compiler ton code avant de l'exécuter, ça permet une vérification que tout est correct au niveau des noms utilisés, des arguments et des types de variables.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Membre averti
    Homme Profil pro
    Logisticien
    Inscrit en
    Janvier 2022
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Logisticien

    Informations forums :
    Inscription : Janvier 2022
    Messages : 38
    Par défaut
    Merci beaucoup de votre réponse, cela fonctionne !

    Encore merci,

    Bonne soirée.

    Théo

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

Discussions similaires

  1. [XL-2007] Dans un UserForm, effectuer un calcul à partir de CheckBox
    Par Danad38 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 08/12/2010, 08h14
  2. [E-97]calcul dans un userform
    Par Chicard dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 24/02/2009, 18h38
  3. Calcul d'un total dans une UserForm
    Par clodius46 dans le forum VBA Word
    Réponses: 40
    Dernier message: 26/10/2007, 23h06
  4. calcul dans un userform
    Par stephlinternaute dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 23/07/2007, 00h25
  5. Comment mettre a jour des calculs dans un userform
    Par alex.a dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 18/06/2007, 17h59

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