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 :

Nombre d’occurrences dans un enregistrement


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2010
    Messages : 23
    Points : 5
    Points
    5
    Par défaut Nombre d’occurrences dans un enregistrement
    Bonjour,
    Comment compter le nombre d’occurrence avec une valeur précise contenue dans 1 enregistrement.
    Exemple:
    1 TABLE
    1 ENREGISTREMENT avec 10 CHAMPS contenant les valeurs individuelles suivantes : 1,2,1,0,0,2,1,-1,-2,1
    Quelle fonction utiliser pour connaitre le nombre de fois qu’apparaît le chiffre 2 dans 1 champ calculé de formulaire
    LA TABLE, LE FORMULAIRE sont prêts, il me manque juste la fonction.
    Merci pour votre aide
    Eddy

  2. #2
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Bonjour,

    Dans un module standard , copie la fonction :
    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
     
    Public Function CompteOccurences(ByVal idRecord As Long, ByVal Value As Long) As Long
        ' 2019-08-05    MN
        '               Exemple usage : CompteOccurences(1,2)
        Dim oDb As DAO.Database, oRs As DAO.Recordset, strsql As String, i As Long, n As Long
        n = 0
        Set oDb = CurrentDb
        ' Soit une table Table1 avec les colonnes Row_id, Fld01, Fld02, Fld03, Fld04, Fld05, Fld06, Fld07, Fld08, Fld09, Fld10
        ' les 10 colonnes Fld01 ...Fld10 sont des numériques
        strsql = "SELECT * FROM Table1 WHERE Row_id =" & idRecord
        Set oRs = oDb.OpenRecordset(strsql, dbOpenSnapshot)
        With oRs
            If .RecordCount > 0 Then
                .MoveLast
                .MoveFirst  'même s'il n'y en a qu'un, dans ce cas !
                For i = 0 To .Fields.Count - 1
                          If Left(.Fields(i).Name, 3) = "Fld" And .Fields(i) = Value Then n = n + 1
                Next i
            End If
            CompteOccurences = n
        End With
    End Function
    Que tu adaptes bien sûr à tes noms de table et colonnes

    CDLT
    "Always look at the bright side of life." Monty Python.

  3. #3
    Invité
    Invité(e)
    Par défaut
    bonjour,

    cette fonction permet de répondre au problème aussi bien dans un formulaire que dans une requête car reste indépendante de la source d'information :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    'retourne le nombre d'occurence de la valeur dans les champs
    'getNbOccurence(2,[champ01],[champ02],[champ03],...)
    Public Function getNbOccurence(ByVal Valeur As Variant, ParamArray a()) As Long
    Dim v As Variant
    For Each v In a
       If v = Valeur Then getNbOccurence = getNbOccurence + 1
    Next v
    End Function

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2010
    Messages : 23
    Points : 5
    Points
    5
    Par défaut Nombre d’occurrence dans un enregistrement suite....
    Bonjour,
    Merci pour toutes vos infos.
    Malheureusement pour moi, je n'ai pas un niveau développeur suffisant pour arriver à adapter vos proposition à ma BD.
    J'utilise Access depuis quelques mois seulement.
    Pour faire simple, j'ai importer des scores de golf provenant d'une ancienne base de données qui tournait sous DOS.
    Tout fonctionne bien mais je n'arrive pas à automatiser certains résultats.
    Dans mon formulaire, les différents champs de résultats pour chaque trou provenant de la table score ainsi qu'un champ calculé qui présente la différence entre le score souhaité et le score effectif pour chaque trous, soir 18 champs calculé présentant des résultats allant de -3 à +3
    Jusque la, tout fonctionne nickel.
    Mon problème
    J'ai ajouté 1 champs qui devrait décompter automatiquement le nombre de champ calculé présentant un résultat de -3 appelé albatros
    J'ai ajouté 1 champs qui devrait décompter automatiquement le nombre de champ calculé présentant un résultat de -2 appelé eagle
    Et ainsi de suite avec les autres champ de -1 à +3 ( appelé birdie, par, bogey, double bogey, triple bogey) soit 7 champs au total.
    Pour l'instant j'effectue le décompte et rempli les champs manuellement mais souhaiterais automatiser l'opération
    J'essaye de réaliser cela avec une requête, mais je ne sais pas trop comment m'y prendre.
    Quelqu'un pourrait-il m'aider avec un exemple visuel (générateur de fonction ou fenêtre de requête) à savoir:
    -Quels champs sélectionner ?
    -Quelle fonction utiliser?
    Merci encore une fois pour votre aide
    Eddy

  5. #5
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Bonjour Ber10,

    Au plus simple, joins un extrait de ta base actuelle avec tes tables et quelques données.
    Nous mettrons en application les fonctions proposées.
    La fonction que j'ai proposée demande effectivement à être personnalisée aux données du projet tandis que la fonction de Galoir est plus portable.

    CDLT
    "Always look at the bright side of life." Monty Python.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2010
    Messages : 23
    Points : 5
    Points
    5
    Par défaut Nombre d’occurrence dans un enregistrement
    Bonsoir CLDT
    Je m'occupe de cela dés demain.
    Bonne soirée
    Merci pour ton aide
    Eddy

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2010
    Messages : 23
    Points : 5
    Points
    5
    Par défaut Nombre d’occurrence dans un enregistrement
    Bonjour,

    Je joins la BD à ce message.
    Le formulaire FRM_Score_Consultation contient les champs concernés
    Encore une fois, merci pour le coup de main
    Eddy

  8. #8
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Voila une implémentation de la fonction GetNbOccurences()
    Ton contexte demandait une fonction générique comme celle de Galoir. Mais j'ai dû en réécrire une autre.

    autres remarques :
    compactes ta bd de temps en temps (2 Mo au lieu de 10)
    j'ai inséré "option explicit" en tête de chaque module : ca oblige à bien déclarer ses variables

    Vois la fonction GetNbOccurences dans le module standard ‘mod compter scores’
    Vois l’appel de cette fonction dans le sub Compter_resultats() dans le code de FRM_score_consultation
    puis Compter_resultats est lancé dans l’evt form_current ,.
    Tu devras le relancer si tu décides de modifier les scores dans FRM_score_consultation

    Enfin dans le form_load , j’ai mis en commentaire la ligne , ce que je trouve plus normal en consultation
    ' DoCmd.GoToRecord , , acNewRec

    CDLT (signifie Cordialement)
    Micniv
    Fichiers attachés Fichiers attachés
    "Always look at the bright side of life." Monty Python.

  9. #9
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 650
    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 650
    Points : 14 628
    Points
    14 628
    Par défaut
    bonjour et bravo micniv,
    non seulement tu es expert Access mais aussi en golf ...
    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 ?

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2010
    Messages : 23
    Points : 5
    Points
    5
    Par défaut Nombre d’occurrence dans un enregistrement
    Salut Micniv

    Merci pour ton aide.
    J'ai un petit soucis lorsque j'essaye d'ouvrir le formulaire consultation et comme je ne maîtrise ...pas encore, le langage (je joins un print screen).
    Désolé pour le CLDT, mais à mon âge, à part le mdr, le lol ou le M.S je ne connais pas trop les abréviations.
    Au plaisir de recevoir tes prochains messages,
    Eddy
    Fichiers attachés Fichiers attachés

  11. #11
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 650
    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 650
    Points : 14 628
    Points
    14 628
    Par défaut
    puis-je me permettre d'ajouter un contrôle, afin de ne pas comptabiliser des résultats alors que le score (ou la valeur du par) n'a pas été noté ?
    Nom : _0.JPG
