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 :

Etat compter les valeurs uniques dans un etat regroupement [AC-2016]


Sujet :

IHM

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2013
    Messages : 69
    Points : 93
    Points
    93
    Par défaut Etat compter les valeurs uniques dans un etat regroupement
    Bonjour
    je bloque sur un etat qui doit me calculer le nombre de factures uniques.

    j'ai fait une requête multi-table "r_factures" sur laquelle s'appuie mon etat "e_factures" après regroupement, j'obtiens un état de la sorte:

    id_facture LibelleCT Objet Montant
    1594 alain moteur 300
    1647 olivier lmg 600
    1379 nadine linge 300
    1577 hadrien boissons 45
    1605 michel essence 300
    1575 pierre essence 100
    1636 estelle resto 400
    1636 estelle pourboire 200

    en bas de cet état je souhaite faire figurer le nombre total de factures
    quand je fais dans la feuille de propriétés au bas de mon état "e_factures" source contrôle = compte([id_facture]) j'obtiens 8 or je souhaiterai faire apparaître 7 car il y a 7 factures distinctes avec un numéro distinct: la facture 1636 est en double donc je la compte qu'une fois.
    il s'agit d'un exemple simplifié à l’extrême.
    merci pour votre aide

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 635
    Points : 14 606
    Points
    14 606
    Par défaut
    bonsoir,
    une possibilité de comptage avec cette astuce :
    - créer un regrouper / trier sur id_facture, cela va ajouter un entête de groupe sur le contrôle
    - dans ce groupe ajouter une zone de texte nommée CompteFactures et mettre =1 comme source contrôle
    - mettre l'option "En continu" dans la propriété Cumul de la zone de texte CompteFactures
    - rendre invisible l'en-tête de groupe créé sur id_facture (propriété Visible: Non)
    - enfin, dans le pied d'état, dans la zone de texte devant contenir le total des factures mettre =[CompteFactures] comme source contrôle
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  3. #3
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut


    Ci joint petite base de données qui te montre comment utiliser une procédure VBA placée sur l’événement : Sur impression du Pied d'état
    Bonne continuation
    Fichiers attachés Fichiers attachés
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  4. #4
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 635
    Points : 14 606
    Points
    14 606
    Par défaut
    bonjour Jeannot45,
    merci de donner une autre solution par le code, il est vrai que ta méthode est meilleure car elle ne modifie pas le tri d'origine de l'état.

    Une remarque quand même, mais qui n'a rien à voir avec le problème d'hyrkanie: dans la base jointe, l'état est en affichage Mode État par défaut : encore une fausse bonne idée de Microsoft, car le souci est que ce mode n'exécute pas le code VBA.

    Du coup ton exemple ne fonctionne pas si on n'effectue pas une des 2 corrections suivantes:
    - changer la propriété "Mode d'affichage" en Aperçu avant impression
    - ou mettre la propriété "Autoriser le Mode État" à Non
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2013
    Messages : 69
    Points : 93
    Points
    93
    Par défaut
    Bonjour
    Merci pour vos réponses. Je regarde et je reviens vous dire.

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2013
    Messages : 69
    Points : 93
    Points
    93
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    bonsoir,
    une possibilité de comptage avec cette astuce :
    - créer un regrouper / trier sur id_facture, cela va ajouter un entête de groupe sur le contrôle
    - dans ce groupe ajouter une zone de texte nommée CompteFactures et mettre =1 comme source contrôle
    - mettre l'option "En continu" dans la propriété Cumul de la zone de texte CompteFactures
    - rendre invisible l'en-tête de groupe créé sur id_facture (propriété Visible: Non)
    - enfin, dans le pied d'état, dans la zone de texte devant contenir le total des factures mettre =[CompteFactures] comme source contrôle
    Bonjour
    cette méthode marche impeccablement bien. je teste l'autre méthode de Jeannot45 et je reviens vers vous.

  7. #7
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut


    Tu as entièrement raison tee_grandbois, j'aurais du pousser plus loin ma vérification.

    Il a cependant encore plus simple : placer la procédure que j'ai écrite dans l'événement "Sur Activation" de l'état plutot que sur l'événement "Sur Impression" du pied d'état.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Report_Activate()
        Dim l_rsFactures As DAO.Recordset
     
        Set l_rsFactures = CurrentDb.OpenRecordset("SELECT DISTINCT NumFacture FROM T_Factures")
     
            l_rsFactures.MoveLast
            Me.txtNbFactures.Value = l_rsFactures.RecordCount
     
        l_rsFactures.Close
        Set l_rsFactures = Nothing
     
    End Sub
    Bonne journée
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  8. #8
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 635
    Points : 14 606
    Points
    14 606
    Par défaut
    bonjour,
    oui, et autant prendre directement le RecordSource de l'état, que ce soit une table, une requête ou un code SQL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Set l_rsFactures = CurrentDb.OpenRecordset("SELECT DISTINCT NumFacture FROM (" & Replace(Me.RecordSource, ";", "") & ");")
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  9. #9
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2013
    Messages : 69
    Points : 93
    Points
    93
    Par défaut
    Bonjour

    merci à vous tous bien évidemment la version de Jeannot45 en VBA marche aussi très bien.

    Cependant si j'opte pour cette solution dans l'exemple mis en ligne j'ai du mal à l'adapter à un formulaire avec un champ indépendant qui lance l'état "E_Factures" lequel s'appuie sur une requête paramétrée "R_Factures".

    En effet je souhaite sélectionner une date [idMois] via une liste déroulante d'un formulaire indépendant sur l’événement Après mise à jour qui lance cet état

    le paramètre dans la requête que je lui passe c'est: [Forms]![F_Factures]![ChoixidMois]

    L'idée c'est de lui dire sort mois toutes les factures qui sont = 01 (janvier) et comptes moi le nombre de factures pour ce mois

    or si je modifie la source pour qu'elle qu'elle s'appuie sur cette requête multitable "R-Factures"

    j'ai un code erreur erreur d'exécution 3061 : trop peu de paramètres. 1 attendu
    et en jaune est surligné cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set l_rsFactures = CurrentDb.OpenRecordset("SELECT DISTINCT NumFacture FROM R_Factures")
    merci

    l'astuce de tee_grandbois aussi est super c'est pour le moment celle que j'utilise.
    Fichiers attachés Fichiers attachés

  10. #10
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 259
    Points : 19 420
    Points
    19 420
    Billets dans le blog
    63
    Par défaut
    Bonsoir à tous,

    Plutôt que de créer une requête paramétrée vous pouvez définir le critère directement dans le SQL en otant le paramètre de la requête R_Factures :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set l_rsFactures = CurrentDb.OpenRecordset("SELECT DISTINCT NumFacture FROM R_Factures WHERE Month(DateFacture)=" & [Forms]![F_Factures]![ChoixidMois])
    Ici je suppose que vous disposez d'un champ DateFacture dans votre table.

    Attention car normalement un tel paramètre devrait comporter aussi l'année.

    Ensuite pour ouvrir l'état :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenReport "E_Factures",acViewPreview,,"Month(DateFacture)=" & [Forms]![F_Factures]![ChoixidMois]
    Note : pour les critères vous pouvez aussi utiliser Format(dateFacture,"mm"), si vos indices de mois sont de la forme "01","02",...:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenReport "E_Factures",acViewPreview,,"Format(DateFacture,'mm')='" & [Forms]![F_Factures]![ChoixidMois] & "'"
    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  11. #11
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 635
    Points : 14 606
    Points
    14 606
    Par défaut
    en complément de la réponse précédente:
    inutile de passer par une requête pour appliquer un filtre, il vaut mieux utiliser le paramètre WhereCondition lors de l'appel de l'ouverture de l'état, d'autant que le RecordSource de l'état n'est pas la requête mais la table.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenReport DocName, acViewPreview, , "idMois = " & Me!ChoixidMois
    et également, pour le total factures, il faut appliquer le Where du formulaire au RecordSet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSQL = "SELECT DISTINCT NumFacture FROM (" & Replace(Me.RecordSource, ";", "") & ") WHERE idMois = " & Forms!F_factures!ChoixidMois & ";"
    ci joint la base modifiée: CompterFactures MODIF.rar
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  12. #12
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2013
    Messages : 69
    Points : 93
    Points
    93
    Par défaut
    Bonjour
    merci beaucoup à tous pour votre aide. c'est exactement ce que je voulais. ce fut un plaisir d'échanger.

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

Discussions similaires

  1. [SQL] Identifier les valeurs uniques dans une fonction CASE
    Par levcha dans le forum SAS Base
    Réponses: 3
    Dernier message: 14/06/2018, 12h09
  2. [XL-2013] Formule excel permettant de compter les valeurs uniques sans les doublons
    Par Brice.Ancom1 dans le forum Excel
    Réponses: 4
    Dernier message: 25/02/2017, 22h23
  3. [AC-2010] Compter les valeurs uniques d'une colonne
    Par GasGasGas dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 11/06/2014, 23h02
  4. [AC-2007] Compter les valeurs faux dans un champ boolean
    Par sami0701 dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 08/10/2012, 22h19
  5. [XL-2003] Compter les valeurs uniquement 1 fois?
    Par Djromé dans le forum Conception
    Réponses: 6
    Dernier message: 22/05/2011, 10h22

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