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 :

Récupérer la valeur de Tous les enregistrements d'une table pour un champ basé une autre table


Sujet :

Access

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Magistrat
    Inscrit en
    Janvier 2019
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Magistrat

    Informations forums :
    Inscription : Janvier 2019
    Messages : 28
    Points : 8
    Points
    8
    Par défaut Récupérer la valeur de Tous les enregistrements d'une table pour un champ basé une autre table
    Bonjour à tous,
    Mon titre ne paraît pas assez évocateur. Alors moi j'ai 3 tables:
    - table dossier avec clé primaire NumDossier
    - table demandeur avec nom, adresse, contact, représentant, adresse représentant, contact représentant et clé étrangère Num Dossier qui est la clé primaire de la table Dossier
    - table défendeur idem que la table demandeur
    Les relations entre table dossier et les deux autres tables sont définies sur un à plusieurs, un dossier pouvant avoir une infinité de demandeurs et de défendeurs.
    alors, je crée une requête pour avoir tous les demandeurs et défendeurs d'un dossier lamba, la c'est OK.
    ensuite, je veux récupérer le nom de tous les demandeurs et de tous les défendeurs du dossier ainsi que les autres informations pour avoir une zone de texte du genre :
    Dossier1
    Nom Demandeur1Dossier1, adresse etc
    Nom Demandeur2dossier1 adresse etc ainsi de suite
    Contre
    Nom défendeur1dossiee1 adresse etc
    Nom defendeur2dossier1 adresse etc
    Ça fait des semaines que je bloque là-dessus. Je ne suis pas très expert en langage vba. J'espère avoir été clair.
    Mes remerciements.

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Afficher tous les enregistrements dans une même zone de texte est possible mais un poil compliqué et pas forcément la meilleur solution.
    Elle implique du code qui va lire puis concaténer (mettre bout à bout) tous les enregistrements.
    Il existe des moyens plus simples en Access d'obtenir un résultat équivalent.

    Cette zone de texte est-elle destinée à être sur un formulaire ou un rapport (état) ou les deux ?

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 869
    Points : 3 448
    Points
    3 448
    Par défaut
    Bonjour Izmo93, René,

    Voici une petite fonction qui fera ce que tu désires. Il te reste juste à ajuster les champs de tes tables pour que ça fonctionne.

    Dans un module il faut déclarer comme suit (j'ai pris pour acquis que le numéro de dossier était en nunérique):
    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
    Option Compare Database
    Option Explicit
     
    'La fonction
    Public Function fuDossier(loNumDossier As Long) As String
        'Les variables
        Dim db As DAO.Database: Set db = CurrentDb
        Dim rst As DAO.Recordset
        Dim strSQL As String, strDefendeur As String, strDemandeur As String
        'Ici on batit la première partie, soit le numéro de dossier et le ou les demandeurs, à modifier selon tes tables
        strSQL = "SELECT T_Dossier_Demandeur.* FROM T_Dossier_Demandeur " _
        & "WHERE T_Dossier_Demandeur.T_DOSSIER_FK=" & loNumDossier & ";"
        Set rst = db.OpenRecordset(strSQL)
        strDemandeur = "Dossier " & loNumDossier & vbCrLf 'Le numéro de dossier
        If rst.EOF Then
             strDemandeur = strDemandeur & "Aucun demandeur" & vbCrLf 'Si aucun demandeur
        Else
            Do While rst.EOF = False
                strDemandeur = strDemandeur & rst("NomDemandeur") & vbCrLf 'Le ou les demandeurs
                rst.MoveNext
            Loop
        End If
        rst.Close
        'Ici la deuxième partie, soit le défendeur, encore une fois à modifier selon tes tables
        strSQL = "SELECT T_Dossier_Defendeur.* FROM T_Dossier_Defendeur " _
        & "WHERE T_Dossier_Defendeur.T_DOSSIER_FK=" & loNumDossier & ";"
        Set rst = db.OpenRecordset(strSQL)
        strDefendeur = "Contre" & vbCrLf 'Le titre
        If rst.EOF Then
            strDefendeur = strDefendeur & "Aucun défendeur" & vbCrLf 'Si pas de défenseur
        Else
            Do While rst.EOF = False
                strDefendeur = strDefendeur & rst("NomDefendeur") & vbCrLf 'Le ou les défenseurs
                rst.MoveNext
            Loop
        End If
        rst.Close
        Set rst = Nothing
        Set db = Nothing
        fuDossier = strDemandeur & strDefendeur 'On transfert à la fonction
     
    End Function
    Puis tu peux appeler la fonction à partir d'un formulaire ou d'un état en passant en paramètre le numéro de dossier voulu. Sur l'événement sur activation d'un formulaire ferait l'affaire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.ChampTexteRecepteur = fuDossier(Me.NuméroDeDossier)
    Bonne journée
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Magistrat
    Inscrit en
    Janvier 2019
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Magistrat

    Informations forums :
    Inscription : Janvier 2019
    Messages : 28
    Points : 8
    Points
    8
    Par défaut Bonjour Marot. La zone de texte est censée être affichéé dans un formulaire pour ensuite être utilisée pour du
    Citation Envoyé par marot_r Voir le message
    Bonjour.

    Afficher tous les enregistrements dans une même zone de texte est possible mais un poil compliqué et pas forcément la meilleur solution.
    Elle implique du code qui va lire puis concaténer (mettre bout à bout) tous les enregistrements.
    Il existe des moyens plus simples en Access d'obtenir un résultat équivalent.

    Cette zone de texte est-elle destinée à être sur un formulaire ou un rapport (état) ou les deux ?

    A+

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Magistrat
    Inscrit en
    Janvier 2019
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Magistrat

    Informations forums :
    Inscription : Janvier 2019
    Messages : 28
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Robert1957 Voir le message
     
    Bonjour. Merci beaucoup. Est-ce que la fonction ci-dessus est aussi utilisable pour les requêtes?

  6. #6
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 869
    Points : 3 448
    Points
    3 448
    Par défaut
    Bonjour Izmo93,

    Oui c'est possible. Tu n'as qu'à ajouter un champ à la requête comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT NUM_DOSSIER, LesAutresChamps, fuDossier([NUM_DOSSIER]) AS IciTonResultat
    FROM T_Dossier;
    Bonne journée
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Magistrat
    Inscrit en
    Janvier 2019
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Magistrat

    Informations forums :
    Inscription : Janvier 2019
    Messages : 28
    Points : 8
    Points
    8
    Par défaut
    J'ai essayé je ne sais pas où ça bloque mais ça ne marche pas.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Magistrat
    Inscrit en
    Janvier 2019
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Magistrat

    Informations forums :
    Inscription : Janvier 2019
    Messages : 28
    Points : 8
    Points
    8
    Par défaut
    Je ne sais pas si c'est l'adaptation à mes champs qui ne convient pas. ça me donne erreur d'exécution 13 incompatibilité de type. Je vous envoie la structure de mes tables au cas où ça vous aiderait. Merci infiniment. Nom : table.png
Affichages : 263
Taille : 82,7 Ko

  9. #9
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 869
    Points : 3 448
    Points
    3 448
    Par défaut
    Bonjour Izmo93,

    Le problème est le NumDossier. Comme j'avais mentionné dans mon premier post j'avais pris pour acquis que le champ était numérique. Il faut modifier la fonction comme suit:
    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
    Option Compare Database
    Option Explicit
     
    Public Function fuDossier(strNumDossier As String) As String 'Ici on change le type de numérique a texte ainsi que le nom de la variable
     
        Dim db As DAO.Database: Set db = CurrentDb
        Dim rst As DAO.Recordset
        Dim strSQL As String, strDefendeur As String, strDemandeur As String
     
        strSQL = "SELECT Demandeur.* FROM Demandeur " _
        & "WHERE Demandeur.NumDossier=" & chr(34) & strNumDossier & chr(34) & ";"  'Ici on modifie la variable et on ajoute les "
        Set rst = db.OpenRecordset(strSQL)
        strDemandeur = "Dossier " & strNumDossier & vbCrLf 'modification de la variable
        If rst.EOF Then
             strDemandeur = strDemandeur & "Aucun demandeur" & vbCrLf 
        Else
            Do While rst.EOF = False
                strDemandeur = strDemandeur & rst("Nom") & ", " & rst("Adresse") & vbCrLf 
                rst.MoveNext
            Loop
        End If
        rst.Close
     
        strSQL = "SELECT Defendeur.* FROM Defendeur " _
        & "WHERE Defendeur.NumDossier=" & chr(34) &strNumDossier & chr(34) & ";"  'Ici on modifie la variable et on ajoute les "
        Set rst = db.OpenRecordset(strSQL)
        strDefendeur = "Contre" & vbCrLf 
        If rst.EOF Then
            strDefendeur = strDefendeur & "Aucun défendeur" & vbCrLf 
        Else
            Do While rst.EOF = False
                strDefendeur = strDefendeur & rst("Nom") & ", " & rst("Adresse") & vbCrLf 
                rst.MoveNext
            Loop
        End If
        rst.Close
        Set rst = Nothing
        Set db = Nothing
        fuDossier = strDemandeur & strDefendeur 'On transfert à la fonction
     
    End Function
    En passant les champs appelés "Nom" ce n'est pas une bonne idée, c'est un mot réservé d'Access et ça risque de te poser des problèmes plus tard. Les accents sont aussi à éviter.

    Bonne journée
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Magistrat
    Inscrit en
    Janvier 2019
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Magistrat

    Informations forums :
    Inscription : Janvier 2019
    Messages : 28
    Points : 8
    Points
    8
    Par défaut
    Merci infiniment. Suite à votre conseil sur les accents etc, j'aimerai changer le nom de mes champs et tables. Est-il trop tard pour changer le nom des champs ? Il est à préciser que j'ai déjà créé une cinquantaine de formulaire et de requêtes à la base de ces noms de champs.pour dire que mon application est presque terminée. Est-ce que changer le nom des champs pourrait casser tout cela ? Merci

  11. #11
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Oui, changer les noms peut avoir des impacts sur l'application.
    Access arrive parfois à bien gérer cela si ce n'est pas dans du code mais ce n'est pas garanti.
    Il faudra tester chacun des éléments existant pour s'assurer que les modifications ont bien suivies.
    Personnellement, je les laisserai comme cela si déjà beaucoup de travail a été fait.

    Juste appliquer les règles pour l'avenir.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Magistrat
    Inscrit en
    Janvier 2019
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Magistrat

    Informations forums :
    Inscription : Janvier 2019
    Messages : 28
    Points : 8
    Points
    8
    Par défaut
    Bonjour. Le résultat me donne ceci. L'expression Sur activation entrée comme paramètre de la propriété de type événement ets à l'origine d'une erreur. Instruction incorrecte à intérieur d'une procédure. Désolé je m'y perds complètement

  13. #13
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 869
    Points : 3 448
    Points
    3 448
    Par défaut
    Bonjour Izmo93,

    En effet tu sembles un peu perdu!!!

    Voici un petit exemple qui utilise une fonction, premièrement dans une requête qui sous-tend un formulaire et la même fonction à l'activation du formulaire. Je crois que tu comprendras mieux avec un exemple tangible, il te restera à adapter le code à ta base.

    Bonne journée
    Fichiers attachés Fichiers attachés
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Magistrat
    Inscrit en
    Janvier 2019
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Magistrat

    Informations forums :
    Inscription : Janvier 2019
    Messages : 28
    Points : 8
    Points
    8
    Par défaut
    Ça fonctionne à merveille. Merci infiniment Robert1957. Bonne journée à vous.

Discussions similaires

  1. Réponses: 3
    Dernier message: 01/07/2015, 16h47
  2. Réponses: 3
    Dernier message: 22/03/2012, 15h16
  3. Récupérer tous les enregistrements avec SQLite
    Par 304bl dans le forum Android
    Réponses: 4
    Dernier message: 04/02/2012, 12h52
  4. Récupérer la valeurs de tous les ChekeckBox coché
    Par PrinceMaster77 dans le forum Langage
    Réponses: 4
    Dernier message: 05/01/2010, 10h56
  5. Réponses: 4
    Dernier message: 29/01/2009, 14h33

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