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 :

Demande d'aide pour la création d'un code VBA entre 2 tables [AC-2007]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 297
    Par défaut Demande d'aide pour la création d'un code VBA entre 2 tables
    Bonjour la communauté,

    Je me tourne vers vous, car je souhaiterai optimiser ma base de données de mon compte bancaire.

    Vous trouverez ci-joint les relations de ma base de données :
    Nom : Relation de ma BDD.JPG
Affichages : 833
Taille : 55,1 Ko

    Ci-joint ma table "Cheques" :
    Nom : Table Cheques.JPG
Affichages : 462
Taille : 29,4 Ko

    Ci-joint ma table "Mouvements" :
    Nom : Table Mouvements.JPG
Affichages : 519
Taille : 32,6 Ko


    Je souhaiterais optimiser ma base de données au niveau de la table « Cheques » et « Mouvements ».

    Alors dans la table « cheques » on retrouve les chèques émis et les chèques reçus où j’enregistre le numéro du chèque, la banque, l’intitulé, la date, et son montant.
    Cette table me permet de pointer les chèques encaissés et les chèques en attente d’encaissement.

    Lorsqu’un chèque est encaissé, je coche la case de la colonne « ChqEncaisse » en indiquant la date d’encaissement de ce dernier.
    Il est bon de savoir qu’un chèque peut correspondre à un ou plusieurs enregistrements au sein de la table « Mouvements » où l’on retrouve le numéro de chèque via la colonne « NumChq ».

    Donc à chaque fois, que j’indique un chèque encaissé, c’est-à-dire que je coche la colonne « ChqEncaisse » dans la table « Cheques », je dois effectuer des opérations manuelles afin de décocher la case « EnAttente » dans la table « Mouvements » pour chaque ligne correspondant au chèque encaissé.

    La colonne « EnAttente » coché signifie que le montant de la ligne d’enregistrement au sein de la table « Mouvements » n’est pas pris en compte pour le calcul du solde bancaire.
    En outre, comme vous pouvez l’imaginer cette opération manuelle peut être fastidieuse lorsqu'une remise de chèque correspondant à dix lignes d’enregistrements, et accroitre des erreurs sur le solde bancaire.

    C’est pour cela, que j’aimerais créer un code VBA, dans le but que lorsque je coche la case « ChqEncaisse » dans la table « Cheques », toutes les lignes d’enregistrement ayant un numéro de chèque identique dans la table « Mouvements » via la colonne « NumChq » qui est la clé primaire de la table « Cheques », alors tous les enregistrements s’actualisent automatiquement afin d’être pris en compte pour le solde bancaire, c’est-à-dire que le code décoche la case « EnAttente » dans la table en « Mouvements » dès lors que je coche la case « ChqEncaisse » dans la table « Cheques ».

    Ayant un niveau débutant dans le codage VBA, est ce que la communauté pourrait me donner une base de code et/ou des explications pour y arriver s'il vous plaît.

    J'espère être compréhensif dans mon explication, et je reste à votre disposition pour répondre à toutes questions.

    Une nouvelle fois, je tiens à remercier les internautes qui vont m’aider afin de réussir à développer mon projet.

    Dans le plaisir de vous lire, bonne soirée à vous et bon week-end.

    Bien cordialement Benjamin.

  2. #2
    Membre émérite

    Homme Profil pro
    linux, pascal, HTML
    Inscrit en
    Mars 2002
    Messages
    649
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : Belgique

    Informations professionnelles :
    Activité : linux, pascal, HTML
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2002
    Messages : 649
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Donc à chaque fois, que j’indique un chèque encaissé, c’est-à-dire que je coche la colonne « ChqEncaisse » dans la table « Cheques », je dois effectuer des opérations manuelles afin de décocher la case « EnAttente » dans la table « Mouvements » pour chaque ligne correspondant au chèque encaissé.
    Une suggestion:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE table     SET newvalue     WHERE criteria;
    Un update de EnAttente avec un where sur le numero du cheque encaissé
    voir:UPDATE Statement (Microsoft Access SQL)
    https://msdn.microsoft.com/en-us/lib...ffice.12).aspx
    avec un exemple en vb

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 297
    Par défaut
    Citation Envoyé par Michel Voir le message
    Bonjour

    Une suggestion:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE table     SET newvalue     WHERE criteria;
    Un update de EnAttente avec un where sur le numero du cheque encaissé
    voir:UPDATE Statement (Microsoft Access SQL)
    https://msdn.microsoft.com/en-us/lib...ffice.12).aspx
    avec un exemple en vb
    Bonjour Michel,

    je te remercie pour ton aide.

    Alors voici le code que j'ai préparé avec votre suggestion :
    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
    Option Compare Database
     
    Sub UpdateX()
     
        Dim dbs As Database
        Dim qdf As QueryDef
     
     
        Set dbs = OpenDatabase("Chèque non encaissé")
     
        ' Le changement se fait au niveau de la colonne en attente dans la table Mouvement
        'On relie le numéro de chèque de la table chèque avec la table mouvement
         'Le changement s'effectue à condition que la case cheque encaisse soit coche'
        dbs.Execute "UPDATE Mouvements " _
            & "SET EnAttente = No " _
            & "WHERE Cheques.NumChq = Mouvements.NumChq;" _
            & "Cheques.ChqEncaisse = Yes; " _
     
        dbs.Close
     
    End Sub
    Pourriez-vous me dire si le codage est bon s'il vous plaît ?

    Encore merci pour votre aide.

    Bien cordialement,
    Benjamin.

  4. #4
    Membre émérite

    Homme Profil pro
    linux, pascal, HTML
    Inscrit en
    Mars 2002
    Messages
    649
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : Belgique

    Informations professionnelles :
    Activité : linux, pascal, HTML
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2002
    Messages : 649
    Billets dans le blog
    1
    Par défaut
    A priori, cela me semble correct; pour tester faire une copie des tables et essayer

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 297
    Par défaut
    Citation Envoyé par Michel Voir le message
    A priori, cela me semble correct; pour tester faire une copie des tables et essayer
    Bonjour Michel,

    j'espère que vous allez bien.

    Malheureusement j'ai essayé le code, et j'ai un message d'erreur lorsque je coche la case chèque encaissé, la première ligne du code est surligné en jaune.

    Ci dessous le message d'erreur :
    Nom : Capture d'erreur.PNG
