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

IHM Discussion :

Comment passer le nom d'une étiquette de formulaire en paramètre d'une fonction ?


Sujet :

IHM

  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 257
    Points : 76
    Points
    76
    Par défaut Comment passer le nom d'une étiquette de formulaire en paramètre d'une fonction ?
    Bonjour,

    je "bidouille" actuellement un agenda sous access
    j'ai mis en place des étiquettes cliquables sur un formulaire "Etudes" (exemple "day1")
    chaque étiquette correspondant aux jours du mois
    un double click sur une étiquette met à jours 2 tables en se basant sur des informations du formulaire et le Caption de l'étiquette (je reconstitue une date)

    j'aimerais faire une fonction commune à toutes mes étiquettes et pour cela je dois passer le nom de l'étiquette en paramètre de cette fonction
    et je n'y arrive pas, j'ai essayé différents types de concaténation sans succès...

    comment fait-on ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    Private Sub DAY1_DblClick(Cancel As Integer)
    
    Dim dat As Date
    dat = DateSerial(anneeContrat(), moisContrat(), Forms!Etudes!day1.Caption)
    'évènement 
    
    End Sub

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonjour,
    j'ai mis en place des étiquettes cliquables sur un formulaire "Etudes" (exemple "day1")
    chaque étiquette correspondant aux jours du mois
    peux-tu préciser la version Access que tu utilises ? Car, à ma connaissance il n'existe pas d'évènement sur une étiquette, ou alors tu as créé des zones de texte ou des boutons ...
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  3. #3
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 257
    Points : 76
    Points
    76
    Par défaut
    bonjour
    j'utilise Access 2016
    je viens de vérifier et ce sont bien des Etiquettes

  4. #4
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    c'est donc une nouvelle fonctionalité, je n'ai qu'Access 2013.
    Une question: est-ce que sur doubleclick sur une étiquette permet de savoir que c'est le contrôle actif ?
    un test tout simple permet de le savoir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub DAY1_DblClick(Cancel As Integer)
     
    ' test sur le contrôle actif
    Msgbox Me.ActiveControl.Name
     
    Dim dat As Date
    dat = DateSerial(anneeContrat(), moisContrat(), Forms!Etudes!day1.Caption)
    'évènement 
     
    End Sub
    si la boite message te renvoie Day1 c'est tout bon, il sera possible de créer une fonction commune
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  5. #5
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 257
    Points : 76
    Points
    76
    Par défaut
    je viens de tester et çà me renvoie le nom du contrôle sur lequel est placé le focus... et non pas le nom de l'étiquette : (

  6. #6
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    dommage, mais cela ne rend pas la solution de mutualisation du code plus difficile, mais plus longue à mettre en place.
    Je vais donc essayer sans filet car je n'ai pas Access 2016:
    crée ta fonction dans ton formulaire on la nommera RetourDate
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Function RetourDate(pEtiq as String) as Date
    pEtiq est le paramètre passé à la fonction et contient le nom du contrôle étiquette sur lequel le double-clic est effectué et RetourDate est de type Date (car elle va renvoyer la date fabriquée).
    cette fonction contiendra ce code (j'ai fait au plus simple à toi d'implémenter ce qui manque):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim dat As Variant
    dat = DateSerial(anneeContrat(), moisContrat(), Me(pEtiq).Caption)
    If isdate(date) then
       RetourDate = dat
    Else
       ' afficher un message d'erreur si date invalide
        RetourDate = 0   ' 00:00:00 
    End if
    Et l'appel se fera comme cela dans chaque évènement Double_Click:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim madate as date 
    madate = RetourDate(Me.Day1.name)
    il faut évidemment changer le nom de l'étiquette à chaque évènement
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  7. #7
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Salut
    Est-ce voir img que vous essayez de mettre en place ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub day1_DblClick(Cancel As Integer)
    Dim MaDate As Date
    MaDate = DateSerial(Year(Now()), Month(Now()), Forms("Formulaire2")("day1").Caption)
    MsgBox "la date est ... " & MaDate
    End Sub
    Images attachées Images attachées  
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  8. #8
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonsoir hyperion13,
    à l'origine, le code fonctionne ce n'était pas le souci ... du moins si j'ai bien compris. La solution était plutôt de mutualiser le code pour éviter d'écrire 31 fois les mêmes lignes, chose que je n'ai pas réussi en relisant le code que j'ai fourni .
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  9. #9
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut


    Il n'y a pas d’événements sur une étiquette...

    Une piste de recherche : Les formulaires de Planning

    Bonne lecture
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  10. #10
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 257
    Points : 76
    Points
    76
    Par défaut
    merci pour vos réponses
    c'est exactement çà tee_grandbois... j'ai 31 boutons au maximum

    j'ai continué d'avancer et j'ai le code suivant qui est fonctionnel

    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
     
    'Sélection d'une date sur le calendrier
    Private Sub DAY1_DblClick(Cancel As Integer)
     
    Dim dat As Date
    Dim num As Integer
    dat = DateSerial(anneeContrat(), moisContrat(), Forms!Etudes!day1.Caption)
    If IsNull(Forms!Etudes!ETU_NUM) Then
        MsgBox ("Veuillez renseigner un nom d'étude")
    Else
        num = Forms!Etudes!ETU_NUM
    End If
     
    If disponibiliteDate(dat) Then
        Call selectionnerDate(dat, num)
        'on colore la case en orange
        Forms!Etudes!day1.FontBold = True
        Forms!Etudes!day1.BackColor = RGB(255, 217, 102)
        Forms!Etudes!day1.BorderColor = RGB(255, 217, 102)
     
    Else
        Call deselectionnerDate(dat, num)
        'on revient à la couleur d'origine
        Forms!Etudes!day1.FontBold = False
        Forms!Etudes!day1.BackColor = RGB(119, 192, 212)
        Forms!Etudes!day1.BorderColor = RGB(210, 222, 239)
     
    End If
     
    End Sub
    et j'aimerais donc sur chaque bouton pouvoir appeler une procédure en passant en paramètre de cette fonction le nom de mon étiquette du genre

    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
    35
    Private Sub DAY1_DblClick(Cancel As Integer)
    
    Call calendrier(etiquette)
    
    End sub
    
    'procédure commune calendrier
    Public Sub calendrier(etiquette As String)
    
    Dim dat As Date
    Dim num As Integer
    dat = DateSerial(anneeContrat(), moisContrat(), Forms!Etudes!etiquette.Caption)
    If IsNull(Forms!Etudes!ETU_NUM) Then
        MsgBox ("Veuillez renseigner un nom d'étude")
    Else
        num = Forms!Etudes!ETU_NUM
    End If
    
    If disponibiliteDate(dat) Then
        Call selectionnerDate(dat, num)
        'on colore la case en orange
        Forms!Etudes!day1.FontBold = True
        Forms!Etudes!day1.BackColor = RGB(255, 217, 102)
        Forms!Etudes!day1.BorderColor = RGB(255, 217, 102)
    
    Else
        Call deselectionnerDate(dat, num)
        'on revient à la couleur d'origine
        Forms!Etudes!day1.FontBold = False
        Forms!Etudes!day1.BackColor = RGB(119, 192, 212)
        Forms!Etudes!day1.BorderColor = RGB(210, 222, 239)
    
    End If
    End sub

  11. #11
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 257
    Points : 76
    Points
    76
    Par défaut
    c'est bon j'ai trouvé grâce à vous
    j'utilise l'autre écriture vba sur les formulaires

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms("Etudes")("" & etiquette & "").Caption)

  12. #12
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonjour,
    pour la compréhension du code par la communauté, pourrais-tu poster le code complet ? Car je ne vois pas la méthode utilisée pour renseigner la variable etiquette.
    T'es-tu inspiré de la méthode que je t'ai fournie ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    etiquette = Me.Day1.name
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  13. #13
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Bonjour Jeannot45,
    Citation Envoyé par Jeannot45 Voir le message


    Il n'y a pas d’événements sur une étiquette...
    D'après OZ1977 il semblerait que ce soit le cas depuis la version 2016, mais je pense que cela doit être très limité (clic, double-clic)
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 16/11/2018, 17h04
  2. passer le nom d'une fonction comme paramètre d'une autre fonction?
    Par med_alpa dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 11/03/2010, 12h57
  3. Comment passer un argument dans une fonction
    Par DeezerD dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 22/01/2008, 18h13
  4. Réponses: 4
    Dernier message: 09/11/2005, 17h11

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