Affichages : 914
Taille : 93,7 Ko
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            ' si le score ou la valeur du par n'est pas rempli, il ne faut pas comptabiliser le trou
            If Not IsNull(Me("HOLE" & i + 1 & "C")) And Not IsNull(Me("HOLE" & i + 1 & "P")) Then
                s1 = s1 & Nz(Me("HOLE" & i + 1 & "D"), 0) & ","
            Else
                s1 = s1 & "10" & ","
            End If
    avec ce code, le nombre de pars réalisé sera 0.
    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
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Bien vu, Tee_frandbois !
    C'est vrai qu'avec un nom comme ça, le golf ça te connait et tu ne laisses pas un par passer ...

    Ber10 :
    En quelle version d'Access es-tu ?
    Visiblement une reference est manquante ou marquée "manquante" dans les references VBA.
    Vérifie dans l'éditeur VBA, memu OUTILS / REFERENCES :
    en ACCESS 2010 , j'ai :
    Nom : Capture. VBE referenres.PNG
Affichages : 944
Taille : 77,9 Ko

    et aussi corrige Compter_resultats() pour la bonne correction de Tee_grandbois !
    "Always look at the bright side of life." Monty Python.

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2010
    Messages : 23
    Points : 5
    Points
    5
    Par défaut Nombre d’occurrence dans un enregistrement
    Hello à tous,

    Je suis sous Access 2003.

    J'avais un message d'erreur à l'ouverture de la BD mais depuis que j'ai supprimé les formulaires de saisie 2 et 3, celui-ci a disparu.
    Pour l'apparence réelle de la carte de score et comme aucun trou n'est joué, il ne peut pas y avoir 18 PAR réalisés, le score de 0 doit rester visible dans le champ au début de la saisie.

    Merci encore à tous de persévérer dans la recherche d'une solution.

    Eddy

  14. #14
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Le problème a déjà été évoqué et la solution a été donné par Tee_grandbois dans le message #11 .
    et à la fin du message #12 ci-dessus, je te prie d'en tenir compte.

    CDLT
    "Always look at the bright side of life." Monty Python.

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2010
    Messages : 23
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par micniv Voir le message
    Le problème a déjà été évoqué et la solution a été donné par Tee_grandbois dans le message #11 .
    et à la fin du message #12 ci-dessus, je te prie d'en tenir compte.

    CDLT
    Message bien reçu.
    Malheureusement, mes connaissances sont toujours insuffisantes et je ne sais trop comment utiliser la solution proposée.
    J'ai bien essayé de copier le tout dans un module mais sans succès car à l'ouverture de la BD un message s'affiche, voir pièce jointe
    Le mot HOLE est surligné en bleu mais comme je ne saisi pas totalement la formule j'ai quelques crainte à modifier quoi que ce soit.
    Fichiers attachés Fichiers attachés

  16. #16
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 650
    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 650
    Points : 14 628
    Points
    14 628
    Par défaut
    Ce n'est pas la bonne manipulation, voici ce qu'il faut faire:
    - ouvrir le formulaire FRM_Score_Consultation en mode création
    - appuyer sur ALT+F11 en même temps pour afficher la fenêtre VBA, ou bien appuyer sur le bouton "Visualiser le code" du ruban
    - rechercher la procédure Compter_resultats()
    - supprimer la ligne marquée en rouge:

    Nom : _2.JPG
