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

Access Discussion :

Requête en VBA n'enregistre pas les données [AC-2013]


Sujet :

Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 16
    Points : 10
    Points
    10
    Par défaut Requête en VBA n'enregistre pas les données
    Bonjour à tous,
    J'ai une application comptabilité sur access, dans une sub vba il y a un certain nombre de requêtes qui fonctionnent toutes sauf la dernière. Si je passe cette requête en avant dernière elle fonctionne. C'est toujours la dernière qui ne fonctionne pas.
    Je joint mon code.

    Merci d'avance

    Private Sub EcritRegroup_Click()
    If MsgBox("Attention, cette opération est irréversible !", vbOKCancel, "Prudence") = vbOK Then
    Dim bd As Database
    Dim cptesGestion As Recordset
    Dim montant, totalcharges, totalproduits, totalresult, numerocompte As Currency
    Dim requeteSQL, resultatSQL As String
    Dim jour As String
    Dim numeroEcr As Long
    Set bd = CurrentDb
    DoCmd.SetWarnings (False)
    jour = Date
    ' regroupement des charges
    requeteSQL = "insert into ecriture (datEcr,libEcr) values ('" & jour & "','Regroupement charges')"
    DoCmd.RunSQL (requeteSQL)
    numeroEcr = DMax("numEcr", "ecriture")
    totalcharges = 0
    Set cptesGestion = bd.OpenRecordset("rq_regroupCharges")
    cptesGestion.MoveFirst
    While (Not cptesGestion.EOF)
    montant = cptesGestion!solde
    totalcharges = totalcharges + montant
    requeteSQL = "insert into mouvement values (" & numeroEcr & ","
    requeteSQL = requeteSQL & cptesGestion!numCpte & ", 0,"
    requeteSQL = requeteSQL & montant & ","
    requeteSQL = requeteSQL & 0 & ")"
    DoCmd.RunSQL (requeteSQL)
    cptesGestion.MoveNext
    Wend
    cptesGestion.Close
    ' regroupement des produits
    requeteSQL = "insert into ecriture (datEcr,libEcr) values ('" & jour & "','Regroupement produits')"
    DoCmd.RunSQL (requeteSQL)
    numeroEcr = DMax("numEcr", "ecriture")
    totalproduits = 0
    Set cptesGestion = bd.OpenRecordset("rq_regroupProduits")
    cptesGestion.MoveFirst
    While (Not cptesGestion.EOF)
    montant = cptesGestion!solde
    totalproduits = totalproduits + montant
    requeteSQL = "insert into mouvement values (" & numeroEcr & ","
    requeteSQL = requeteSQL & cptesGestion!numCpte & ","
    requeteSQL = requeteSQL & montant & ",0 ,0)"
    DoCmd.RunSQL (requeteSQL)
    cptesGestion.MoveNext
    Wend
    cptesGestion.Close
    totalresult = totalcharges - totalproduits
    If totalresult < 0 Then
    numerocompte = 120000
    Else
    numerocompte = 129000
    End If
    requeteSQL = "insert into ecriture (datEcr,libEcr) values ('" & jour & "','Résultat')"
    DoCmd.RunSQL (requeteSQL)
    numeroEcr = DMax("numEcr", "ecriture")
    requeteSQL = "insert into mouvement values (" & numeroEcr & ","
    requeteSQL = requeteSQL & numerocompte & ", 0,"
    requeteSQL = requeteSQL & totalcharges & ","
    requeteSQL = requeteSQL & 0 & ")"
    DoCmd.RunSQL (requeteSQL)
    resultatSQL = "insert into mouvement values (" & numeroEcr & ","
    resultatSQL = resultatSQL & numerocompte & ","
    resultatSQL = resultatSQL & totalproduits & ",0 ,0)"
    DoCmd.RunSQL (resultatSQL)
    DoCmd.SetWarnings (True)
    MsgBox ("Opération terminée")
    Else
    MsgBox ("Opération annulée")
    End If
    End Sub

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 770
    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 770
    Points : 14 812
    Points
    14 812
    Par défaut
    Bonsoir,
    Visiblement il n'y a pas d'erreur de code, peut-être faut-il essayer de remplacer DoCmd.RunSQL (resultatSQL) par CurrentDb.Execute resultatSQL, dbFailOnError et enlever le Docmd.SetWarnings (False) au moins la première fois pour vérifier qu'il n'y a pas de message d'erreur lors de l'exécution.

    PS : pense à utiliser les balises de code (icône #) la prochaine fois.

  3. #3
    Membre éprouvé Avatar de HDU71000
    Homme Profil pro
    Développement Access - En recherche de poste télétravail (invalide)
    Inscrit en
    Août 2016
    Messages
    716
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement Access - En recherche de poste télétravail (invalide)

    Informations forums :
    Inscription : Août 2016
    Messages : 716
    Points : 1 023
    Points
    1 023
    Par défaut
    Salut,

    aussi, à chaque tu dois mettre en fin de code pour libérer les objets de la mémoire.

    Cela pourrait expliquer ton souci.

    A+

  4. #4
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 770
    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 770
    Points : 14 812
    Points
    14 812
    Par défaut
    Peux-tu aussi nous indiquer quel est le volume de données à insérer.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 16
    Points : 10
    Points
    10
    Par défaut Problème résolu
    Bonjour,

    Merci pour vos réponses, et surtout à tee_grandbois de m'avoir suggéré d'activer les messages. Il s'avère que j'essayais d'enregistrer les mêmes données sur une table ayant une clé primaire sur deux champs. J'ai modifié mon code et tout fonctionne.
    Désolé pour les balises de code mais c'est la première fois que je poste avec du code, jusqu'ici j'avais trouvé mes réponses dans le forum.

    @+

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

Discussions similaires

  1. ClientDataSet.Refresh ne rafraichit pas les données
    Par WebPac dans le forum Bases de données
    Réponses: 4
    Dernier message: 26/04/2007, 14h32
  2. [Requête/SQL]Ajouter un enregistrement à tous les membres
    Par fernandino dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 18/04/2007, 17h45
  3. executer une requête en VBA : macro ou pas ?
    Par Cantalou dans le forum Requêtes et SQL.
    Réponses: 13
    Dernier message: 26/01/2007, 14h35
  4. pb de syntaxe XML ne reconnais pas les données ..
    Par lolodelp dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 19/06/2006, 11h24
  5. y'a pas les données quand je veux imprimer
    Par StyleXP dans le forum Bases de données
    Réponses: 38
    Dernier message: 25/03/2006, 19h15

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