OVH Cloud OVH Cloud

Compter des champs non vide dans une table

24 réponses
Avatar
levallo
Bonjour =E0 tous,

Je suis devant un petit probl=E8me dont je n'arrive pas =E0 trouver la
solution.
J'explique le contexte.
J'ai une table qui doit servir =E0 g=E9rer les =E9quipes de travail
comprenant :
N=B0enr ; NomChefEquip ; N=B01_Empl ; N=B02_Empl ; ... ; N=B08_Empl ;
DateDeb ; DateFin

Dans le but de pouvoir calculer le temps pass=E9 par chantiers
effectu=E9s pendant la p=E9riode de composition de l'=E9quipe il me serait
n=E9cessaire de compter la composition de l'=E9quipe durant la p=E9riode.

D'autre part, je connais quel chantier a =E9t=E9 effectu=E9 par quel Chef
d'=E9quipe enregistr=E9 dans une autre table.

Mon soucis est comment puis-je compter les champs N=B01_Empl =E0
N=B08_Empl non vide ce qui me donnerait le nombre d'=E9quipiers pour la
p=E9riode donn=E9e.

La fonction compte() calcule sur la colonne d'un champ. Pour moi il
s'agit d'obtenir un champ calcul=E9 par enregistrement me donnant le
nbre d'=E9quipiers. L=E0, je s=E8che lamentablement ;+)

Je suis s=FBr que les pro que vous =EAtes, pourrez me trouver la
solution.

Merci encore pour tout ce que vous faites pour nous autres les bleus.

Cordialement

Jean

4 réponses

1 2 3
Avatar
levallo

Bonjour,

Dans la requete, tu dois mettre:
nombre:nbemp([ChefEquipesNom]) où ChefEquipesNom est le nom du champ
contenant le nom du chef d'équipe.
Regardes l'exemple que je t'ai mis en lien sur l'autre post.

Re


j'ai joint mon interprètation, ici

http://cjoint.com/?iylmXnQN2w

ça ne donne pas la même chose. Sur quoi je dec... ??

Merci encore pour ta patience

A+

Jean

Avatar
levallo
Re

Soucis tout de même si les enregistrements progressent et que l'on
utilise le même Nom
de chef d'équipe le nombre reprend le précédent total.

voir http://cjoint.com/?iylW2uaPSE

a+

Jean
Avatar
Eric
re,

Dans ta table les noms des chef d'équipe reviennent plusieurs fois.
La méthode FindFirst appliquée sur le champ ChefEquipesNom du recordset
créé sur cette table recherche la 1ere occurence dans la table (qui n'a
jamais d'ordre) qui correspond au contenu de ChefEquipesNom. C'est
pourquoi, tu as toujours les même valeurs en retour pour chacun des
chefs d'équipe.

Il faut que tu fasses une recherche non pas sur le champ ChefEquipesNom
mais sur un champ discriminant comme NbrEnr qui est la clé primaire de
la table. NbrEnr étant un champ NumAuto, il n'a pas de signification ;
aussi il faudrait alors utiliser comme critère de recherche : le nom du
chef d'équipe et les dates de début et fin de chantier. Je te retourne
ta bd avec la fonction nbemp2 qui a pour argument la clé primaire NbrEnr
et la fonction nbemp3 avec le nom du chef, la date de début et celle de
fin. Voir la requete2. A toi de voir ce qui te convient le mieux.


http://cjoint.com/?iymd5BXPbO





Bonjour,

Dans la requete, tu dois mettre:
nombre:nbemp([ChefEquipesNom]) où ChefEquipesNom est le nom du champ
contenant le nom du chef d'équipe.
Regardes l'exemple que je t'ai mis en lien sur l'autre post.



Re

j'ai joint mon interprètation, ici

http://cjoint.com/?iylmXnQN2w

ça ne donne pas la même chose. Sur quoi je dec... ??

Merci encore pour ta patience

A+

Jean



--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr


Avatar
levallo
Eric

Merci pour toute cette brillante démo. Elle fonctionne parfaitement
dans ma db complète.

Je suis loin d'avoir tout assimilé mais je dois dire que sur cette
question que j'ai posé j'ai fait de grand pas vers une meilleure
connaissance du VBA.

Je vais très certainement adopter le deuxième version. Je la recopie
pour ceux qui seraient intéressés.

Function nbEmp3(chef, DateDebut, DateFin)
If IsNull(chef) Or IsNull(DateDebut) Or IsNull(DateFin) Then Exit
Function
Dim rst As DAO.Recordset, n As Byte, nb As Byte, strCritere As String
Set rst = CurrentDb.OpenRecordset("tbEquipes", dbOpenSnapshot) ' jeu
instantané
strCritere = "ChefEquipesNom='" & chef & "' and DateDébutEquipe=" & _
Format(DateDebut, "#mm/dd/yyyy#") & _
" and DateFinEquipe=" & Format(DateFin,
"#mm/dd/yyyy#")
rst.FindFirst strCritere
For n = 1 To 8
If Not IsNull(rst("No_" & n & "_Employé")) Then
nb = nb + 1
End If
Next
nbEmp3 = nb
Set rst = Nothing
End Function

Avec le champ dans la requète : Nb de personnes2:
nbEmp3([ChefEquipesNom];[DateDébutEquipe];[DateFinEquipe])

Encore un grand merci à Eric et vous tous qui avez participé par vos
suggestions à me faire avancer sur la voie de la connaissance.

Amicalement

Jean
1 2 3