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

Macros et VBA Excel Discussion :

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


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 5
    Points : 5
    Points
    5
    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 émérite Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 501
    Points : 2 297
    Points
    2 297
    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, 18h30
  2. Stockage de valeurs et écriture dans fichier Excel
    Par Quent91 dans le forum LabVIEW
    Réponses: 39
    Dernier message: 12/05/2017, 12h54
  3. Requête sql avec variable dans cellule excel
    Par MENOT72 dans le forum SQL
    Réponses: 2
    Dernier message: 09/09/2011, 18h33
  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, 11h57
  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, 16h25

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