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 produit regroupement [AC-2003]


Sujet :

Requêtes et SQL.

  1. #21
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 777
    Points : 58 179
    Points
    58 179
    Billets dans le blog
    42
    Par défaut
    Si j’ai bien compris, certaines valeurs de B sont simplement préconisées et dans ce cas là, la correction ne s’applique pas.

    Dans ce cas, dans la table comprenant le champ B, tu rajoutes un champ [EstPreconisé] de type Oui/Non.

    Et dans la chaîne strSQL de la fonction Multipli, tu rajoutes une condition du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSQL= "SELECT …FROM…WHERE…AND Not([EstPreconisé])"

  2. #22
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 28
    Points : 15
    Points
    15
    Par défaut
    Et il n'est pas possible de plutôt mettre un champ du type

    Sachant que C est le champ où je stocke la valeur déterminant l'état : 1 = actuelle, 2 et 3 = pas appliqué (sous différents modes)

    Parce qu'en fait je me vois mal créer un champ [EstPréconisé] comme tu le dis parce que ça voudrait dire que je vais m'amuser à cocher 1500 cases... en doublon avec mon champ C

  3. #23
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 777
    Points : 58 179
    Points
    58 179
    Billets dans le blog
    42
    Par défaut
    bonjour,

    Citation Envoyé par marie.l Voir le message
    Et il n'est pas possible de plutôt mettre un champ du type

    voui, bien entendu. Tu as essayé ? ça donne quoi ?

  4. #24
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 28
    Points : 15
    Points
    15
    Par défaut
    Il me met " Erreur d'exécution '424': Objet requis

    Alors il faut peut être que j'ajoute quelque part dans la requête d'où sort le champ? Mais il fait partie de la même table que mon champ A

    Je te remets mon code si ça peut servir

    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
    Public Function multipli(NumPosteSiteRisque As Variant) As Double
    Dim db As Database
    Dim rst As DAO.Recordset
    Dim strSQL As String
    Dim resultat As Double
     
    
    Set db = CurrentDb
    strSQL = "SELECT Corr_Type.Valeur FROM [...] INNER JOIN Risque_Correction_Poste ON Risque_Correction.NumRisqueCorr = Risque_Correction_Poste.NumRisqueCorr WHERE Risque_Correction_Poste.NumPosteSiteRisque=" & NumPosteSiteRisque And Risque_Correction_Poste.EtatCorr = 1
    resultat = 1#
    
    Set rst = db.OpenRecordset(strSQL)
     
    If rst.EOF Then 'la requête ne renvoit aucun enregistrement
        Exit Function
    Else
        rst.MoveFirst
        While Not rst.EOF
            resultat = resultat * rst.Fields(0) 'calcul
            rst.MoveNext
        Wend
    End If
     
    multipli = resultat
    rst.Close
    Set rst = Nothing

  5. #25
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 777
    Points : 58 179
    Points
    58 179
    Billets dans le blog
    42
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSQL = "SELECT Corr_Type.Valeur FROM [...]
    euhh j'espère que tu auras compris que les 3 points ... c'était pour gagner du temps dans la rédaction de mes messages

    En reprenant la requête complète du message #11, ça devrait donner


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSQL = "SELECT Corr_Type.Valeur FROM ((Corr_Type INNER JOIN Correction ON Corr_Type.TypeCorr = Correction.TypeCorr)INNER JOIN Risque_Correction ON Correction.NumCorr = Risque_Correction.NumCorr)INNER JOIN Risque_Correction_Poste ON Risque_Correction.NumRisqueCorr = Risque_Correction_Poste.NumRisqueCorr WHERE Risque_Correction_Poste.NumPosteSiteRisque=" & NumPosteSiteRisque & " AND Risque_Correction_Poste.EtatCorr = 1;"
    enfin j'espère

    sinon,
    Citation Envoyé par marie.l
    J'ai essayé d'insérer le Debug.Print mais soit je ne l'ai pas mis au bon endroit, soit ça n'a rien changé.
    juste après la définition de la chaîne strSQL. L'affichage se faisant dans la "fenêtre d'exécution" (raccourci CTRL+G je crois).

  6. #26
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 28
    Points : 15
    Points
    15
    Par défaut
    Bonjour

    Débutante mais quand même... bien sûr que les points de suspension je les ai utilisés pour raccourcir et qu'ils n'étaient pas intégrés à ma chaîne.

    Bon, alors là ça marche, presque parfait. Sauf que quand c'est préconisé et qu'il n'y a aucune correction cotée en actuelle, il me met une valeur de 0, ce qui ne m'arrange pas, il me faudrait plutôt du 1.

    Et le temps d'exécution est toujours de 30 secondes, mais bon c'est pas trop grave encore.

  7. #27
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 777
    Points : 58 179
    Points
    58 179
    Billets dans le blog
    42
    Par défaut
    bonjour,

    Citation Envoyé par marie.l Voir le message
    Débutante mais quand même... bien sûr que les points de suspension je les ai utilisés pour raccourcir et qu'ils n'étaient pas intégrés à ma chaîne.
    Ok pardon

    Citation Envoyé par marie.l Voir le message
    Sauf que quand c'est préconisé et qu'il n'y a aucune correction cotée en actuelle, il me met une valeur de 0, ce qui ne m'arrange pas, il me faudrait plutôt du 1.
    Ah oui, exact, car dans ce cas on quitte la fonction sans avoir initialisé multipli=1:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If rst.EOF Then 'la requête ne renvoie aucun enregistrement	
        Exit Function
    Finalement, on peut écrire la fonction débarrassée de l’inutile variable intermédiaire (resultat) :
    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
    Public Function multipli(NumPosteSiteRisque As Variant) As Double
    Dim db As Database
    Dim rst As DAO.Recordset
    Dim strSQL As String
     
    Set db = CurrentDb
    strSQL = "SELECT Corr_Type.Valeur FROM ((Corr_Type INNER JOIN Correction ON Corr_Type.TypeCorr = Correction.TypeCorr)INNER JOIN Risque_Correction ON Correction.NumCorr = Risque_Correction.NumCorr)INNER JOIN Risque_Correction_Poste ON Risque_Correction.NumRisqueCorr = Risque_Correction_Poste.NumRisqueCorr WHERE Risque_Correction_Poste.NumPosteSiteRisque=" & NumPosteSiteRisque & " AND Risque_Correction_Poste.EtatCorr = 1;"
     
    multipli = 1#
     
    Set rst = db.OpenRecordset(strSQL)
     
    If rst.EOF Then 'la requête ne renvoie aucun enregistrement
        Exit Function
    Else
        rst.MoveFirst
        While Not rst.EOF
            multipli = multipli * rst.Fields(0) 'calcul
            rst.MoveNext
        Wend
    End If
     
    rst.Close
    Set rst = Nothing
    End Function
    Citation Envoyé par marie.l Voir le message
    Et le temps d'exécution est toujours de 30 secondes…
    Peut-être en jouant sur les index des champs de la requête strSQL :
    Citation Envoyé par Aide Access
    Indexé… Accélérer l'accès aux données du champ par la création et l'utilisation d'un index.

  8. #28
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 777
    Points : 58 179
    Points
    58 179
    Billets dans le blog
    42
    Par défaut
    on peut aussi quitter la boucle si multipli=0:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ...Else
        rst.MoveFirst
        Do While Not rst.EOF
        multipli = multipli * rst.Fields(0)
        If multipli = 0 Then Exit Do
        rst.MoveNext
        Loop
    End If...

  9. #29
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 28
    Points : 15
    Points
    15
    Par défaut
    Et bien merci beaucoup pour ton aide, tout a l'air de fonctionner, c'est super!
    Et cette fois, pas de petit détail qui se rajoute , c'est résolu pour de bon

  10. #30
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 28
    Points : 15
    Points
    15
    Par défaut
    Argh.......
    Je dois transférer mes données dans un TCD sur excel et il veut pas........
    "Fonction 'multipli' non définie dans l'expression"

  11. #31
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    essaye de rajouter dans ton classeur excel partie vba la référence à ta base

  12. #32
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 28
    Points : 15
    Points
    15
    Par défaut
    Sur le principe je suis pas contre, mais là je manque de quelques connaissances pour réussir à sortir ça... Le vba je n'y avais presque jamais touché avant ça, je sais juste bricoler un peu les macros et après je tatonne beaucoup...
    Si tu pouvais me donner un peu (beaucoup) de détails ça m'aiderait beaucoup.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [VxiR2] Calcul somme regroupée par région
    Par lolymeupy dans le forum Webi
    Réponses: 9
    Dernier message: 20/05/2015, 13h16
  2. [AC-2013] Champs calculé et regroupement Max
    Par guy2004 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 07/02/2015, 12h48
  3. Import, calcul et regroupement.
    Par cyd77 dans le forum Général Python
    Réponses: 2
    Dernier message: 22/07/2011, 17h11
  4. calcul de regroupements?
    Par betauser dans le forum IHM
    Réponses: 2
    Dernier message: 02/02/2011, 09h12
  5. calcul de date sur un regroupement de champ en vb
    Par bazilus dans le forum Access
    Réponses: 1
    Dernier message: 06/10/2006, 13h29

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