Excel affichage requete sur plusieurs onglets

Fermé
Utilisateur anonyme -  
 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!
A voir également:

3 réponses

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
Utilisateur anonyme
 
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
xkristi Messages postés 4336 Date d'inscription   Statut Membre Dernière intervention   564 > Utilisateur anonyme
 
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
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
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
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
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
Utilisateur anonyme
 
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
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
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
Utilisateur anonyme
 
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
keepkool > Utilisateur anonyme
 
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