Je cherche à recopier les données d'un Recordset ADO dont le RecordCount
est à plus de 100 000 dans un fichier Excel. Cela prend un temps hallucinant
pour en copier 100 en remplissant case par case, alors 100 000, je ne
cherche même pas !
J'ai pensé à créer un fichier texte dans lequel je rentrerais toutes les
données en mode texte avec un séparateur quelconque du genre "¤¤", puis à
faire une importation dans Excel. Je n'ai pas encore essayé, mais déjà
est-il possible de faire cette importation avec VB ? Ensuite je pense que ça
va mettre énormément de temps, non ?
Merci de vos réponses,
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
parci
In : , Via écrivissa :
Bonjour à tous !
Je cherche à recopier les données d'un Recordset ADO dont le RecordCount est à plus de 100 000 dans un fichier Excel. Cela prend un temps hallucinant pour en copier 100 en remplissant case par case, alors 100 000, je ne cherche même pas !
Avec la méthode CopyFromRecordset c'est plutôt rapide (avec plus de 100 000 enregistrement il faudra l'appliquer sur au moins 2 feuilles évidemment).
In : uLT4vXfLEHA.3216@tk2msftngp13.phx.gbl,
Via <chew.baka@caramail.com> écrivissa :
Bonjour à tous !
Je cherche à recopier les données d'un Recordset ADO dont le
RecordCount est à plus de 100 000 dans un fichier Excel. Cela prend
un temps hallucinant pour en copier 100 en remplissant case par case,
alors 100 000, je ne cherche même pas !
Avec la méthode CopyFromRecordset c'est plutôt rapide (avec plus de 100
000 enregistrement il faudra l'appliquer sur au moins 2 feuilles
évidemment).
Je cherche à recopier les données d'un Recordset ADO dont le RecordCount est à plus de 100 000 dans un fichier Excel. Cela prend un temps hallucinant pour en copier 100 en remplissant case par case, alors 100 000, je ne cherche même pas !
Avec la méthode CopyFromRecordset c'est plutôt rapide (avec plus de 100 000 enregistrement il faudra l'appliquer sur au moins 2 feuilles évidemment).
Clive Lumb
Si tu crées ton fichier texte avec des entrées entourées de " et séparées par des tabulations (chr$(9))et tu lui donnes un suffixe ".xls", alors tu peut l'ouvrir directement dans Excel. Tu pourras aussi mettre les noms des colonnes en premier ligne sans " si sans espaces.
Ce qui donnera: Nom TAB Prénom TAB Date_Naissance "Dupont" TAB "Marcel" TAB "05/06/1924"
Clive
"Via" a écrit dans le message de news:
Bonjour à tous !
Je cherche à recopier les données d'un Recordset ADO dont le RecordCount est à plus de 100 000 dans un fichier Excel. Cela prend un temps
hallucinant
pour en copier 100 en remplissant case par case, alors 100 000, je ne cherche même pas ! J'ai pensé à créer un fichier texte dans lequel je rentrerais toutes les données en mode texte avec un séparateur quelconque du genre "¤¤", puis à faire une importation dans Excel. Je n'ai pas encore essayé, mais déjà est-il possible de faire cette importation avec VB ? Ensuite je pense que
ça
va mettre énormément de temps, non ? Merci de vos réponses,
Via :)
Si tu crées ton fichier texte avec des entrées entourées de " et séparées
par des tabulations (chr$(9))et tu lui donnes un suffixe ".xls", alors tu
peut l'ouvrir directement dans Excel.
Tu pourras aussi mettre les noms des colonnes en premier ligne sans " si
sans espaces.
Ce qui donnera:
Nom TAB Prénom TAB Date_Naissance
"Dupont" TAB "Marcel" TAB "05/06/1924"
Clive
"Via" <chew.baka@caramail.com> a écrit dans le message de
news:uLT4vXfLEHA.3216@tk2msftngp13.phx.gbl...
Bonjour à tous !
Je cherche à recopier les données d'un Recordset ADO dont le RecordCount
est à plus de 100 000 dans un fichier Excel. Cela prend un temps
hallucinant
pour en copier 100 en remplissant case par case, alors 100 000, je ne
cherche même pas !
J'ai pensé à créer un fichier texte dans lequel je rentrerais toutes les
données en mode texte avec un séparateur quelconque du genre "¤¤", puis à
faire une importation dans Excel. Je n'ai pas encore essayé, mais déjà
est-il possible de faire cette importation avec VB ? Ensuite je pense que
ça
va mettre énormément de temps, non ?
Merci de vos réponses,
Si tu crées ton fichier texte avec des entrées entourées de " et séparées par des tabulations (chr$(9))et tu lui donnes un suffixe ".xls", alors tu peut l'ouvrir directement dans Excel. Tu pourras aussi mettre les noms des colonnes en premier ligne sans " si sans espaces.
Ce qui donnera: Nom TAB Prénom TAB Date_Naissance "Dupont" TAB "Marcel" TAB "05/06/1924"
Clive
"Via" a écrit dans le message de news:
Bonjour à tous !
Je cherche à recopier les données d'un Recordset ADO dont le RecordCount est à plus de 100 000 dans un fichier Excel. Cela prend un temps
hallucinant
pour en copier 100 en remplissant case par case, alors 100 000, je ne cherche même pas ! J'ai pensé à créer un fichier texte dans lequel je rentrerais toutes les données en mode texte avec un séparateur quelconque du genre "¤¤", puis à faire une importation dans Excel. Je n'ai pas encore essayé, mais déjà est-il possible de faire cette importation avec VB ? Ensuite je pense que
ça
va mettre énormément de temps, non ? Merci de vos réponses,
Via :)
Via
Merci pour cette piste. J'ai écrit le code suivant :
Dim Rs As ADODB.Recordset Dim FichierExcel As Workbook
Randomize NomFichier = App.Path & "Test" & CInt(Rnd * 10000) & ".xls" If Not FileExists(NomFichier) Then CreationFichier NomFichier Set FichierExcel = GetObject(NomFichier)
Déjà, ma création de fichier ne marche pas. Comment puis-je créer un fichier Excel correct ? Bref, je repars avec un fichier déjà créé, que j'ouvre avec GetObject. La méthode CopyFromRecordset renvoie l'erreur suivante : Erreur d'exécution '-2147417851 (80010105)': La méthode 'CopyFromRecordset' de l'objet 'Range' a échoué.
Voilà voilà. Je ne suis pas content. Grrrrr. Merci de votre aide,
Via :)
"parci" a écrit dans le message de news:4091171f$0$15674$
In : , Via écrivissa : > Bonjour à tous ! > > Je cherche à recopier les données d'un Recordset ADO dont le > RecordCount est à plus de 100 000 dans un fichier Excel. Cela prend > un temps hallucinant pour en copier 100 en remplissant case par case, > alors 100 000, je ne cherche même pas !
Avec la méthode CopyFromRecordset c'est plutôt rapide (avec plus de 100 000 enregistrement il faudra l'appliquer sur au moins 2 feuilles évidemment).
Merci pour cette piste. J'ai écrit le code suivant :
Dim Rs As ADODB.Recordset
Dim FichierExcel As Workbook
Randomize
NomFichier = App.Path & "Test" & CInt(Rnd * 10000) & ".xls"
If Not FileExists(NomFichier) Then CreationFichier NomFichier
Set FichierExcel = GetObject(NomFichier)
Déjà, ma création de fichier ne marche pas. Comment puis-je créer un
fichier Excel correct ?
Bref, je repars avec un fichier déjà créé, que j'ouvre avec GetObject.
La méthode CopyFromRecordset renvoie l'erreur suivante :
Erreur d'exécution '-2147417851 (80010105)':
La méthode 'CopyFromRecordset' de l'objet 'Range' a échoué.
Voilà voilà. Je ne suis pas content. Grrrrr.
Merci de votre aide,
Via :)
"parci" <invalid@zob.invalid> a écrit dans le message de
news:4091171f$0$15674$626a14ce@news.free.fr...
In : uLT4vXfLEHA.3216@tk2msftngp13.phx.gbl,
Via <chew.baka@caramail.com> écrivissa :
> Bonjour à tous !
>
> Je cherche à recopier les données d'un Recordset ADO dont le
> RecordCount est à plus de 100 000 dans un fichier Excel. Cela prend
> un temps hallucinant pour en copier 100 en remplissant case par case,
> alors 100 000, je ne cherche même pas !
Avec la méthode CopyFromRecordset c'est plutôt rapide (avec plus de 100
000 enregistrement il faudra l'appliquer sur au moins 2 feuilles
évidemment).
Déjà, ma création de fichier ne marche pas. Comment puis-je créer un fichier Excel correct ? Bref, je repars avec un fichier déjà créé, que j'ouvre avec GetObject. La méthode CopyFromRecordset renvoie l'erreur suivante : Erreur d'exécution '-2147417851 (80010105)': La méthode 'CopyFromRecordset' de l'objet 'Range' a échoué.
Voilà voilà. Je ne suis pas content. Grrrrr. Merci de votre aide,
Via :)
"parci" a écrit dans le message de news:4091171f$0$15674$
In : , Via écrivissa : > Bonjour à tous ! > > Je cherche à recopier les données d'un Recordset ADO dont le > RecordCount est à plus de 100 000 dans un fichier Excel. Cela prend > un temps hallucinant pour en copier 100 en remplissant case par case, > alors 100 000, je ne cherche même pas !
Avec la méthode CopyFromRecordset c'est plutôt rapide (avec plus de 100 000 enregistrement il faudra l'appliquer sur au moins 2 feuilles évidemment).
parci
In : #, Via écrivissa :
Merci pour cette piste. J'ai écrit le code suivant :
Dim Rs As ADODB.Recordset Dim FichierExcel As Workbook
Randomize NomFichier = App.Path & "Test" & CInt(Rnd * 10000) & ".xls" If Not FileExists(NomFichier) Then CreationFichier NomFichier Set FichierExcel = GetObject(NomFichier)
Déjà, ma création de fichier ne marche pas. Comment puis-je créer un fichier Excel correct ?
Je ferais quelque chose comme ça : (il faut ajouter une référence aux objets Excel à ton projet)
Sub zaza(Rs As ADODB.Recordset, sFileName As String)
Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet
On Error Resume Next Set xlApp = GetObject(, "Excel.Application") On Error GoTo 0
If xlApp Is Nothing Then Set xlApp = CreateObject("Excel.Application") End If
If xlApp Is Nothing Then Exit Sub End If
' facultatif xlApp.Visible = True
' création d'un nouveau classeur Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets(1)
Dim iCol As Long ' le noms des champs For iCol = 0 To Rs.Fields.Count - 1 xlSheet .Cells(1, iCol + 1).Value = Rs.Fields(iCol).Name Next ' les données xlSheet.Range("A2").CopyFromRecordset Rs
' dans ton cas puisque tu as plus d'enregistrements que de lignes d'une feuille Excel ' ça serait plutôt quelque chose comme ça (non testé):
Dim i As Long Dim lCount As Long
lCount = rs.RecordCount
For i = 1 To lCount Step 65000 Set xlSheet = xlBook.Worksheets.Add rs.MoveFirst rs.Move , i For iCol = 0 To Rs.Fields.Count - 1 xlSheet .Cells(1, iCol + 1).Value = Rs.Fields(iCol).Name Next xlSheet.Range("A2").CopyFromRecordset rs, 65000 Next i
' il faudrait vérifier que sFileName n'est pas actuellement ouvert par Excel ' si on utilise une instance en cours avec GetObject
If FileExists(sFileName) Then Kill sFileName End If
xlBook.SaveAs sFileName
xlApp.Quit
Set xlSheet = Nothing Set xlBook = Nothing Set xlApp = Nothing
End Sub
In : #kGwD7oLEHA.2500@TK2MSFTNGP12.phx.gbl,
Via <chew.baka@caramail.com> écrivissa :
Merci pour cette piste. J'ai écrit le code suivant :
Dim Rs As ADODB.Recordset
Dim FichierExcel As Workbook
Randomize
NomFichier = App.Path & "Test" & CInt(Rnd * 10000) & ".xls"
If Not FileExists(NomFichier) Then CreationFichier NomFichier
Set FichierExcel = GetObject(NomFichier)
Déjà, ma création de fichier ne marche pas. Comment puis-je créer un
fichier Excel correct ?
Je ferais quelque chose comme ça :
(il faut ajouter une référence aux objets Excel à ton projet)
Sub zaza(Rs As ADODB.Recordset, sFileName As String)
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
On Error Resume Next
Set xlApp = GetObject(, "Excel.Application")
On Error GoTo 0
If xlApp Is Nothing Then
Set xlApp = CreateObject("Excel.Application")
End If
If xlApp Is Nothing Then
Exit Sub
End If
' facultatif
xlApp.Visible = True
' création d'un nouveau classeur
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Worksheets(1)
Dim iCol As Long
' le noms des champs
For iCol = 0 To Rs.Fields.Count - 1
xlSheet .Cells(1, iCol + 1).Value = Rs.Fields(iCol).Name
Next
' les données
xlSheet.Range("A2").CopyFromRecordset Rs
' dans ton cas puisque tu as plus d'enregistrements que de lignes d'une
feuille Excel
' ça serait plutôt quelque chose comme ça (non testé):
Dim i As Long
Dim lCount As Long
lCount = rs.RecordCount
For i = 1 To lCount Step 65000
Set xlSheet = xlBook.Worksheets.Add
rs.MoveFirst
rs.Move , i
For iCol = 0 To Rs.Fields.Count - 1
xlSheet .Cells(1, iCol + 1).Value = Rs.Fields(iCol).Name
Next
xlSheet.Range("A2").CopyFromRecordset rs, 65000
Next i
' il faudrait vérifier que sFileName n'est pas actuellement ouvert par
Excel
' si on utilise une instance en cours avec GetObject
If FileExists(sFileName) Then
Kill sFileName
End If
xlBook.SaveAs sFileName
xlApp.Quit
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing
Déjà, ma création de fichier ne marche pas. Comment puis-je créer un fichier Excel correct ?
Je ferais quelque chose comme ça : (il faut ajouter une référence aux objets Excel à ton projet)
Sub zaza(Rs As ADODB.Recordset, sFileName As String)
Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet
On Error Resume Next Set xlApp = GetObject(, "Excel.Application") On Error GoTo 0
If xlApp Is Nothing Then Set xlApp = CreateObject("Excel.Application") End If
If xlApp Is Nothing Then Exit Sub End If
' facultatif xlApp.Visible = True
' création d'un nouveau classeur Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets(1)
Dim iCol As Long ' le noms des champs For iCol = 0 To Rs.Fields.Count - 1 xlSheet .Cells(1, iCol + 1).Value = Rs.Fields(iCol).Name Next ' les données xlSheet.Range("A2").CopyFromRecordset Rs
' dans ton cas puisque tu as plus d'enregistrements que de lignes d'une feuille Excel ' ça serait plutôt quelque chose comme ça (non testé):
Dim i As Long Dim lCount As Long
lCount = rs.RecordCount
For i = 1 To lCount Step 65000 Set xlSheet = xlBook.Worksheets.Add rs.MoveFirst rs.Move , i For iCol = 0 To Rs.Fields.Count - 1 xlSheet .Cells(1, iCol + 1).Value = Rs.Fields(iCol).Name Next xlSheet.Range("A2").CopyFromRecordset rs, 65000 Next i
' il faudrait vérifier que sFileName n'est pas actuellement ouvert par Excel ' si on utilise une instance en cours avec GetObject
If FileExists(sFileName) Then Kill sFileName End If
xlBook.SaveAs sFileName
xlApp.Quit
Set xlSheet = Nothing Set xlBook = Nothing Set xlApp = Nothing