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 :

Calculs complexes sur une table Access


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 14
    Par défaut Calculs complexes sur une table Access
    Bonjour!

    J'ai quelques soucis pour générer un rapport...

    Je dispose de 2 données sur des produits. Ces données sont contenues dans une table avec une donnée1 et une donnée2. Je souhaiterai calculer le rapport de donnée2/donnée1 et obtenir le minimum sur la période puis le maximum sur la période et enfin la moyenne sur la période. Le tout pour chaque produit différent...

    Mon soucis c'est que jusque là pour ce genre de problèmes je copiais le tout dans une feuille Excel et effectuait les calculs ce que je ne dois pas faire là... Il faut que les calculs soient fait sous Access et si possible ne pas générer de nouvelle colonne...

    Voila ce que j'ai tenté jusque là:

    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
     
     
    While i <> 25
     
    i = 1
     
    SQL1 = "SELECT MIN([Table].[Donnee2]/[Table].[Donnee1]) AS min FROM [Table] WHERE CodeProduit = " & i
    SQL2 = "SELECT MAX([Table].[Donnee2]/[Table].[Donnee1]) AS max FROM [Table] WHERE CodeProduit = " & i
    SQL3 = "SELECT AVG([Table].[Donnee2]/[Table].[Donnee1]) AS avg FROM [Table] WHERE CodeProduit = " & i
     
     
    Cells(i, 1).Value = min
    Cells(i, 2).Value = max
    Cells(i, 3).Value = avg
     
    i=i+1
     
    Wend

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 84
    Par défaut
    Bonjour,

    Tu a masquer volontairement l’exécution de tes requêtes?
    (set rs = currentDB.openrecordset(SQLx)

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 14
    Par défaut
    Citation Envoyé par gillou13 Voir le message
    Bonjour,

    Tu a masquer volontairement l’exécution de tes requêtes?
    (set rs = currentDB.openrecordset(SQLx)
    Elles sont présentes dans mon code originel mais en mettant en forme j'ai du les supprimer sans faire attention.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Ce serait bien de donner toutes les informations, car une table Access n'a rien à voir avec une feuille Excel, des instructions comme Cell n'existent pas sous Access.

    En général on ne stocke pas de calculs, on utiliser les requêtes pour cela.

    Merci donc de donner le code complet et plus d'informations.

    Philippe

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 14
    Par défaut
    Citation Envoyé par Philippe JOCHMANS Voir le message
    Bonjour

    Ce serait bien de donner toutes les informations, car une table Access n'a rien à voir avec une feuille Excel, des instructions comme Cell n'existent pas sous Access.

    En général on ne stocke pas de calculs, on utiliser les requêtes pour cela.

    Merci donc de donner le code complet et plus d'informations.

    Philippe
    Bonjour,

    En fait les Cells concernent la feuille Excel ou je souhaite voir aboutir les résultats des requêtes Access.

    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
    Sub Report()
     
    Dim DB As DAO.Database
     
    'Open acess database
    chemin_BD = "X:\A\B.mdb"
    Set DB = DAO.OpenDatabase(chemin_BD, False, False, "MS Access;PWD=X")
     
    'Calculation of the start date
    xlSheet.Range("F4").Value = d
    xlSheet.Range("F3").Value = Format(d - Period, "mm/dd/yyyy")
     
    'SQL query
    SQL = "SELECT [Table1].[Product ID], [Table1].[Product Name], " & _
        "[Table2].[Donnee1], [Table2].[Donnee2], [Table2].[Date] " & _
        "FROM [Table1], [Table2] WHERE [Table1].[Product ID] = [Table2].[Product ID] AND [Table2].[Date] >=#" & Format(d, "mm/dd/yyyy") & "# " & _
    "AND [Table2].[Date] <= #" & Format(d - Period, "mm/dd/yyyy") & "# " & _
            "ORDER BY [Table1].[Product ID] ASC, [Table2].[Date] ASC"
     
    Set rec = DB.OpenRecordset(SQL)
     
    i=1
     
    While xlSheet.Cells(i, 1).Value <> ""
     
    'SQL query test
    SQL1 = "SELECT MIN([Table2].[Donnee2]/(2 * [Table2].[Donnee1])) AS min FROM [Table2] WHERE [Table1].[Product ID] =" & i
    Set rec = DB.OpenRecordset(SQL1)
    SQL2 = "SELECT MAX([Table2].[Donnee2]/(2*[Table2].[Donnee1])) AS max FROM [Table] WHERE [Table1].[Product ID] =" & i
    Set rec = DB.OpenRecordset(SQL2)
    SQL3 = "SELECT AVG([Table2].[Donnee2]/(2*[Table2].[Donnee1])) AS avg FROM [Table] WHERE [Table1].[Product ID] =" & i
    Set rec = DB.OpenRecordset(SQL3)
     
    rec.MoveLast
    rec.MoveFirst
     
    If rec.Fields("Product ID").Value = xlSheet.Cells(i,2).Value And rec.Fields("Date").Value = Cells(i, 1).Value Then
     
    xlSheet.Cells(i, 8).Value = rec.Fields("min").Value
    xlSheet.Cells(i, 9).Value = rec.Fields("max").Value
    xlSheet.Cells(i, 10).Value = rec.Fields("avg").Value
     
     
    i = i + 1
     
    Else
     
    rec.Movenext
     
    End If
     
    Wend
     
    End Sub
    Voila le code.

    Pour la logique donc il s'agit pour un produit i de faire le calclul : (Donnee2/(2*Donnee1)) pour une période donnée (grace a Period) puis de renseigner sur la fiche Excel (xlSheet) le minimum, le maximum et la moyenne de ce calcul avant de passer au produit i+1...

    J'espère que je suis assez clair =S

Discussions similaires

  1. recherche user friendly sur une table access
    Par vanessa2303 dans le forum IHM
    Réponses: 1
    Dernier message: 01/07/2008, 07h05
  2. Détecter un événement sur une table Access
    Par Fred 57220 dans le forum Bases de données
    Réponses: 0
    Dernier message: 08/06/2008, 20h36
  3. Requête SQL via les composants ADO sur une Table Access 97
    Par Didier100 dans le forum Bases de données
    Réponses: 9
    Dernier message: 21/12/2007, 14h43
  4. Tri complexe sur une table
    Par fwdavy dans le forum Requêtes
    Réponses: 1
    Dernier message: 15/11/2007, 23h40
  5. Copie enregistrement sur une table access
    Par sgai2 dans le forum Access
    Réponses: 2
    Dernier message: 24/03/2006, 13h42

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