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

Requêtes et SQL. Discussion :

Calcul Recordset VBA ACCESS


Sujet :

Requêtes et SQL.

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    autres
    Inscrit en
    Mai 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : autres
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 20
    Par défaut Calcul Recordset VBA ACCESS
    Bonjour,

    Je souhaiterais calculer la somme des différents groupe_affaire a partir d'une requete qui contient toutes les donnees par mois et par groupe_affaire.

    je souhaiterais que pour le mois de janvier la requete (sous vba avec un recordset ouvert) me calcul la somme du groupe_affaire 1 pour chaque mois ainsi de suite.

    ci dessous mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    With MonRst
            If MonRst.Fields("groupe_affaire") = DLookup("[groupe_affaire]", "REQ_AFFAIRES_PA", "[id_groupe_affaire]=" & MonRst.Fields("id_groupe_affaire") & "") Then
                While Not .EOF
                .FindNext "'" & MonRst.Fields("groupe_affaire") & "'= '" & DLookup("[groupe_affaire]", "REQ_AFFAIRES_PA", "[id_groupe_affaire]=" & MonRst.Fields("id_groupe_affaire") & "") & "'"
                For Q = 1 To Mois_cloture
                Valeur_Prod = -((Nz(DSum("[MONTANTLOCAL]", "sous_requete_productions", "[idpays]=" & MonRst.Fields("idpays") & " and [idsite]=" & MonRst.Fields("idsite") & " and [id_groupe_affaire]=" & MonRst.Fields("id_groupe_affaire").Value & " and [idmois]<=" & Q & "") / 1000 / DLookup("taux", "sous_requete_productions", "[idsite] =" & MonRst.Fields("idSite").Value & " and [idmois]=" & Q & ""), 0) - Nz(DSum("[MONTANTLOCAL]", "sous_requete_productions", "[idpays]=" & MonRst.Fields("idpays") & " and [id_groupe_affaire]=" & MonRst.Fields("id_groupe_affaire").Value & " and [idsite]=" & MonRst.Fields("idsite") & " and [idmois]<" & Q & "") / 1000 / DLookup("taux", "sous_requete_productions", "[idsite] =" & MonRst.Fields("idSite").Value & " and [idmois]=" & Q & ""), 0)))
                    DoCmd.SetWarnings False
                Next Q
                MonRst.MoveNext
                Wend
            End If
    End With

  2. #2
    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
    Pourquoi ne pas utiliser une requête de regroupement au lieu de VBA. C'est généralement plus rapide et plus simple.

    Sinon tu peux aussi utiliser DSum() ou DCount() qui te permettent de faire des sommes ou des comptages sous conditions.

    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.

  3. #3
    Membre averti
    Homme Profil pro
    autres
    Inscrit en
    Mai 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : autres
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 20
    Par défaut Calcul Recordset VBA ACCESS
    Merci pour la réponses presque instantanée

    en effet j'aid eja une requete classique qui fonction. le hic c'est que j'utilise une autre requete du meme type pour calculer la marge et la facturation. du coup avec une requete classique le traitement met 30mn (je l'ai chronometre).

    du coup je me suis dit que cela serait benefique pour moi de le faire sous vba. car juste apres il faudra générer les graphique qui vont avec.

    le dcount ne correspond pas à ce que je recherche.

    le dsum correspond parfaitement . c'est juste que lorsque lorsque je lanque la requete sous vba, j'ai des doublons dans les résultats et aussi cetains groupe_affaire ne sont pas pris en compte.

    je ne sais pas si c'est clair pour vous.;?

    Cdt

  4. #4
    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
    Désolé du pour le retard, j'ai eu plein de boulot.

    Une methode pour accélérer les calculs par requête c'est d'utiliser des tables temporaires. Tu lances une requête qui alimente une table temporaire qui va enregistrer certaines valeurs intermédiaire (ex : ta marge) et ensuite tu utilises cette table comme source de ta requête suivante et ainsi de suite.

    Évidement il faut faire attention de bien les vider avant tes traitements mais les gains de vitesse sont générablement très bons.

    Une autre méthode consiste à utiliser des appels au index explicitement au lieu des FindFirst. C'est la méthode Seek sur les objets DAO.RecordSet. Mais là il faut bien penser son algorithme pour obtenir de bons résultats. Pour stocker tes résultats tu peux utiliser des tableaux VBA.

    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.

Discussions similaires

  1. [AC-2010] Calcul coût VBA Access
    Par gogo850 dans le forum VBA Access
    Réponses: 6
    Dernier message: 15/06/2012, 19h02
  2. Réponses: 3
    Dernier message: 30/06/2006, 09h41
  3. [VBA - ACCESS 2002] Problème RecordSet/Requête SQL
    Par SamLeChiseuji dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 16/06/2006, 10h01
  4. [VBA Access 2002][Débutant] Problème Recordset
    Par SamLeChiseuji dans le forum IHM
    Réponses: 11
    Dernier message: 08/06/2006, 08h29
  5. [VBA access 2000] fermeture d'un recordset
    Par herendel dans le forum Access
    Réponses: 2
    Dernier message: 26/04/2006, 10h04

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