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

VBA Access Discussion :

Comptage des enregistrements en fonction des valeurs des champs [AC-2010]


Sujet :

VBA Access

  1. #1
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2012
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 61
    Points : 59
    Points
    59
    Par défaut Comptage des enregistrements en fonction des valeurs des champs
    Bonjour
    Je sollicite votre aide en espérant de trouver une solution à ma problématique
    Nous somme un organisme de contrôle des produits alimentaires à l'importation
    Nous avons mis en place une application qui nous permet la saisie de données, leurs traitement depuis le dépôt des dossiers jusqu'à la certification
    Notre base de données est basée sur 2 tables liées entre elles par intégrité référentielle et d'un formulaire comme interface de saisie. Notre souci est que nous désirons implémenter une fonction (VBA ou Requête) permettant d'aviser les inspecteurs quand est-ce qu'il doivent effectuer des analyses de laboratoire.
    La procédure exige à ce qu'on fasse une analyse lors d'une importation sur 5.
    Les champs sur lesquels doit se baser le comptage sont :
    - Exportateur
    - Importateur
    - Produit
    - Pays d'origine
    On aimerait bien à ce que : Si les mêmes données des 4 champs se répètent 4 fois dans la BD, lors de la 5ème fois, un message s'affiche pour l'inspecteur l'avisant qu'un prélèvement pour analyse doit être effectué

    J'espère avoir bien expliqué la problématique en espérant avoir une solution rapide

    Merci pour votre collaboration

  2. #2
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Regardez du côté des requêtes de regroupement

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT count(*) FROM Matable
    GROUP BY Month(datenaissance)
    Compte le nombre d'enfants nés chaque mois

  3. #3
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2012
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 61
    Points : 59
    Points
    59
    Par défaut
    Merci beaucoup Tofalu, mais c'est pas ce que je cherche

  4. #4
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    C'est pourtant bien ce qui est écrit là :

    Les champs sur lesquels doit se baser le comptage sont :
    - Exportateur
    - Importateur
    - Produit
    - Pays d'origine
    Dés lors que ce résultat sera égal à un multiple de 5 moins une unité, il suffira de mettre un message dans le formulaire.

  5. #5
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2012
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 61
    Points : 59
    Points
    59
    Par défaut
    Pourriez-vous m'éclaircir un peu plus davantage Mr Tofalu?
    Je vous serai reconnaissant
    Merci pour votre collaboration

  6. #6
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    740
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 740
    Points : 1 045
    Points
    1 045
    Par défaut Avec un champ Calcule ?
    pour pouvoir comparer facilement si le cas arrive pour la 5eme fois, il est possible de compter le nombre de record par une requete de comptage sur un champ calcule [AgregField] qui fait l'agregation des 4 champs [Exportateur]&[Importateur]&[Produit]&[Pays]
    une fois cree on peut lancer la requete

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT AgregField, Count(AgregField) 
    FROM Table
    GROUP BY AgregField HAVING Count(AgregField>=5
    ceci dit il faudrait aussi rajouter un champ [ControleFait] pour exclure de cette requete toutes les arrivees en amont du dernier controle

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT AgregField, Count(AgregField) 
    FROM Table
    WHERE [ControleFait]=false
    GROUP BY AgregField HAVING Count(AgregField>=5

  7. #7
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2012
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 61
    Points : 59
    Points
    59
    Par défaut
    Merci accessisgood pour votre réponse. Il paraît que c'est votre réponse qui est la plus proche de mon cas. Sauf que je suis un peu novice sur Access. pourriez-vous m'expliquer plus la procédure à suivre? Si ça ne vous dérange pas bien sûr

    Mille merci

  8. #8
    Membre éclairé Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 598
    Points : 879
    Points
    879
    Par défaut
    Bonjour redojackson,

    Voici un exemple pour que vous compreniez

    En regardant dans l'onglet SQL, vous verrez le code généré
    Vous verrez comment cela a été implémenté en allant dans l'ongle création

    Bon courage
    Fichiers attachés Fichiers attachés

  9. #9
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2012
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 61
    Points : 59
    Points
    59
    Par défaut
    vifs remerciements dumas.blr
    Votre exemple m'a bcp servi, sauf qu'il y a 1 petit pépin:
    Quand le compteur arrive à 5 et que l'inspecteur fait son travail en effectuant les analyses, faudra que le compteur recommence à zéro. Du fait que l'inspecteur aura à effectuer une autre analyse après 5 autres importations.
    Donc, soit le compteur doit se remettre à zéro, soit faudra-t-il peut être implémenter une fonction (suite) de type x+5

    Y a t-il une solution à cela?

    Merci pour votre collaboration

  10. #10
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Il vous faut donc stocker quelque part que pour ces conditions, l'inspecteur a fait son travail.

  11. #11
    Membre éclairé Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 598
    Points : 879
    Points
    879
    Par défaut
    L'exemple n'était là pour que vous compreniez comment utiliser l'éditeur de requête.
    La solution immédiate, ainsi que Tofalu l'avait indiqué dans son premier post
    Dés lors que ce résultat sera égal à un multiple de 5 moins une unité, il suffira de mettre un message dans le formulaire
    est d'utiliser la fonction mod
    il suffira de changer la condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Table1.Exportateur, Table1.Importateur, Table1.Produit, Table1.[Pays d'origine], Count(Table1.N°) AS CompteDeN°
    FROM Table1
    GROUP BY Table1.Exportateur, Table1.Importateur, Table1.Produit, Table1.[Pays d'origine]
    HAVING (((Count(Table1.N°))>5));
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Table1.Exportateur, Table1.Importateur, Table1.Produit, Table1.[Pays d'origine], Count(Table1.N°) AS CompteDeN°
    FROM Table1
    GROUP BY Table1.Exportateur, Table1.Importateur, Table1.Produit, Table1.[Pays d'origine]
    HAVING (((Table1.N°)) mod 5 = 0));
    cependant, cette condition ne sera pas suffisante, car dans ce cas, la requête affichera l’historique de TOUTES les x*5èmes importation (la 5e, 10e, 15e, etc.)
    Il faudra rajouter une seconde requête pour identifier la dernière occurence
    le plus simple est d'utiliser une requête imbriquée du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT a.N°, a.Exportateur, a.Importateur, a.Produit, a.[Pays d'origine], max(CompteDeN°) as dernierN° FROM
    (SELECT Table1.Exportateur, Table1.Importateur, Table1.Produit, Table1.[Pays d'origine], Count(Table1.N°) AS CompteDeN°
    FROM Table1
    GROUP BY Table1.Exportateur, Table1.Importateur, Table1.Produit, Table1.[Pays d'origine]
    HAVING (((Table1.N°)) mod 5 = 0)) a
    GROUP BY a.N°,a.Exportateur, a.Importateur, a.Produit, a.[Pays d'origine];
    Comme ce n'est pas évident d'implémenter les requête imbriquée dans l'éditeur de requête, je vous conseille de travailler en 2 temps :
    1. Créer une 1ère requête qui permet de dénombrer toutes les importations sur 5
    2. Créer une seconde requête, basée sur la 1ère, qui récupérera le maximum de chaque

  12. #12
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2012
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 61
    Points : 59
    Points
    59
    Par défaut
    Mille merci dumas.blr
    Le tout était dit. Vous m'avez facilité la vie ))))
    Avec l'aide d'un de mes beaux-frères qui m'a aidé à appliquer vos directives

    Merci encore pour le temps que vous m'avez consacré

    Redo

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

Discussions similaires

  1. Réponses: 31
    Dernier message: 06/02/2010, 10h50
  2. Réponses: 3
    Dernier message: 05/12/2008, 12h13
  3. Recherche des enregistrements en fonction des paramètres
    Par infoctet dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 10/01/2007, 09h51
  4. Réponses: 2
    Dernier message: 27/07/2006, 07h46
  5. [VBA]comptage de lignes en fonction du contenu des cellules
    Par calimero91 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 22/12/2005, 11h38

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