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

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    mars 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2011
    Messages : 4
    Points : 3
    Points
    3

    Par défaut Requête SQL avec écriture dans fichier Excel = trop long

    Bonjour tout le monde !
    J'aimerais solliciter votre aide pour tenter d'optimiser mon code.

    BESOIN :
    Je dois a partir de plusieurs requetes SQL récupérer des données issu d'un fichier excel pour les retranscrire dans un autre fichier excel... Données brutes > Données mises en formes

    EXISTANT:
    J'ai un fichier excel avec 30 colonnes et un maximum de 400 lignes en gros sur une année.
    J'effectue des requetes SQL pour récupérer des informations sur ces 400 lignes (compter le nombre d’occurrence basées sur certains critères, etc ...
    Ex. Sur ces 400 lignes j'ai pour le mois de janvier 5 ventes de l'article A, 3 de l'article B ... en février 2 vente de l'article A, 0 de l'article B et 1 de l'article C ... etc

    Je compte donc le nombre de ventes de l'article A avec comme critère "JANVIER", puis "FEVRIER" etc ... et ces 5 lignes je les regroupes en une seule pour obtenir le tableau suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MOIS      | ARTICLE | QTE
    JANVIER | ARTICLE A | QTE
    JANVIER | ARTICLE B | QTE
    FEVRIER | ARTICLE A | QTE
    FEVRIER | ARTICLE C | QTE
    Seulement voilà ... quand je fais ça je boucle sur mes réulstats SQL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    sql = "SELECT * FROM [TEST$] WHERE MOIS = 1"
    Set rs = cn.Execute(sql)
    i = 2
    Do
      Sheets("TEST").Range("A" & i).Value = rs(0)
      [...]
      rs.Movenext
    Loop Until rs.EOF
    [...]
    Et le fait de mettre les données en retour dans les cellules cela prend un temps inconsidérable.


    HELP:

    J'ai certainement des lacunes en VBA du coup je vous solicite pour connaitre finalement une méthode rapide et fiable pour effectuer ce type d'opération.
    J'avais opter pour une solution alternative sans SQL ... avec des =SOMMEPROD() ... etc mais pareil je me retrouvais avec des formules partout qui alourdissait considérablement le fichier et son traitement !
    Comme certain produit ne sont pas toujours vendu le mois donnée ... j'étais partit sur :
    Lister tous les articles en ventes par mois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    JANVIER | ARTICLE A
    JANVIER | ARTICLE B
    JANVIER | ARTICLE C
    JANVIER | ARTICLE D
    FEVRIER | ARTICLE A
    FEVRIER | ARTICLE B
    FEVRIER | ARTICLE C
    FEVRIER | ARTICLE D
    MARS     | ARTICLE A
    MARS     | ARTICLE B
    ...          | ...
    Ajouter sur chaque ligne les formules excel SOMMEPROD etc ... et supprimer ensuite les ligne donc les ventes sont = 0 pour n'avoir que les articles vendu ! ...

    C'est lourd et très complexe à gérer ... je suis donc partit sur du SQL

    Merci pour votre aide sur ce sujet épineux !
    Excellente journée

  2. #2
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    juin 2019
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : juin 2019
    Messages : 135
    Points : 223
    Points
    223

    Par défaut

    bonjour,
    voila qui devrait allé plus vite!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Sheets("TEST").Range("A2").CopyFromRecordset cn.Execute(Sql)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test()
    With Sheets("Resultat")
        .Range(.Range("A2"), .Cells(.Rows.Count, "C").End(xlUp)).Clear
    End With
    With CreateObject("AdoDB.Connection")
        .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=YES;"""
          Sql = "Select MOIS,ARTICLE,sum(Nb) as QTS from [TEST$] group by  MOIS,ARTICLE"
        Sheets("Resultat").Range("A2").CopyFromRecordset .Execute(Sql)
        .Close
    End With
    End Sub
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. [2008R2] Requéte SQL avec condition dans une select & champ calculé
    Par win_ubuntu dans le forum Développement
    Réponses: 0
    Dernier message: 12/05/2019, 17h30
  2. Stockage de valeurs et écriture dans fichier Excel
    Par Quent91 dans le forum LabVIEW
    Réponses: 39
    Dernier message: 12/05/2017, 11h54
  3. Requête sql avec variable dans cellule excel
    Par MENOT72 dans le forum SQL
    Réponses: 2
    Dernier message: 09/09/2011, 17h33
  4. [Access] Problème dans une requête SQL avec INNER JOIN ?
    Par bds2006 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/06/2006, 10h57
  5. Problème dans une requête SQL avec AS et ON ?
    Par bds2006 dans le forum Bases de données
    Réponses: 9
    Dernier message: 26/06/2006, 15h25

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