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 :

Modifier le caption d'une textbox passée en paramètre dans une fonction


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Par défaut Modifier le caption d'une textbox passée en paramètre dans une fonction
    Bonjour

    La fonction suivante est destinée à calculer l'age d'une personne en fonction de sa date de naissance insérée dans une textbox, une seconde textbox est destinée à afficher l'age de la personne.

    La fonction fonctionne bien à l'exception de la modification du caption de la textbox destinée à recevoir l'age de la personne, pouvez vous me dire ce qui ne va pas svp ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    calcul_age Me.T3, Me.T4
    La date de naissance est dans la textbox nommée T3 et le résultat attendu est dans la textbox T4

    impossible de changer le caption de textbox T4 par le biais de 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
    Private Sub calcul_age(ByRef textbox_date_naissance As msforms.TextBox, ByRef textbox_resultat_age As msforms.TextBox)
     
    Dim dateEntrée As Date
    Dim age, NbAnnées, NbMois, nbJours As Integer
     
    If textbox_date_naissance.Value = "" Then Exit Sub
     
    dateEntrée = textbox_date_naissance.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
     
    textbox_resultat_age.Value = age
     
    If NbAnnées < 1 Then
        textbox_resultat_age.Caption = "Mois"
    Else
        textbox_resultat_age.Caption = "An(s)"
    End If
     
    End Sub

    Si je modifie la fonction sans utiliser de paramètres, en spécifiant directement le nom des textboxes accueillant la date de naissance et le résultat, le caption fonctionne bien :

    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
    Private Sub calcul_age()
     
    Dim dateEntrée As Date
    Dim age, NbAnnées, NbMois, nbJours As Integer
     
    If T3.Value = "" Then Exit Sub
     
    dateEntrée = T3.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
     
    T4.Value = age
     
    If NbAnnées < 1 Then
        L4.Caption = "Mois"
    Else
        L4.Caption = "An(s)"
    End If
     
    End Sub

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Bonjour, dans la première macro tu utilises T3 et T4 qui sont des textbox, or ces contrôles n'ont pas la propriété caption.
    Dans la deuxième je vois que tu utilises L4, ne serait-ce pas un label, qui lui a bien la propriété caption ?
    Pour info, dans ta déclaration Dim age, NbAnnées, NbMois, nbJours As Integer, seul nbJours est un integer, les autres sont des variant, tu dois préciser pour chaque variable, même si tu les déclares sur la même ligne.
    De plus, tu affectes une valeur à nbJours mais tu ne l'utilises pas dans le code, donc quel est l'intérêt ?
    J'ai fait les modifications, teste et adaptes si besoin:

    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
    Private Sub calcul_age(ByRef textbox_date_naissance As MSForms.TextBox, ByRef textbox_resultat_age As MSForms.TextBox)
        Dim dateEntrée As Date
        Dim age As Integer
     
        If textbox_date_naissance.Value = "" Then Exit Sub
     
        dateEntrée = CDate(textbox_date_naissance.Value)
        age = Year(Now()) - Year(dateEntrée)
     
        ' Vérifie si la date de naissance est passée pour cette année.
        If Month(dateEntrée) > Month(Now()) Or (Month(dateEntrée) = Month(Now()) And Day(dateEntrée) > Day(Now())) Then
            age = age - 1
        End If
     
        If age > 0 Then
            textbox_resultat_age.Value = age & " An(s)"
        ElseIf age = 0 Then
            Dim mois As Integer
            mois = Month(Now()) - Month(dateEntrée)
            If mois < 0 Then
                mois = mois + 12
            End If
            textbox_resultat_age.Value = mois & " Mois"
        Else
            textbox_resultat_age.Value = "Erreur de date de naissance"
        End If
    End Sub

Discussions similaires

  1. [Encodage] Modifier le css d'une fonction date
    Par IPOTEZ dans le forum Langage
    Réponses: 4
    Dernier message: 14/02/2011, 15h19
  2. Pointeur non modifié à l'interieur d'une fonction ? o_O
    Par stephane.lallee dans le forum SL & STL
    Réponses: 8
    Dernier message: 19/03/2009, 16h06
  3. comment passé un paramètre dans une requête sql
    Par java2008 dans le forum BIRT
    Réponses: 0
    Dernier message: 03/03/2008, 12h11
  4. Réponses: 4
    Dernier message: 08/01/2008, 10h48
  5. Réponses: 1
    Dernier message: 16/03/2007, 17h30

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