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 :

Problème de calcul dans vba sur résultat requête [AC-2010]


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Février 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Février 2016
    Messages : 24
    Points : 12
    Points
    12
    Par défaut Problème de calcul dans vba sur résultat requête
    Bonjour à tous,

    J'essaie de créer un tableau de reporting sur excel à partir des données ACCESS. Du coup, j'ai créé une requête de sélection de mes données (info produit, achat, vente..) que je mets dans un tableau. Par contre, je souhaite ajouter des informations dans le tableau (ex: achat effectué en France, achat effectué à l'étranger et achat total...).

    Dans l'éditeur e fais donc: (achatTotal - achatExport) pour trouver l'achat en France, j'obtiens un résultat. Mais l'opération est fausse car si dans mon tableau excel final, je fais AchatFrance + Achat Export ça ne me donne pas AchatTotal...

    J'ai donc pensé à un problème de valeurs nulles, j'ai donc utilisé Nz pour toutes dans ma requête SQL (ex: Nz(AchatExport, 0), mais là tous mes résultats sont faux, même la somme de mes achat Total est beaucoup plus grande que le résultat normal. (C'est à dire que normalement j'obtiens 6,2M €, et en utilisant Nz j'obtiens un résultat de 9,4M€)

    Peut-être une piste: Sachant que dans mes tables mes montants sont en format monnaie dans access, j'ai essayé un export simple de ma requête de access vers excel et j'ai remarqué qu'avec Nz mes montants ressortaient sous format texte...

    Ma requête (simplifiée, car données assez sensibles )


    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT RAchatMat.Ref, Nz(RAchatMat.MAchTot, 0), Nz(RAchatMN.MATN,0), Nz(RAchatMat.MAchG,0), Nz(RAchatMN.MAGN, 0), Nz(RVenteMat.UVFT, 0), Nz(RVenteMN.UVFTN, 0), Nz(RVenteMat.MVGFT, 0)
    FROM (( RAchatMat LEFT JOIN RVenteMat ON RAchatMat.Ref = RVenteMat.Ref) LEFT JOIN RAchatMN ON RAchatMat.Ref = RAchatMN.Ref) LEFT JOIN RVenteMN ON RAchatMat.Ref = RVenteMN.Ref;


    Mon code:

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    lngNbLTabPrdt = DCount("*", "RTop_MAT")
     
     
     
    ReDim Preserve tabPrdt(1 To lngNbLTabPrdt, 9 To 80)
       ReDim Preserve tabPdrg(1 To lngNbLTabPrdt, 1 To 12)
     
     
    reqTopOcp.MoveFirst
    For cpt = 1 To lngNbLTabPrdt
     
     
     
        tabPdrg(cpt, 1) = reqTopOcp("[Ref]")
     
        tabPrdt(cpt, 9) = reqTopOcp("[MAchTot]")
     
        tabPrdt(cpt, 10) = reqTopOcp("[MATN]")
            If tabPrdt(cpt, 10) = 0 Then
            tabPrdt(cpt, 11) = 0
            Else: tabPrdt(cpt, 11) = (tabPrdt(cpt, 9) - tabPrdt(cpt, 10)) / tabPrdt(cpt, 10)
     
        End If
     
        tabPrdt(cpt, 12) = reqTopOcp("[MAchTot]") - reqTopOcp("[MAchG]")
        tabPrdt(cpt, 13) = reqTopOcp("[MATN]") - reqTopOcp("[MAGN]")
         If tabPrdt(cpt, 13) = 0 Then
         tabPrdt(cpt, 14) = 0
            Else: tabPrdt(cpt, 14) = (tabPrdt(cpt, 12) - tabPrdt(cpt, 13)) / tabPrdt(cpt, 13)
        End If
     
       tabPrdt(cpt, 15) = reqTopOcp("[MAchG]")
       tabPrdt(cpt, 16) = reqTopOcp("[MAGN]")
            If tabPrdt(cpt, 16) = 0 Then
            tabPrdt(cpt, 17) = 0
            Else: tabPrdt(cpt, 17) = (tabPrdt(cpt, 15) - tabPrdt(cpt, 16)) / tabPrdt(cpt, 16)
        End If
     
        tabPrdt(cpt, 18) = tabPrdt(cpt, 9) - reqTopOcp("[MBE]")
        tabPrdt(cpt, 19) = tabPrdt(cpt, 10) - reqTopOcp("[MBEN]")
            If tabPrdt(cpt, 19) = 0 Then
            tabPrdt(cpt, 20) = 0
            Else: tabPrdt(cpt, 20) = (tabPrdt(cpt, 18) - tabPrdt(cpt, 19)) / tabPrdt(cpt, 19)
        End If
     
        tabPrdt(cpt, 21) = tabPrdt(cpt, 18) - tabPrdt(cpt, 15)
        tabPrdt(cpt, 22) = tabPrdt(cpt, 19) - tabPrdt(cpt, 16)
            If tabPrdt(cpt, 22) = 0 Then
            tabPrdt(cpt, 23) = 0
            Else: tabPrdt(cpt, 23) = (tabPrdt(cpt, 21) - tabPrdt(cpt, 22)) / tabPrdt(cpt, 22)
        End If
     
            End If
     
     
        tabPrdt(cpt, 72) = reqTopOcp("[UVFT]")
        tabPrdt(cpt, 73) = reqTopOcp("[UVFTN]")
             If tabPrdt(cpt, 73) = 0 Then
            tabPrdt(cpt, 74) = 0
            Else: tabPrdt(cpt, 74) = (tabPrdt(cpt, 72) - tabPrdt(cpt, 73)) / tabPrdt(cpt, 73)
        End If
     
        tabPrdt(cpt, 75) = tabPrdt(cpt, 72) - reqTopOcp("[UVFE]") - reqTopOcp("[UVFH]")
        tabPrdt(cpt, 76) = tabPrdt(cpt, 73) - reqTopOcp("[UVFEN]") - reqTopOcp("[UVFHN]")
             If tabPrdt(cpt, 76) = 0 Then
            tabPrdt(cpt, 77) = 0
            Else: tabPrdt(cpt, 77) = (tabPrdt(cpt, 75) - tabPrdt(cpt, 76)) / tabPrdt(cpt, 76)
        End If
     
        tabPrdt(cpt, 78) = reqTopOcp("[UVFE]")
        tabPrdt(cpt, 79) = reqTopOcp("[UVFEN]")
             If tabPrdt(cpt, 79) = 0 Then
            tabPrdt(cpt, 80) = 0
            Else: tabPrdt(cpt, 80) = (tabPrdt(cpt, 78) - tabPrdt(cpt, 79)) / tabPrdt(cpt, 79)
        End If
     
     
     
     
        reqTopOcp.MoveNext
     
    Next
    Merci d'avance.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Février 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Février 2016
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    Bon et bien je pense que mon problème venait du fait qu'avec Nz dans ma requête je sortais des données en texte.
    Du coup, en mettant Val(Nz(..,0)) je transforme mes Nz en nombre et ça semble fonctionner...


    Je confirme cela d'ici demain et si c'est effectivement ça, je repasse mettre en Résolu.

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

Discussions similaires

  1. [XL-2013] Problème de calcul dans une requête SQL
    Par katiar dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 26/08/2015, 16h19
  2. [AC-2003] Problème champ calculé dans requête
    Par alu1308 dans le forum IHM
    Réponses: 2
    Dernier message: 31/07/2013, 11h17
  3. [Vxi3] Invite Dans Liste sur résultat d'une requète
    Par tpeluchon dans le forum Deski
    Réponses: 2
    Dernier message: 01/02/2010, 12h45
  4. Calcul de Statistics sur les requêtes
    Par Rahustro dans le forum Oracle
    Réponses: 3
    Dernier message: 17/01/2006, 06h19
  5. problème de calcul dans un formulaire
    Par Bray02 dans le forum IHM
    Réponses: 1
    Dernier message: 07/12/2005, 11h45

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