Affichages : 1643
Taille : 81,8 Ko

    - copier et coller le code ci-dessous à la place de la ligne qui vient d'être supprimée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            ' si le score ou la valeur du par n'est pas rempli, il ne faut pas comptabiliser le trou
            If Not IsNull(Me("HOLE" & i + 1 & "C")) And Not IsNull(Me("HOLE" & i + 1 & "P")) Then
                s1 = s1 & Nz(Me("HOLE" & i + 1 & "D"), 0) & ","
            Else
                s1 = s1 & "10" & ","
            End If
    cela doit donner ceci:
    Nom : _0.JPG
Affichages : 1533
Taille : 98,1 Ko

    - supprimer le code précédent collé dans le Module1 et qui provoque l'erreur:Nom : _3.JPG
Affichages : 1491
Taille : 58,1 Ko
    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 ?

  17. #17
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Sic dixit Tee_grandbois ! merci
    Je ne saurais mieux dire ...
    "Always look at the bright side of life." Monty Python.

  18. #18
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2010
    Messages : 23
    Points : 5
    Points
    5
    Par défaut Nombre d’occurrences dans un enregistrement
    C'est presque tout bon.
    J'ai toutefois encore une erreur qui apparaît lorsque je veux activer le formulaire consultation et comme je n'en comprend pas la signification je préfère ne pas toucher
    Je met le print screen de l'erreur en pièce jointe

    Citation Envoyé par tee_grandbois Voir le message
    Ce n'est pas la bonne manipulation, voici ce qu'il faut faire:
    - ouvrir le formulaire FRM_Score_Consultation en mode création
    - appuyer sur ALT+F11 en même temps pour afficher la fenêtre VBA, ou bien appuyer sur le bouton "Visualiser le code" du ruban
    - rechercher la procédure Compter_resultats()
    - supprimer la ligne marquée en rouge:

    Nom : _2.JPG
