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

Access Discussion :

Transférer la valeur d'une variable d'un module de classe à une procédure sub d' un sous formulaire


Sujet :

Access

  1. #1
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2016
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2016
    Messages : 171
    Points : 79
    Points
    79
    Par défaut Transférer la valeur d'une variable d'un module de classe à une procédure sub d' un sous formulaire
    Bonjour à tous.
    Dans une BDD, j'ai un formulaire (F1) qui, sur certains champs, suivant l'événement, peut appeler un sous-formulaire (SF2) qui affiche un message différent suivant la valeur d'une variable (Clé). En outre, le formulaire F1, pour vérifier l'entrée de données dans un ou plusieurs champs fait appel à un module de classe déclaré "Public". Pour avertir d'une anomalie de saisie, je souhaiterais, dans ce module de classe fixer, suivant le cas, la valeur de la variable (Clé) afin d'ouvrir également le même sous-formulaire (SF2), mais apparemment, la valeur de la variable (Clé) n'est pas transférée du module de classe vers le sous-formulaire (SF2) qui affiche un message différent suivant la valeur de cette variable.
    Je cherche donc à pouvoir transférer la valeur de cette variable depuis le module de classe vers le sous-formulaire. J'ai bien lu des articles sur des attributs tels que ByVal ou ByRef, mais je n'en comprends pas le fonctionnement.
    Quelqu'un pourrait-il m'éclairer ?

  2. #2
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 900
    Points : 4 790
    Points
    4 790
    Par défaut
    Bonjour.
    Après la rédaction d'un message, c'est une bonne pratique de le relire en se mettant dans la peau d'un nouveau lecteur. Le résultat peut être surprenant !

  3. #3
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2016
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2016
    Messages : 171
    Points : 79
    Points
    79
    Par défaut Transférer la valeur d'une variable d'un module de classe à une procédure sub d' un sous formulaire
    Je pensais m'être exprimé clairement en français.
    Bref, après avoir indiqué dans un module, appelé par le formulaire principal (F1), que Var = "1", par exemple, je souhaiterais pouvoir utiliser cette valeur "1" dans un sous-formulaire (SF2).
    J'espère avoir ainsi été plus clair.

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 015
    Points : 24 548
    Points
    24 548
    Par défaut
    Bonjour,

    En effet il faut être dans la tête du rédacteur.

    Si on s'attache à la description du fil et à la question :

    Le byval byref n'a rien à voir avec la passation de valeur entre classes (le module de formulaire EST un module de classe).

    Dans la classe il te faut créer un getter qui renvoi la valeur.
    Dans la classe de formulaire il faut invoquer ce getter, dans la mesure où ta première classe est instanciée publique dans un niveau supérieur (donc visible depuis ce formulaire).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    property get donneValue() as string
        donneValue = "ma valeur"
    end property
    dans le form :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dim valeurRetournee as string
    ...
    valeurRetournee  = maclasseInstanciee.donneValue()
    Cordialement,

  5. #5
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 015
    Points : 24 548
    Points
    24 548
    Par défaut
    Citation Envoyé par BCBFIS Voir le message
    Je pensais m'être exprimé clairement en français.
    Bref, après avoir indiqué dans un module, appelé par le formulaire principal (F1), que Var = "1", par exemple, je souhaiterais pouvoir utiliser cette valeur "1" dans un sous-formulaire (SF2).
    J'espère avoir ainsi été plus clair.
    du coup ma réponse demande une légère adaptation :

    Dans le formulaire F1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    property get donneValue() as string
        donneValue = "ma valeur"
    end property
    Dans le sf :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim valeurRetournee as string
    valeurRetournee = me.parent.donneValue
    Cordialement,

  6. #6
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2016
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2016
    Messages : 171
    Points : 79
    Points
    79
    Par défaut Transférer la valeur d'une variable d'un module de classe à une procédure sub d' un sous formulaire
    Merci Loufab pour votre réponse.
    Pour que les choses soient claires, il n'y a rien à modifier dans le module de classe qui est "Public" et dans lequel la valeur de la variable est fixée.

  7. #7
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2016
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2016
    Messages : 171
    Points : 79
    Points
    79
    Par défaut Transférer la valeur d'une variable d'un module de classe à une procédure sub d' un sous formulaire
    Bonjour à tous.
    Je ne parviens décidément pas à réaliser ce que je voudrais.
    Dans un formulaire F_Pays se trouvent notamment 2 champs (Pays_Nom et Pays_ISO). Lors de l'introduction du nom du pays, un module de classe (SaisieLettres) est activé afin de ne permettre que l'introduction de lettres de l'alphabet et transformer le nom en Majuscules. Si d'autres caractères que des lettres de l'alphabet, un tiret ou un espace sont introduit dans le nom, il y a une alerte. Parallélement un sous-formulaire (SF_DoublonsPays) est amener à s'ouvrir pour signaler soit que le pays, soit que le code ISO existe déjà.
    Les messages destinés à informer que seules les lettres de l'alphabet sont acceptées doivent, pour vérifier le nom ou le code ISO, être à 2 endroits différents. N'arrivant pas à faire en sorte que le test porte sur le nom ou sur le code ISO, j'avais imaginé de supprimer ces messages d'alertes et de les remplacer par l'ouverture du sous-formulaire (FM_DoublonsPays) en adaptant le message sur base d'une variable (CléPays) qui est égale à "1" pour le nom du pays et "2" pour le code ISO; j'aurais placé sa valeur sur "3" pour les lettres de l'alphabet. Mon problème est de faire passer la valeur de la variante (CléPays) du module de classe au sous-formulaire (FM_DoublonsPays) pour afficher un texte d'alerte sur base de cette valeur. Là, malgré mes lectures et vos réponses, je n'y parviens pas.
    Maintenant, peut-être existe-t-il un autre moyen de réaliser ce que je cherche à faire. Etant peu compétent en la matière, j'ignore encore beaucoup, beaucoup de choses à propos d'ACCESS.
    Je joins copie de ce que j'ai réalisé.
    Merci à tous.
    Fichiers attachés Fichiers attachés

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

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 273
    Points : 6 582
    Points
    6 582
    Par défaut
    re,
    je pense que vous avez cherché à vous compliquer la vie pour pas grand chose.
    je rappelle que manuscrits et tapuscrits sont rédigés en minuscules en respectant les règles d'orthographe principalement.
    obliger un utilisateur à devoir saisir en majuscule des données pourrait en énervé plus d'un, moi le premier. (voir la vidéo "bad day" sur le web). Je n'évoque même pas les lettres accentuées.
    le plus simple serait de s'assurer :
    - que l'on saisisse bien des caractères alpha accentués ou non dans les textboxes Pays_Nom et Pays_ISO
    - que Pays_Nom et Pays_ISO contiennent bien des valeurs
    - qu'il n'y ait pas de risque de doublons
    Et si tout est OK insérer le nouvel enregistrement dans la table adéquat.
    Voir F_Pays1 (il y a d'autres solutions)

    Pour info
    FM_DoublonsPays n'est pas un sous-formulaire
    Il n'y a pas dans votre bdd de modules de classe. Il n'y a que 2 modules standards et et des modules formulaires dans l'environnement VBA.
    Fichiers attachés Fichiers attachés

  9. #9
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2016
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2016
    Messages : 171
    Points : 79
    Points
    79
    Par défaut Transférer la valeur d'une variable d'un module de classe à une procédure sub d' un sous formulaire
    Merci Hyperion13 pour votre dernière réponse.
    Il est vrai que le formulaire F_Pays1 est agréable à utiliser. Je dois revoir la manière de concevoir mes projets.
    Excellent week-end à vous.

  10. #10
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2016
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2016
    Messages : 171
    Points : 79
    Points
    79
    Par défaut
    J'ai du mal à comprendre les codes suivants:
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Private Sub btnValidation_Click()
    Dim chkCount As Integer
    Dim strWhere As String
    Dim ctrl As Control
    Dim chkBool As Boolean
     
    For Each ctrl In Me.Controls
        Select Case ctrl.ControlType
            Case acTextBox
                chkBool = Len(ctrl.Value & vbNullString) = 0
            Case acComboBox
                chkBool = (ctrl.ListIndex = -1)
            Case acListBox
                chkBool = (ctrl.ListCount = 0)
            Case Else
                chkBool = False
        End Select
        If chkBool Then
            MsgBox "Vous devez saisir un nom dans " & ctrl.Name, vbOKOnly + vbExclamation, "Saisie obligatoire"
            ctrl.SetFocus
            Exit For
        End If
    Next ctrl
     
    strWhere = "([Pays_Nom] = """ & Me.Pays_Nom & """) AND " & _
                  "([Pays_ISO] = """ & Me.Pays_ISO & """)"
     
    chkCount = DCount("*", "T_Pays", strWhere)
     
    If chkCount <> 0 Then
        MsgBox "Le nom du pays et son code ISO exsistent déjà !", vbOKOnly + vbExclamation, "Risque de doublon"
        Me.Pays_Nom = Null
        Me.Pays_ISO = Null
        Me.Pays_Nom.SetFocus
    Else
        CurrentDb.Execute "INSERT INTO T_Pays (Pays_Nom, Pays_ISO, Pays_EEE)" _
        & " VALUES (""" & UCase(Me.Pays_Nom) & """, """ & UCase(Me.Pays_ISO) & """, " & Me.Pays_EEE & ")", dbFailOnError
        MsgBox "Le nom du pays et son code ISO ont été enregistrés", vbOKOnly + vbInformation, "Pour information"
        Me.Pays_Nom = Null
        Me.Pays_ISO = Null
        Me.Pays_EEE = False
        Me.Pays_Nom.SetFocus
    End If
    End Sub
    Je comprends que vous dimensionnez des variables, mais je ne connais pas le type "Control" de même que je ne vois pas d'où vient "Me.Controls", qu'est-ce que c'est ? Idem pour "ListIndex" et "ListCount" et "strWhere".
    J'ai 72 ans et essaie de tenir mon esprit actif, mais j'ai parfois du mal à saisir les choses. Si vous pouviez m'éclairer sur ces points, cela me permettrait peut-être de comprendre car j'estime qu'il n'y a rien de plus stupide que d'appliquer des systèmes que l'on ne comprend pas.
    D'avance je vous remercie.

  11. #11
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2016
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2016
    Messages : 171
    Points : 79
    Points
    79
    Par défaut
    Rebonjour Hyperion13.
    Je constate également une anomalie. Lorsque j'introduis le nom d'un pays qui existe déjà, au lieu de signaler que ce pays existe déjà, il m'alerte en signalant que je ne peux saisir que des caractères alphabétiques. Voir PDF joint.
    Merci de voir pourquoi. Personnellement, je ne sais pas.
    Images attachées Images attachées

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

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 273
    Points : 6 582
    Points
    6 582
    Par défaut
    re,
    Post#10
    Peu importe l'âge mais êtes-vous fâché avec les moteurs de recherches du web ou de DEV ?
    Car vous trouverez probablement toutes les réponses à vos questionnements.
    Sinon
    For each ctrl in Me.Controls, faire une boucle sur tous les contrôles du formulaire en cours (Me.)
    ListIndex
    ListCount
    strWhere, est une manière de poser le critère de la fct de domaine DCount()
    Peut-être est-ce mieux pour vous ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chkCount = DCount("*", "T_Pays", ([Pays_Nom] = """ & Me.Pays_Nom & """) And ([Pays_ISO] = """ & Me.Pays_ISO & """))
    Post#11 (img)
    Comment avez-vous saisi l'accent grave de Grèce ?
    - en minuscule pas de problème, c'est è
    - en majuscule c'est Alt 0200 avec les touches num du NumPad.
    Images attachées Images attachées  

  13. #13
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 015
    Points : 24 548
    Points
    24 548
    Par défaut
    Sinon pour l'étude de la méthode, la fonction me semble totalement inutile.

    A l'heure actuelle on peut trouver la liste des pays et leur code Iso sur une simple recherche internet et peupler une table.

Discussions similaires

  1. Réponses: 14
    Dernier message: 14/01/2009, 15h59
  2. Réponses: 6
    Dernier message: 29/09/2008, 09h24
  3. Transmettre valeur d'une balise div présente dans un formulaire
    Par nicoaix dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 24/04/2008, 15h33
  4. Réponses: 3
    Dernier message: 18/02/2008, 11h23
  5. Réponses: 4
    Dernier message: 27/10/2007, 21h11

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