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 :

Calculer le nombre d'enregistrements correspondant à un critère dans une table liée


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 13
    Points : 8
    Points
    8
    Par défaut Calculer le nombre d'enregistrements correspondant à un critère dans une table liée
    Bonjour,

    Je suis en train de tenter de perfectionner ma base access qui me sert à gérer les prêts d’une bibliothèque.
    Dans cette base, j’ai trois tables :
    - une table ouvrage qui recense tous les ouvrages de la bibliothèque
    - une table utilisateurs qui recense les coordonnées des utilisateurs
    - une table prêts qui, à chaque fois qu’un livre est emprunté, fait le lien entre l’ouvrage (grâce au numéro d’inventaire) et l’utilisateur (grâce au nom)

    A ces trois tables correspondent des formulaires, qui permettent de retrouver des enregistrements dans la table concernée. Voici celui correspondant à la table « utilisateurs » en pj

    Je voudrais maintenant supprimer les fiches des utilisateurs qui n’ont plus de livres en leur possession.
    Pour cela, j’aimerais créer un champ compteur qui me permettrait directement, sur chaque fiche utilisateur, de dire : « cet utilisateur a encore tant de livres empruntés » ou dit autrement, « dans la table prêts, il y a tant d’enregistrements qui correspondent au nom de cet utilisateur ».
    Savez vous si c’est possible et, si c’est le cas, quelle commande utiliser ?
    Fichiers attachés Fichiers attachés

  2. #2
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    un exemple
    Dans l'evenement Current du formulaire le champ Nb prets contiendra le nombre de prets pour le client numeroclient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub Form_Current()
     Me![nb prets] = DCount("*", "TablePrets", "[numeroclient]=" & Me![numeroclient])
    End Sub

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Merci beaucoup pour ta réponse. J'ai appliqué le code à mon application, mais le débogueur me dit qu'il y a une erreur et je ne comprend pas pourquoi :
    (J'ai crée un champ nb prets dans ma base utilisateurs et le champ commun qui relie mes tables "prets" et "utilisateurs" s'appelle "code identification" (c'est en fait le nom suivi du prénom de l'utilisateur, pour s'assurer qu'il soit unique)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Form_Current()
    Me![nb prets] = DCount("*", "Prets", "[code identification]=" & Me![Code identification])
     
    End Sub
    Qu'est ce qui cloche ?

  4. #4
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    code identification étant du texte il te faut le mettre entre guillemets:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me![nb prets] = DCount("*", "Prets", "[code identification]='" & Me![Code identification] & "'")

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Effectivement, c'était bien mon problème !
    Mais maintenant, j'ai une erreur d'exécution '3058' : un index ou une clé principale ne peut contenir une valeur nulle ... et dans mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Then.Me.bookmark=rs.bookmark
    se met en jaune

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Modifiable22_AfterUpdate()
        ' Rechercher l'enregistrement correspondant au contrôle.
        Dim rs As Object
     
        Set rs = Me.Recordset.Clone
        rs.FindFirst "[Code identification] = '" & Me![Modifiable22] & "'"
        If Not rs.EOF Then Me.Bookmark = rs.Bookmark
    End Sub
    Je n'arrive encore pas à comprendre le problème ...

  6. #6
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    visiblement ton recordset ne contient pas de bookmark.
    vérifie donc aussi la nullité du bookmark avant l'affectation

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    j'ai rien compris ! Je ne maitrise vraiment pas VBA et ses termes techniques ...

    Ce que je comprends, c'est que ma nouvelle zone de texte censée recueillir le nombre de prêts en cours ne permet plus au contrôle d'accéder à l'enregistrement, ce qui fait que "code identification", dont l'affichage est caché, n'est pas renseigné, et comme c'est ma clé primaire, access ne tolère pas une clé primaire vide.
    Ce que je ne comprends pas (entre autres), c'est pourquoi cette nouvelle action a une incidence sur mon contrôle d'accès à l'enregistrement alors qu'il me semble que ça n'a rien à voir ...

  8. #8
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    essaie plutot à la place de:

  9. #9
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    pour répondre au reste de tes interrogations:
    "code identification", dont l'affichage est caché
    tu utilise les recordsets: tu a donc accès à tous les champs du recordset qu'il soit affiché ou non.

    Me.Bookmark = rs.Bookmark
    c'est pas Me.bookmark qui est en cause c'est rs.Bookmark qui est null.

    cette nouvelle action a une incidence sur mon contrôle d'accès à l'enregistrement alors qu'il me semble que ça n'a rien à voir ...
    un code c'est un code... d'où il soit s'il n'est pas correct: il plante! où il veut et quand il veut

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Miracle ! Ca marche !
    L'erreur venait du fait que je n'avais pas bien compris la réponse de helas puis vodiem : j'essayais de créer un nouveau champ dans la table utilisateurs, alors qu'il fallait simplement nommer ma zone de texte dans le formulaire "nb prets".
    Et du coup, plus de messages d'erreur ! Ca marche exactement comme je le voulais, et en plus, c'est tout simple !
    Merci à tous ceux qui ont répondu et spécialement Vodiem !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/06/2014, 21h48
  2. [AC-2007] calculer le nombre d'enregistrement correspondant à un critère
    Par pierre1923 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 15/11/2011, 12h18
  3. Réponses: 6
    Dernier message: 12/12/2010, 23h09
  4. Réponses: 8
    Dernier message: 24/04/2008, 15h36

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