Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

récupérer 65536 lignes x 30 colonnes dans la zone tampon du copié et l' envoyer dans un classeur

8 réponses
Avatar
fetnat
Bonjour,

Le résultat d'un calcul dans un logiciel (hors office) apparait sous la
forme CSV.
Le nombre de lignes de ce résultat est variable mais il dépasse 65536.
Il y a une trentaine de colonnes.

Si je fais un copié-collé, le copié se passe bien mais le collé plante
tout, le logiciel et Excel.

Je rêve d'une automatisation qui récupérerait le tableau de données,
mais je bute sur la première marche.

Comment récupérer 65536 lignes x 30 colonnes qui se trouvent dans la
zone tampon du copié manuel et l'envoyer dans un classeur ?

je voulais m'inspirer de cette macro qui garde les 5 dernières lignes
d'un fichier texte (source Excelabo) :

Sub test()

Dim file_name As String
Dim file_length As Long
Dim fnum As Integer
Dim bytes() As Byte
Dim txt As String
Dim i As Integer


file_name = "F:DocFloessai.txt"
file_length = FileLen(file_name)
f2 = 1000
f1 = file_length - f2

fnum = FreeFile


Open file_name For Binary As #fnum

ReDim bytes(1 To f2)
Get #fnum, f1 + 1, bytes
Close fnum

' Afficher résultats
For i = 1 To f2
txt = txt & Chr(Format$(bytes(i)))
Next i
Debug.Print txt

End Sub


Que dois-je mettre à la place de "F:DocFloessai.txt" pour attraper la
zone ? Faut-il la copier dans un tableau ?

f1 deviendra 65536 et puis beaucoup de tatonnements suivront...

Je n'arrive déjà pas à trouver le nom du buffer pour chercher dans les
archives.

Merci pour l'aide

fetnat

8 réponses

Avatar
MichDenis
Pour n'importer que les 65536 premières lignes d'un fichier .csv dans une feuille excel :

Tu dois ajouter à ton projet la bibliothèque suivante :
"Microsoft Activex Data Objects librairy 2.x"
Fenêtre de l'éditeur de code / barre des menus / outils / références/

'-------------------------------------------
Sub MaRequête1()

Dim Conn As ADODB.Connection, Rst As New ADODB.Recordset
Dim Requete As String, Rg As Range

Set Conn = New ADODB.Connection
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:;" & _ ' Chemin où est le fichier seulement
"Extended Properties=""text;HDR=No;FMTÞlimited"""
Requete = "SELECT TOP 65536 * From test.csv" 'nom du fichier seulement

Rst.Open Requete, Conn, adOpenForwardOnly, adLockOptimistic

'Copie des données vers la "Feuil2") nom à adapter ...
Set Rg = Worksheets("Feuil2").Range("A1")
Rg.CopyFromRecordset Rst
Rst.Close: Conn.Close
Set Rg = Nothing
End Sub
'------------------------------------------------




"fetnat" a écrit dans le message de news:
eudT73%
Bonjour,

Le résultat d'un calcul dans un logiciel (hors office) apparait sous la
forme CSV.
Le nombre de lignes de ce résultat est variable mais il dépasse 65536.
Il y a une trentaine de colonnes.

Si je fais un copié-collé, le copié se passe bien mais le collé plante
tout, le logiciel et Excel.

Je rêve d'une automatisation qui récupérerait le tableau de données,
mais je bute sur la première marche.

Comment récupérer 65536 lignes x 30 colonnes qui se trouvent dans la
zone tampon du copié manuel et l'envoyer dans un classeur ?

je voulais m'inspirer de cette macro qui garde les 5 dernières lignes
d'un fichier texte (source Excelabo) :

Sub test()

Dim file_name As String
Dim file_length As Long
Dim fnum As Integer
Dim bytes() As Byte
Dim txt As String
Dim i As Integer


file_name = "F:DocFloessai.txt"
file_length = FileLen(file_name)
f2 = 1000
f1 = file_length - f2

fnum = FreeFile