Affichages : 496
Taille : 45,7 Ko

    J'ai inséré le code dans la propriété de la case "ChqEncaisse" lors d'un click, ci-dessous la capture d'écran de la propriété :
    Nom : Propriété chéque encaissé.PNG
Affichages : 397
Taille : 10,3 Ko

    Merci pour votre aide.

    Bien cordialement,
    Benjamin.

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Bonjour.

    Tu as inclu le code dans une autre procédure.
    Ton code devrait ressembler à cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private sub ChgEncaisse_Cilck()
        call updateX 'Le call est optionnel mais j'aime bien
    end sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public sub UpdateX()
      'ici le code de updateX
    end sub
    updateX pourrait être dans un autre module éventuellement.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

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

Discussions similaires

  1. Demande d'aide pour la création d'une requête SQL
    Par defcom60 dans le forum Langage SQL
    Réponses: 14
    Dernier message: 02/11/2015, 20h21
  2. demande d'aide pour la création d'une BDD
    Par RasWisdom dans le forum Débuter
    Réponses: 2
    Dernier message: 16/04/2013, 11h49
  3. Réponses: 4
    Dernier message: 03/06/2012, 08h08
  4. demande d'aide pour la création d'un driver
    Par thor76160 dans le forum C#
    Réponses: 3
    Dernier message: 20/12/2009, 21h20
  5. Réponses: 2
    Dernier message: 29/11/2006, 22h52

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