Affichages : 1643
Taille : 81,8 Ko

    - copier et coller le code ci-dessous à la place de la ligne qui vient d'être supprimée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            ' si le score ou la valeur du par n'est pas rempli, il ne faut pas comptabiliser le trou
            If Not IsNull(Me("HOLE" & i + 1 & "C")) And Not IsNull(Me("HOLE" & i + 1 & "P")) Then
                s1 = s1 & Nz(Me("HOLE" & i + 1 & "D"), 0) & ","
            Else
                s1 = s1 & "10" & ","
            End If
    cela doit donner ceci:
    Nom : _0.JPG
Affichages : 1533
Taille : 98,1 Ko

    - supprimer le code précédent collé dans le Module1 et qui provoque l'erreur:Nom : _3.JPG
Affichages : 1491
Taille : 58,1 Ko

  19. #19
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 650
    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 650
    Points : 14 628
    Points
    14 628
    Par défaut
    Je met le print screen de l'erreur en pièce jointe
    qui est, en fait, mon message précédent ...
    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 ?

  20. #20
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2010
    Messages : 23
    Points : 5
    Points
    5
    Par défaut
    Bonjour Grandbois
    J'ai bien suivi toutes tes instructions, à savoir:

    - ouvrir le formulaire FRM_Score_Consultation en mode création
    - appuyer sur ALT+F11 en même temps pour afficher la fenêtre VBA, ou bien appuyer sur le bouton "Visualiser le code" du ruban
    - rechercher la procédure Compter_résultats
    - supprimer la ligne marquée en rouge:

    - copier et coller le code proposé

    - supprimer le code précédent collé dans le Module1 et qui provoque l'erreur

    Le module qui provoquait l'erreur n’apparaît plus dans la liste, le seul qui reste est " mod compter score"
    Dois-je aussi le supprimer?

    Merci pour ta patience envers un total débutant en VBA...
    En comparaison golfique, je suis un handicapé 36 et vous êtes, Micniv et toi, les Tiger Wood de ce langage.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 11
    Dernier message: 07/06/2013, 19h31
  2. [AC-2007] Compter le nombre d'occurrence dans une sous-table
    Par Delborg dans le forum IHM
    Réponses: 2
    Dernier message: 29/02/2012, 22h32
  3. [XL-2010] Compter le nombre d'occurrence dans une heure?
    Par zoltix dans le forum Excel
    Réponses: 4
    Dernier message: 24/04/2011, 11h47
  4. Limiter le nombre d'occurrences dans une dimension
    Par klognos dans le forum Cognos
    Réponses: 1
    Dernier message: 31/05/2008, 23h29
  5. Réponses: 2
    Dernier message: 06/05/2007, 23h43

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