Open file_name For Binary As #fnum

ReDim bytes(1 To f2)
Get #fnum, f1 + 1, bytes
Close fnum

' Afficher résultats
For i = 1 To f2
txt = txt & Chr(Format$(bytes(i)))
Next i
Debug.Print txt

End Sub


Que dois-je mettre à la place de "F:DocFloessai.txt" pour attraper la
zone ? Faut-il la copier dans un tableau ?

f1 deviendra 65536 et puis beaucoup de tatonnements suivront...

Je n'arrive déjà pas à trouver le nom du buffer pour chercher dans les
archives.

Merci pour l'aide

fetnat
Avatar
fetnat
Bonjour MichDenis,

Je te remercie pour ton aide.

Je fais un copié manuellement des données dans un logiciel AB (le
résulat d'un calcul). Ces données ont un format CSV, mais pour le moment
les données sont dans le buffer du copié-collé.

Si je fais collé dans Excel, ce dernier se plante car j'ai 115 000 lignes.
Si j'utilise la fonction d'extraction du logiciel AB vers un fichier
CSV, c'est le logiciel AB qui se plante.

Tant que j'envoie les données dans le buffer, je garde la main et les
données sont dans le buffer.
Comment modifier ta sub pour collé les 65536 premières lignes du buffer,
dans un fichier csv ou bien dans un classeur Excel ?

Je suis désolé de ne pas avoir été plus clair dans mes explications.

Cordialement

fetnat

Pour n'importer que les 65536 premières lignes d'un fichier .csv dans une feuille excel :

Tu dois ajouter à ton projet la bibliothèque suivante :
"Microsoft Activex Data Objects librairy 2.x"
Fenêtre de l'éditeur de code / barre des menus / outils / références/

'-------------------------------------------
Sub MaRequête1()

Dim Conn As ADODB.Connection, Rst As New ADODB.Recordset
Dim Requete As String, Rg As Range

Set Conn = New ADODB.Connection
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:;" & _ ' Chemin où est le fichier seulement
"Extended Properties=""text;HDR=No;FMTÞlimited"""
Requete = "SELECT TOP 65536 * From test.csv" 'nom du fichier seulement

Rst.Open Requete, Conn, adOpenForwardOnly, adLockOptimistic

'Copie des données vers la "Feuil2") nom à adapter ...
Set Rg = Worksheets("Feuil2").Range("A1")
Rg.CopyFromRecordset Rst
Rst.Close: Conn.Close
Set Rg = Nothing
End Sub
'------------------------------------------------




"fetnat" a écrit dans le message de news:
eudT73%
Bonjour,

Le résultat d'un calcul dans un logiciel (hors office) apparait sous la
forme CSV.
Le nombre de lignes de ce résultat est variable mais il dépasse 65536.
Il y a une trentaine de colonnes.

Si je fais un copié-collé, le copié se passe bien mais le collé plante
tout, le logiciel et Excel.

Je rêve d'une automatisation qui récupérerait le tableau de données,
mais je bute sur la première marche.

Comment récupérer 65536 lignes x 30 colonnes qui se trouvent dans la
zone tampon du copié manuel et l'envoyer dans un classeur ?

je voulais m'inspirer de cette macro qui garde les 5 dernières lignes
d'un fichier texte (source Excelabo) :

Sub test()

Dim file_name As String
Dim file_length As Long
Dim fnum As Integer
Dim bytes() As Byte
Dim txt As String
Dim i As Integer


file_name = "F:DocFloessai.txt"
file_length = FileLen(file_name)
f2 = 1000
f1 = file_length - f2

fnum = FreeFile


Open file_name For Binary As #fnum

ReDim bytes(1 To f2)
Get #fnum, f1 + 1, bytes
Close fnum

' Afficher résultats
For i = 1 To f2
txt = txt & Chr(Format$(bytes(i)))
Next i
Debug.Print txt

End Sub


Que dois-je mettre à la place de "F:DocFloessai.txt" pour attraper la
zone ? Faut-il la copier dans un tableau ?

f1 deviendra 65536 et puis beaucoup de tatonnements suivront...

Je n'arrive déjà pas à trouver le nom du buffer pour chercher dans les
archives.

Merci pour l'aide

fetnat




Avatar
raoul
Bonjour,
Permettez-moi vous posez la question.
Avez-vous réellement besoin de "récupérer" toutes ces lignes dans XL ?
Si c'est pour faire un table récapitulatif, des stats, songez à faire un
Tableau Croisé Dynamique qui utilisera ("lira") le CSV sans l'importer.
(!!!)

Le tableau ne "contiendra" pas les données, il n'en a pas besoin.
Il peut se connecter ou se reconnecter sur les données pour s'actualiser.

C'est l'option "Source de données externe" dans l'assistant "Creation d'un
Rapport de tableau croisé dynamique".

Je rencontre assez souvent des personnes qui me disent que XL est limité par
les fameux 65536 lignes. Ce n'est pas vrai.


Depuis que j'ai découvert les TCD j'ai abandonné VB dans XL.



raoul
Avatar
raoul
Pour info, une autre piste :
XL 2007 n'a pas de limite dans le nmbre de lignes, "sauf la mémoire de la
machine".

raoul
Avatar
fetnat
Bonjour,

L'ennui c'est que sélectionner une centaine de lignes puis faire un
copié ne permet pas de collé les cent lignes.
Il y aura, malgré la selection, un collé de la totalité des 115 000
lignes. D'où mon besoin de passer par VBA.
J'ai XL 2003. C'est la première fois que je tape la limite, mais c'est
l'impasse à cause d'une espèce de bug.

Je pourrais collé les 115 000 lignes dans un fichier texte, mais l'idée
c'est d'automatiser. Il faudra alors manipuler le fichier texte depuis
XL. Alors autant rester dans Excel si j'arrive à caser les 65536
premières lignes.
Je réduirais le nb de lignes selon certains critères variables, puis
j'irai chercher certaines valeurs du rapport.

Merci pour vos suggestions.

fetnat


Pour info, une autre piste :
XL 2007 n'a pas de limite dans le nmbre de lignes, "sauf la mémoire de la
machine".

raoul




Avatar
MichDenis
Ce que tu appelles ton logiciel hors office, ADO ou même MsQuery
possèdes un certain nombre de pilote permettant d'extraire directement
les données. Une recherche sur internet auprès du fabricant de ton
application devrait te permettre de savoir si un tel pilote existe et
comment l'installer.

Plus simplement, tu copies tes données dans un fichier NotePad
et tu l'enregistres en lui donnant une extension .csv. après,
tu pourrais utiliser ma procédure pour les 65536 premières lignes.

Et si tu as beaucoup de temps, tu peux regarder là :
http://www.cpearson.com/excel/clipboard.htm

Mais tu devras probablement passer par un fichier .csv comme
intermédiaire avant d'utiliser ma procédure ....







"fetnat" a écrit dans le message de news:
%237InK8$

Bonjour MichDenis,

Je te remercie pour ton aide.

Je fais un copié manuellement des données dans un logiciel AB (le
résulat d'un calcul). Ces données ont un format CSV, mais pour le moment
les données sont dans le buffer du copié-collé.

Si je fais collé dans Excel, ce dernier se plante car j'ai 115 000 lignes.
Si j'utilise la fonction d'extraction du logiciel AB vers un fichier
CSV, c'est le logiciel AB qui se plante.

Tant que j'envoie les données dans le buffer, je garde la main et les
données sont dans le buffer.
Comment modifier ta sub pour collé les 65536 premières lignes du buffer,
dans un fichier csv ou bien dans un classeur Excel ?

Je suis désolé de ne pas avoir été plus clair dans mes explications.

Cordialement

fetnat

Pour n'importer que les 65536 premières lignes d'un fichier .csv dans une feuille excel :

Tu dois ajouter à ton projet la bibliothèque suivante :
"Microsoft Activex Data Objects librairy 2.x"
Fenêtre de l'éditeur de code / barre des menus / outils / références/

'-------------------------------------------
Sub MaRequête1()

Dim Conn As ADODB.Connection, Rst As New ADODB.Recordset
Dim Requete As String, Rg As Range

Set Conn = New ADODB.Connection
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:;" & _ ' Chemin où est le fichier seulement
"Extended Properties=""text;HDR=No;FMTÞlimited"""
Requete = "SELECT TOP 65536 * From test.csv" 'nom du fichier seulement

Rst.Open Requete, Conn, adOpenForwardOnly, adLockOptimistic

'Copie des données vers la "Feuil2") nom à adapter ...
Set Rg = Worksheets("Feuil2").Range("A1")
Rg.CopyFromRecordset Rst
Rst.Close: Conn.Close
Set Rg = Nothing
End Sub
'------------------------------------------------




"fetnat" a écrit dans le message de news:
eudT73%
Bonjour,

Le résultat d'un calcul dans un logiciel (hors office) apparait sous la
forme CSV.
Le nombre de lignes de ce résultat est variable mais il dépasse 65536.
Il y a une trentaine de colonnes.

Si je fais un copié-collé, le copié se passe bien mais le collé plante
tout, le logiciel et Excel.

Je rêve d'une automatisation qui récupérerait le tableau de données,
mais je bute sur la première marche.

Comment récupérer 65536 lignes x 30 colonnes qui se trouvent dans la
zone tampon du copié manuel et l'envoyer dans un classeur ?

je voulais m'inspirer de cette macro qui garde les 5 dernières lignes
d'un fichier texte (source Excelabo) :

Sub test()

Dim file_name As String
Dim file_length As Long
Dim fnum As Integer
Dim bytes() As Byte
Dim txt As String
Dim i As Integer


file_name = "F:DocFloessai.txt"
file_length = FileLen(file_name)
f2 = 1000
f1 = file_length - f2

fnum = FreeFile


Open file_name For Binary As #fnum

ReDim bytes(1 To f2)
Get #fnum, f1 + 1, bytes
Close fnum

' Afficher résultats
For i = 1 To f2
txt = txt & Chr(Format$(bytes(i)))
Next i
Debug.Print txt

End Sub


Que dois-je mettre à la place de "F:DocFloessai.txt" pour attraper la
zone ? Faut-il la copier dans un tableau ?

f1 deviendra 65536 et puis beaucoup de tatonnements suivront...

Je n'arrive déjà pas à trouver le nom du buffer pour chercher dans les
archives.

Merci pour l'aide

fetnat




Avatar
fetnat
La porte semble fermée du côté du logiciel. Le support ne traite pas de
ce point alors qu'il répond sur les autres questions.

Le site de CPearson m'ouvre de belle perspective.

Maintenant que je connais le nom "clipboard", Google va chauffer au rouge.

Merci, MichDenis, pour tes précieux conseils qui vont au delà de mes
espérances. Je garde précieusement ta sub.

Bonne soirée.

fetnat


Ce que tu appelles ton logiciel hors office, ADO ou même MsQuery
possèdes un certain nombre de pilote permettant d'extraire directement
les données. Une recherche sur internet auprès du fabricant de ton
application devrait te permettre de savoir si un tel pilote existe et
comment l'installer.

Plus simplement, tu copies tes données dans un fichier NotePad
et tu l'enregistres en lui donnant une extension .csv. après,
tu pourrais utiliser ma procédure pour les 65536 premières lignes.

Et si tu as beaucoup de temps, tu peux regarder là :
http://www.cpearson.com/excel/clipboard.htm

Mais tu devras probablement passer par un fichier .csv comme
intermédiaire avant d'utiliser ma procédure ....







"fetnat" a écrit dans le message de news:
%237InK8$

Bonjour MichDenis,

Je te remercie pour ton aide.

Je fais un copié manuellement des données dans un logiciel AB (le
résulat d'un calcul). Ces données ont un format CSV, mais pour le moment
les données sont dans le buffer du copié-collé.

Si je fais collé dans Excel, ce dernier se plante car j'ai 115 000 lignes.
Si j'utilise la fonction d'extraction du logiciel AB vers un fichier
CSV, c'est le logiciel AB qui se plante.

Tant que j'envoie les données dans le buffer, je garde la main et les
données sont dans le buffer.
Comment modifier ta sub pour collé les 65536 premières lignes du buffer,
dans un fichier csv ou bien dans un classeur Excel ?

Je suis désolé de ne pas avoir été plus clair dans mes explications.

Cordialement

fetnat

Pour n'importer que les 65536 premières lignes d'un fichier .csv dans une feuille excel :

Tu dois ajouter à ton projet la bibliothèque suivante :
"Microsoft Activex Data Objects librairy 2.x"
Fenêtre de l'éditeur de code / barre des menus / outils / références/

'-------------------------------------------
Sub MaRequête1()

Dim Conn As ADODB.Connection, Rst As New ADODB.Recordset
Dim Requete As String, Rg As Range

Set Conn = New ADODB.Connection
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:;" & _ ' Chemin où est le fichier seulement
"Extended Properties=""text;HDR=No;FMTÞlimited"""
Requete = "SELECT TOP 65536 * From test.csv" 'nom du fichier seulement

Rst.Open Requete, Conn, adOpenForwardOnly, adLockOptimistic

'Copie des données vers la "Feuil2") nom à adapter ...
Set Rg = Worksheets("Feuil2").Range("A1")
Rg.CopyFromRecordset Rst
Rst.Close: Conn.Close
Set Rg = Nothing
End Sub
'------------------------------------------------




"fetnat" a écrit dans le message de news:
eudT73%
Bonjour,

Le résultat d'un calcul dans un logiciel (hors office) apparait sous la
forme CSV.
Le nombre de lignes de ce résultat est variable mais il dépasse 65536.
Il y a une trentaine de colonnes.

Si je fais un copié-collé, le copié se passe bien mais le collé plante
tout, le logiciel et Excel.

Je rêve d'une automatisation qui récupérerait le tableau de données,
mais je bute sur la première marche.

Comment récupérer 65536 lignes x 30 colonnes qui se trouvent dans la
zone tampon du copié manuel et l'envoyer dans un classeur ?

je voulais m'inspirer de cette macro qui garde les 5 dernières lignes
d'un fichier texte (source Excelabo) :

Sub test()

Dim file_name As String
Dim file_length As Long
Dim fnum As Integer
Dim bytes() As Byte
Dim txt As String
Dim i As Integer


file_name = "F:DocFloessai.txt"
file_length = FileLen(file_name)
f2 = 1000
f1 = file_length - f2

fnum = FreeFile


Open file_name For Binary As #fnum

ReDim bytes(1 To f2)
Get #fnum, f1 + 1, bytes
Close fnum

' Afficher résultats
For i = 1 To f2
txt = txt & Chr(Format$(bytes(i)))
Next i
Debug.Print txt

End Sub


Que dois-je mettre à la place de "F:DocFloessai.txt" pour attraper la
zone ? Faut-il la copier dans un tableau ?

f1 deviendra 65536 et puis beaucoup de tatonnements suivront...

Je n'arrive déjà pas à trouver le nom du buffer pour chercher dans les
archives.

Merci pour l'aide

fetnat








Avatar
fetnat
Plus simplement, tu copies tes données dans un fichier NotePad
et tu l'enregistres en lui donnant une extension .csv. après,
tu pourrais utiliser ma procédure pour les 65536 premières lignes.


C'est une merveille, cela permet de travailler en attendant de pousser
l'automatisation...

Mille merci

fetnat




Ce que tu appelles ton logiciel hors office, ADO ou même MsQuery
possèdes un certain nombre de pilote permettant d'extraire directement
les données. Une recherche sur internet auprès du fabricant de ton
application devrait te permettre de savoir si un tel pilote existe et
comment l'installer.

Plus simplement, tu copies tes données dans un fichier NotePad
et tu l'enregistres en lui donnant une extension .csv. après,
tu pourrais utiliser ma procédure pour les 65536 premières lignes.

Et si tu as beaucoup de temps, tu peux regarder là :
http://www.cpearson.com/excel/clipboard.htm

Mais tu devras probablement passer par un fichier .csv comme
intermédiaire avant d'utiliser ma procédure ....







"fetnat" a écrit dans le message de news:
%237InK8$

Bonjour MichDenis,

Je te remercie pour ton aide.

Je fais un copié manuellement des données dans un logiciel AB (le
résulat d'un calcul). Ces données ont un format CSV, mais pour le moment
les données sont dans le buffer du copié-collé.

Si je fais collé dans Excel, ce dernier se plante car j'ai 115 000 lignes.
Si j'utilise la fonction d'extraction du logiciel AB vers un fichier
CSV, c'est le logiciel AB qui se plante.

Tant que j'envoie les données dans le buffer, je garde la main et les
données sont dans le buffer.
Comment modifier ta sub pour collé les 65536 premières lignes du buffer,
dans un fichier csv ou bien dans un classeur Excel ?

Je suis désolé de ne pas avoir été plus clair dans mes explications.

Cordialement

fetnat

Pour n'importer que les 65536 premières lignes d'un fichier .csv dans une feuille excel :

Tu dois ajouter à ton projet la bibliothèque suivante :
"Microsoft Activex Data Objects librairy 2.x"
Fenêtre de l'éditeur de code / barre des menus / outils / références/

'-------------------------------------------
Sub MaRequête1()

Dim Conn As ADODB.Connection, Rst As New ADODB.Recordset
Dim Requete As String, Rg As Range

Set Conn = New ADODB.Connection
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:;" & _ ' Chemin où est le fichier seulement
"Extended Properties=""text;HDR=No;FMTÞlimited"""
Requete = "SELECT TOP 65536 * From test.csv" 'nom du fichier seulement

Rst.Open Requete, Conn, adOpenForwardOnly, adLockOptimistic

'Copie des données vers la "Feuil2") nom à adapter ...
Set Rg = Worksheets("Feuil2").Range("A1")
Rg.CopyFromRecordset Rst
Rst.Close: Conn.Close
Set Rg = Nothing
End Sub
'------------------------------------------------




"fetnat" a écrit dans le message de news:
eudT73%
Bonjour,

Le résultat d'un calcul dans un logiciel (hors office) apparait sous la
forme CSV.
Le nombre de lignes de ce résultat est variable mais il dépasse 65536.
Il y a une trentaine de colonnes.

Si je fais un copié-collé, le copié se passe bien mais le collé plante
tout, le logiciel et Excel.

Je rêve d'une automatisation qui récupérerait le tableau de données,
mais je bute sur la première marche.

Comment récupérer 65536 lignes x 30 colonnes qui se trouvent dans la
zone tampon du copié manuel et l'envoyer dans un classeur ?

je voulais m'inspirer de cette macro qui garde les 5 dernières lignes
d'un fichier texte (source Excelabo) :

Sub test()

Dim file_name As String
Dim file_length As Long
Dim fnum As Integer
Dim bytes() As Byte
Dim txt As String
Dim i As Integer


file_name = "F:DocFloessai.txt"
file_length = FileLen(file_name)
f2 = 1000
f1 = file_length - f2

fnum = FreeFile


Open file_name For Binary As #fnum

ReDim bytes(1 To f2)
Get #fnum, f1 + 1, bytes
Close fnum

' Afficher résultats
For i = 1 To f2
txt = txt & Chr(Format$(bytes(i)))
Next i
Debug.Print txt

End Sub


Que dois-je mettre à la place de "F:DocFloessai.txt" pour attraper la
zone ? Faut-il la copier dans un tableau ?

f1 deviendra 65536 et puis beaucoup de tatonnements suivront...

Je n'arrive déjà pas à trouver le nom du buffer pour chercher dans les
archives.

Merci pour l'aide

fetnat