Excel affichage requete sur plusieurs onglets

Fermé
youpiya -  
 keepkool -
Bonjour,

J'ai un probleme sur excel, merci par avance pour votre aide:

Pourriez-vous m'indiquer svp comment afficher le résultat d'une requête sur plusieurs onglets?

J'arrive en effet à executer une requête oracle (par le menu "Donnée externe" de excel) et à retrouner le résultat sur un onglet excel. Le probleme est que le maximum de ligne affichables sur un meme onglet est LIMIté à 65000 lignes environ.

Donc j'aimerai prévoir l'affichage d'une requête dont le nombre de résultat est superieur à 65000, et ce, de façon automatique, en faisant afficher les 65000 premiers resultats sur un premier onglet onglet_1, puis la suite des resultats dans onglet_2 (de 65001 à 130000), puis si ça ne suffit pas, que la suite s'affiche dans onglet_3 etc

Merci beaucoup pour votre aide!
Configuration: Windows XP
Internet Explorer 6.0

3 réponses

  1. xkristi Messages postés 4336 Date d'inscription   Statut Membre Dernière intervention   564
     
    Bonjour !
    Je ne crois pas que ce soit possible !
    Déjà Excel te ramènera les 65536 premmiers enregistrements en te prévenant que c'est tronqué

    il faut que tu modifies ta requête pour qu'elle ramène moins de données.
    - soit tu l'arrêtes quand tu as traité les 65536 premiers enregistrements critère < à XXX
    et tu remets sur une autre feuille la même requète avec critère > yyyy

    - soit tu peux cumuler un certain nombre de champs comme la qté ou le CA ... si ce sont des lignes détail.
    0
    1. youpiya
       
      Bonjour,

      merci pour ta réponse!

      effectivement j'avais contourné le probleme en tronquant la requete d'autant de 'morceaux' de 65000 enregistrements que nécessaire, mais je souhaitais automatiser cela, afin de pouvoir le lancer sans connaitre par avance le nombre d'enregistrements en retour.

      Est-ce possible par VB? Auquel cas pourriez-vous m'indiquer comment réaliser cela?

      Merci!
      0
      1. xkristi Messages postés 4336 Date d'inscription   Statut Membre Dernière intervention   564 > youpiya
         
        Dans Excel

        outils , macro , nouvelle macro

        avant toute chose pense à effacer les données obtenues (suppr , si tu as un tableau croisé dynamique)
        par la précédente requête
        ensuite fais ce que tu fais habituellement pour ramener tes données dans excel
        puis tu arrêtes ta macro

        ensuite on pourra rajouter un bouton : actualiser qui fera tout automatiquement.

        si cela ne fonctionne pas
        tu pourras mettre le fichier
        en laissant seulement le titre des colonnes et 5 lignes de données
        efface ce qui est confidentiel (nom, adresse)
        sur cjoint.com et nous donner le lien
        pour que l'on puisse voir.

        0
      2. youpiya > xkristi Messages postés 4336 Date d'inscription   Statut Membre Dernière intervention  
         
        Bonjour,

        si je comprend bien tu m'a expliqué comment automatiser la requete et son raffraichissement, mais cela ne résoudrait pas mon probleme qui est l'affichage sur plusieurs onglets, au cas où le nombre d'enregistrement est superieur à 65000 ...

        Qu'en penses-tu?
        0
  2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonsoir tout le monde,

    J'ai supposé que ton fichier était au format texte.
    Si oui, ça devrait t'aller...

    Sub LireFichier()
        Dim i As Long, numfich As Long
        Dim ligne As String
        ' Ouvre le fichier en lecture
        numfich = FreeFile
        Open "C:\tmp\Listing.txt" For Input As #numfich
        ' Effectue la boucle jusqu'à la fin du fichier
        Do While Not EOF(1)
            Line Input #1, ligne
            i = i + 1
            Range("A" & i).Value = ligne
            ' convertir (séparateurs activés : tabulation, virgule, poit-virgule)
            Range("A" & i).TextToColumns Destination:=Range("A" & i), DataType:=xlDelimited, _
                TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
                Semicolon:=True, Comma:=True, Space:=False, Other:=False, FieldInfo:= _
                Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1)), TrailingMinusNumbers:= _
                True
            If i = 65000 Then
                Sheets.Add after:=Worksheets(Worksheets.Count)
                i = 0
            End If
        Loop
        ' Ferme le fichier
        Close #numfich
        
    End Sub


    et le fichier avec la macro : http://www.cijoint.fr/cjlink.php?file=cj200803/cijaHb61hU.xls

    Adapte en fonction de ton besoin réel
    eric
    0
    1. youpiya
       
      Merci Eriiic pour ta réponse,

      effectivement ta solution se rapproche de ce que je recherche , cependant il ne s'agit pas d'un fichier texte, mais d'une requete vers une vue ORACLE, que j'ai créée et stockée dans 'Mes sources de données'.

      Saurais-tu comment adapter le code que tu m'a proposé pour l'execution d'une requete plutôt que pour l'ouverture d'un fichier plat?

      Merci par avance!
      0
    2. youpiya
       
      Petite précision:

      lorsque j'enregistre la macro correspondant à l'execution et l'affichage de ma requete ORACLE, le contenu de la macro est :



      Sub Macro_requete()
      '
      '
      With ActiveSheet.QueryTables.Add(Connection:= _
      "OLEDB;Provider=PPPPPPPP;Password=XXXXXX;User ID=user1;Data Source=DEVX", _
      Destination:=Range("A1"))
      .CommandType = xlCmdTable
      .CommandText = Array("""DEV1"".""vue_oracle""")
      .Name = "DEVX (Par défaut) vue_oracle"
      .FieldNames = True
      .RowNumbers = False
      .FillAdjacentFormulas = False
      .PreserveFormatting = True
      .RefreshOnFileOpen = False
      .BackgroundQuery = True
      .RefreshStyle = xlOverwriteCells
      .SavePassword = True
      .SaveData = True
      .AdjustColumnWidth = True
      .RefreshPeriod = 0
      .PreserveColumnInfo = True
      .SourceConnectionFile = _
      "D:\Documents and Settings\My Documents\Mes sources de données\DEVX (Par défaut) vue_oracle.odc"
      .Refresh BackgroundQuery:=False
      End With
      End Sub


      J'aimerai à présent pouvoir ajouter dans ce code l'équivalent du LOOP et du
      Sheets.Add after:=Worksheets(Worksheets.Count), adapté pour une requete ORACLE et non plus pour un fichier plat. (Notamment comment traduit-on EndOfFile pour une table/vue?

      Merci d'avance pour votre aide!
      0
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonsoir,

    alors là aucune idée...
    Je ne suis pas du tout spécialiste des interrogations de bases.
    Jette un oeil dans la doc si en destination tu ne peux pas plutôt spécifier un fichier ouvert en écriture.
    Ou attends un spécialiste mais le mieux est peut-être de poser une nouvelle question.
    Désolé
    eric
    0
    1. youpiya
       
      Merci pour ton aide Eriiic,

      je vais poursuivre mes recherches, par contre , mes vues étant déjà créées, je ne pense pas passer par un fichier plat, mais plutot réutiliser mes vues (il y en a beaucoup ...)

      Merci beaucoup en tout cas!
      0
      1. keepkool > youpiya
         
        Bonjour,

        J'ai le meme probleme que toi à savoir afficher le resultat d'une requete sur plusieurs onglets. J'aimerais savoir si tu as reussi à le faire et comment ?


        Merci de ton aide
        0