Lister les données d'une colonne dans un champ d'en tête d'état

Fermé
maxime 25 Messages postés 19 Date d'inscription vendredi 12 juillet 2013 Statut Membre Dernière intervention 1 août 2013 - 1 août 2013 à 07:35
f894009 Messages postés 17209 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 20 décembre 2024 - 1 août 2013 à 14:04
Bonjour,

Je dois réaliser des fiches qui liste les produits auxquels sont exposés mes salariés.

Pour cela j'ai réalisé sur Access 2007 un état qui liste les produits utilisés par chaque salariés.

Chaque ligne de l'état correspond à un enregistrement et donc à un produit chimique. Il y a diverse colonnes qui donne les caractéristiques du produit. Une colonne s'intitule VLE dans cette colonne est affiché le nom du produit en question si et seulement si celui-ci a une valeur limite d'exposition.

Seulement, pour respecter la mise en forme de l'entreprise, je dois faire apparaitre toutes les données de cette colonne c'est à dire les nom des produits qui ont une VLE dans l'en tête de mon état.

Chaque état prend en compte les données pour un seul salarié, il est commandé par un contrôle type liste déroulante.

Le souci est que je ne sais pas comment je dois procèder pour faire apparaitre les données de toutes la colonnes dans un seul champ en les séparant par des virgules.

Existe t-il une solution via VBA ?

Voilà j'espere avoir été clair sur mon problème.

Merci d'avance.

A voir également:

3 réponses

f894009 Messages postés 17209 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 20 décembre 2024 1 711
1 août 2013 à 09:40
Bonjour,

une facon de faire:

texte2: zone de texte dans l'entete
choix: la variable a declarer en Public dans un module, recoit le choix du nom salarie dans votre formulaire

je suppose que vous ouvrez l'etat en partant du formulaire

code a mettre dans le VBA de l'etat:

adapatez la requete suivant vos tables

Option Compare Database

Private Sub Report_Activate()
    Dim rs As Recordset
    Set rs = CurrentDb.OpenRecordset("SELECT tblContacts.FirstName FROM tblContacts where FirstName='" & choix & "';")
    
    rs.MoveLast
    rs.MoveFirst
    
    If Not rs.EOF And Not rs.BOF Then
        For x = 1 To rs.RecordCount - 1
            Texte2 = Texte2 & rs.Fields(0) & ","
            rs.MoveNext
        Next x
        Texte2 = Texte2 & rs.Fields(0)
    End If
End Sub



A+
0
maxime 25 Messages postés 19 Date d'inscription vendredi 12 juillet 2013 Statut Membre Dernière intervention 1 août 2013
1 août 2013 à 13:22
Oui oui j'ouvre l'état à partir d'un formulaire à partir duquel je selectionne le salarié grâce à une liste déroulante.

Ca m'a l'air bien mais pourriez-vous me mettre des commentaires parce que je ne suis pas expert en VBA et je n'arrive pas à tous comprendre ?

Pourriez-vous aussi me détaillé la procédure à suivre étape par étape pour que celà fonctionne.

Merci d'avance
0
f894009 Messages postés 17209 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 20 décembre 2024 1 711
1 août 2013 à 14:04
Re,

Option Compare Database

Private Sub Report_Activate()
    Dim rs As Recordset
    
    'creation d'un recordset avec une requete SQL pour avoir les donnees de la "colonne" voulue
    Set rs = CurrentDb.OpenRecordset("SELECT tblContacts.FirstName FROM tblContacts where FirstName='" & choix & "';")
    'test si au moins un enregistrement
    If Not rs.EOF And Not rs.BOF Then
        'positonnement sur le dernier enregistrement pour avoir le nombre d'enregistrements,
        'puis sur le premier pour depilage des donnees
        rs.MoveLast
        rs.MoveFirst
        'boucle de depilage de donnees: 1 a nombre-1 pour eviter la virgule appres le dernier enregistrement
        'rs.Fields(0): parce qu'il y a une seule "colonne"
        For x = 1 To rs.RecordCount - 1
            'ecriture des infos en ligne avec une virgule entre (separateur)
            Texte2 = Texte2 & rs.Fields(0) & ","
            'avance d'un enregistrement dans le recordset
            rs.MoveNext
        Next x
        'derniere infos du recordset
        Texte2 = Texte2 & rs.Fields(0)
    End If
End Sub


A+
0