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 :

[VBA] Résultats d'une requête sur deux feuilles


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier Avatar de PtitGénie
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2007
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2007
    Messages : 231
    Points : 88
    Points
    88
    Par défaut [VBA] Résultats d'une requête sur deux feuilles
    Bonjour à tous !

    Voilà mon problème...
    J'extrait des données d'une base de données en utilisant :
    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
     With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
            "ODBC;DSN=HORIZONSQL;UID=BIDULE;PWD=;DBQ=TRUCSQL;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=F;BAM=IfAllSuccessful;" _
            ), Array("MTS=F;MDI=F;CSR=F;FWC=F;PFC=10;TLO=0;")), Destination:=Range("A2"))
            .CommandText = requete
            .Name = "Lancer la requête à partir de TRUCSQL"
            .FieldNames = False
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .BackgroundQuery = True
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = True
            .SaveData = True
            .AdjustColumnWidth = False
            .RefreshPeriod = 0
            .PreserveColumnInfo = True
            .Refresh BackgroundQuery:=False
        End With
    Cela fonctionne parfaitement, sauf quand le nombre de lignes est supérieur au nombre de lignes possibles sur Excel (environ 65 000). Il affiche sur la feuille les 65 000, mais bien sûr les autres sont perdues...

    Comment "lui dire" qu'il passe sur une deuxième feuille lorsqu'il dépasse 65 000 lignes ? Si cela est possible...

    Merci beaucoup d'avance !

  2. #2
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Octobre 2008
    Messages : 273
    Points : 323
    Points
    323
    Par défaut
    Bonjour,
    Je n'ai pas de solution "miracle" mais une solution pourrait être de faire un order by dans ta requête.
    Elle est alors importée sur ta 1ère feuille.
    Tu va lire la valeur à la 65536ème ligne et si elle est <> "", tu relance la même requête avec un where ta valeur > à la valeur de la 65536ème ligne.

    Et tu boucle tant que la ligne 65536 est <> "".

    2ème solution => passer sur xl2007

  3. #3
    Membre régulier Avatar de PtitGénie
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2007
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2007
    Messages : 231
    Points : 88
    Points
    88
    Par défaut
    Merci de ta réponse !

    Le problème c'est que c'est une macro/requête qui est destinée à être relancée souvent ! Donc la valeur de la 65 000èe ligne ne sera pas identique à chaque fois... :/

  4. #4
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Octobre 2008
    Messages : 273
    Points : 323
    Points
    323
    Par défaut
    J'avais bien compris ça.

    Il faut bien sûr que tu réinitialise tes feuilles à chaque lancement de requête.

    En résumé :
    1-Tu lance ta première requête sans condition dans le where avec un order by.
    2-Tu teste si la 65000è ligne et vide
    a) oui : end sub()
    b) non : tu relance la même requête avec en condition => where toto > dernière valeur de l'onglet précédent.

    3-tu boucle sur 2- tant que la 65000è cellule n'est pas vide.

    4- au début de ta macro, tu supprime les feuilles crées précédement et tu recommence au 1-

  5. #5
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Bonjour à tous,

    oOVaveOo, petite restriction à ta technique.
    cela ne fonctionne que si la clause order by présente une clé unique.
    En cas de doublons, le split ne fonctionnera pas correctement.

    On a souvent une clé unique mais ce n'est pas systématique.
    mais généralement il doit être possible d'en constituer une en combinant plusieurs éléments.

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonsoir

    tu peux utilser le modèle ADO comme indiqué dans le deuxième exemple de ce lien :

    Comment importer dans Excel des fichiers txt contenant plus de 65536 lignes ?

    Il s'agit ici d'un fichier txt mais il suffit d'adapter la connection à ta base de données.


    bonne soirée
    michel

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 27/03/2013, 15h29
  2. Résultat d'une requête sur deux feuilles
    Par PtitGénie dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/04/2009, 11h52
  3. [MySQL] Affichage des résultats d'une requête sur plusieurs pages
    Par leloup84 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/10/2006, 13h24
  4. [SQL] Afficher les résultats d'une requête sur plusieurs pages
    Par mealtone dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 07/09/2006, 13h20

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