Excel affichage requete sur plusieurs onglets
Fermé
Utilisateur anonyme
-
keepkool -
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!
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:
- Excel affichage requete sur plusieurs onglets
- Liste déroulante excel - Guide
- Formule moyenne excel plusieurs colonnes - Guide
- Word et excel gratuit - Guide
- Comment trier par ordre alphabétique sur excel - Guide
- Si ou excel - Guide
3 réponses
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.
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.
Bonsoir tout le monde,
J'ai supposé que ton fichier était au format texte.
Si oui, ça devrait t'aller...
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
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
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!
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!
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!
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!
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
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
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!
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.
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?