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 :

Alimenter le contenu d'une zl d'un form ouvert avec le contenu d'une autre zl dans un autre form ouvert [AC-2007]


Sujet :

IHM

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 163
    Points : 60
    Points
    60
    Par défaut Alimenter le contenu d'une zl d'un form ouvert avec le contenu d'une autre zl dans un autre form ouvert
    Bonjour,

    Je sollicite vos conseils pour mettre en oeuvre une procédure qui me parait relativement complexe ( mais elle vous semblera probablement être un jeu d'enfant...)

    Voici le contexte:
    - une zl(a) dans un form(a) ouvert reçoit le choix d'une donnée au sein de sa liste ( dont le contenu est basé sur une requête multicritères) ,
    - une zl(b) dans un form(b) ouvert a un rowsource spécifique.

    Le form(a) permet à l'utilisateur d'élargir la recherche et sélectionner une autre donnée quand le rowsource de la zl(b) est vide.

    Je cherche sur clic d'un bouton "valider" transférer la valeur de la zl(a) dans le contenu de la zl(b) et fermer le form(a).

    J'ai créé une requête pour alimenter le rowsource de zl(b) qui contient une clause where =[zl(a)] et qui fonctionne tant que form(a) est ouvert.

    Après je suis un peu dans le brouillard ... notamment pour la syntaxe définissant le rowsource de la zl(b) dans le form(b), malgré la lecture attentive de Fabrice Constans sur les syntaxes d'appel.

    En vous remerciant par avance pour votre aide.

    J'ai essayé ces 2 codes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub valider_chx_AVS_elarg_Click()
    Forms.SForm_affect_AVS1.SForm_affect_AVS2.Form.id_recrut.RowSource = R_select_AVS_elarg ' j'affecte au contenu de  la zl(b) la sélection faite dans la zl(a) via la requête 
    With Forms.SForm_affect_AVS2.id_recrut  ' je sélectionne dans la liste de zl(b) la valeur unique
         If .ListCount = 1 Then .Value = .ItemData(0)
    End With ' la valeur de zl(a) est affectée à Zl(b) 
    DoCmd.Close acForm, "SForm_select_AVS_elarg" 'je ferme le form de recherche élargie
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub valider_chx_AVS_elarg_Click()
    Forms.SForm_affect_AVS1.SForm_affect_AVS2.Form.id_recrut.Value = Forms.SForm_select_AVS_elarg.chx_AVS.Value 
    ' la valeur de zl(a) est affectée à Zl(b) - d'un form indépendant vers un sous form
     
    DoCmd.Close acForm, "SForm_select_AVS_elarg"
    End Sub

    Résultat sur clic, message erreur :'438' propriété ou méthode non gérée par cet objet

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 034
    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 034
    Points : 24 606
    Points
    24 606
    Par défaut
    Bonjour,

    Pour alimenter la source d'une zone de liste on utilise la propriété Rowsource, comme tu le fais. Par contre c'est un paramètre string.
    Si c'est un nom de requête ou une chaine SQL tu dois les entouré par des doubles-cote comme dans l'exemple suivant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    forms.monform.mazoneliste.rowsource = "NomDeMaRequete"  ' une requete
    forms.monform.mazoneliste.rowsource = "Select Monchamp From Matable Where id=2;"  ' une chaine sql
    ou encore affecter une source contenu dans une variable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dim sql as string
    sql = "Select Monchamp From Matable Where id=2;"
    forms.monform.mazoneliste.rowsource = sql
    Pour choisir une valeur existante dans la zone de liste (colonne lié)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    forms.monform.mazoneliste = "Monsieur"  ' choisi la valeur Monsieur
    Choisi la 1ère valeur de la liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    forms.monform.mazoneliste = forms.monform.mazoneliste.itemdata(0)
    D'une autre liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    forms.monform.mazoneliste = forms.monautreform.mazoneliste.itemdata(0)
    Attention dans ce dernier cas il faut que les 2 valeurs (colonne liée) soit identique. Dans le cas contraire tu peux toujours utiliser une colonne (cachée).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    forms.monform.mazoneliste = forms.monautreform.mazoneliste.itemdata(0,1)
    Ou 0,1 renvoi la valeur de la colonne 2 de la ligne 1.

    Dans tous les cas tu ne pourras utiliser la valeur d'une zone liste que si elle est ouverte.

    Cordialement,

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 163
    Points : 60
    Points
    60
    Par défaut
    Bonjour Loufab,

    Merci pour toutes ces précisions. J'ai essayé les codes suivants:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub valider_chx_AVS_elarg_Click()
     
    Forms.SForm_affect_AVS1.SForm_affect_AVS2.Form.id_recrut = Forms.SForm_select_AVS_elarg.chx_AVS.ItemData(0)
    ' la valeur de zl(a) est affectée à Zl(b) - d'un form indépendant vers un sous form
     
    DoCmd.Close acForm, "SForm_select_AVS_elarg" 'je ferme le form de recherche élargie
     
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Private Sub valider_chx_AVS_elarg_Click()
    Dim sql As String
    sql = "R_select_AVS_elarg"
    Forms.SForm_affect_AVS1.SForm_affect_AVS2.Form.id_recrut.RowSource = sql
    With Forms.SForm_affect_AVS1.SForm_affect_AVS2.Form.id_recrut
         If .ListCount = 1 Then .Value = .ItemData(0)
    End With
     
     DoCmd.Close acForm, "SForm_select_AVS_elarg"
     
    End Sub
    Malheureusement la même erreur 438 se produit... (form récepteur et émetteur ouverts)

    Il y a peut-être une erreur dans la syntaxe d'appel des objets ? Mais je ne la cerne pas...

    - SForm_affect_AVS1 est un form INDEPENDANT placé dans un onglet d'un autre form,
    - SForm_affect_AVS2 est un sous form FILS du précédent
    - SForm_select_AVS_elarg.chx_AVS est un form INDEPENDANT ouvert sur event d'un control appartenant au sous form ci dessus.

    Merci pour vos précieux éclairages...

  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 034
    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 034
    Points : 24 606
    Points
    24 606
    Par défaut
    Pour une syntaxe sousformulaire il faut utiliser Form

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms.monform.monsousform.Form.mazl.ItemData()
    C'est surement de là que vient le problème.

    le mot clef Form se met TOUJOURS APRES le nom d'un sousformulaire.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 163
    Points : 60
    Points
    60
    Par défaut
    Bonjour Loufab,

    Merci pour cette précision cependant le nom du form émetteur:
    - SForm_select_AVS_elarg.chx_AVS est trompeur car en réalité c'est un form indépendant dont la propriété source est vide donc j'ai utilisé la syntaxe pour un form:
    Forms.monform.mazl.ItemData()

    Pour le form récepteur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Forms.
    SForm_affect_AVS1. ( form princ)
    SForm_affect_AVS2. (sous form )
    Form.
    id_recrut= ( ma zl)
    D'où:
    " Il y a peut-être une erreur dans la syntaxe d'appel des objets ? Mais je ne la cerne pas..."

    Encore merci pour votre aide...

  6. #6
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 034
    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 034
    Points : 24 606
    Points
    24 606
    Par défaut
    Si tu es dans le code vba du formulaire utilise Me pour le désigner tu y gagne en clarté et en complétion.

    Donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Forms.
    SForm_affect_AVS1. ( form princ)
    SForm_affect_AVS2. (sous form )
    Form.
    id_recrut
    devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    me.SForm_affect_avs2.Form.id_recrut
    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form_SForm_affect_avs2.id_recrut
    Si après ceci il y a encore des soucis, passe en mode debug et dans la ligne d'exécution décompose ta ligne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ? me.SForm_affect_avs2.Form.id_recrut
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ? Forms.SForm_select_AVS_elarg.chx_AVS.ItemData(0)
    Si les 2 ne provoque pas d'erreur c'est que le problème n'est pas syntaxique mais de type de données.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 163
    Points : 60
    Points
    60
    Par défaut
    Bonjour Loufab,

    J'ai testé ta suggestion de syntaxe et voici le résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub valider_chx_AVS_elarg_Click()
    Dim sql As String
    sql = "R_select_AVS_elarg"
    Me.SForm_affect_AVS2.Form.id_recrut.RowSource = sql
    With Me.SForm_affect_AVS2.Form.id_recrut
         If .ListCount = 1 Then .Value = .ItemData(0)
    End With
     
     DoCmd.Close acForm, "SForm_select_AVS_elarg"
     
    End Sub

    Erreur de compilation: Membre de méthode ou de données introuvable

    En revanche avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form_SForm_affect_avs2.id_recrut
    ça fonctionne du tonnerre !

    Merci pour ce coup de main !

    Je clos...

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 26/11/2014, 19h51
  2. Réponses: 8
    Dernier message: 29/03/2014, 23h27
  3. Réponses: 3
    Dernier message: 09/06/2012, 22h47
  4. Réponses: 8
    Dernier message: 06/01/2012, 02h53
  5. [Joomla!] appel de fonction d'une autre classe dans un autre fichier
    Par lkryss dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 27/07/2007, 16h55

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