[Catégorie modifiée VB6 --> VBA] VBA stocker les résultats sur un fichier csv

linann Messages postés 2 Date d'inscription samedi 19 juin 2010 Statut Membre Dernière intervention 21 juin 2010 - 19 juin 2010 à 13:52
linann Messages postés 2 Date d'inscription samedi 19 juin 2010 Statut Membre Dernière intervention 21 juin 2010 - 21 juin 2010 à 12:56
Bonjour,
J'ai fais un programme sous vba qui fonctionne, mais dans certains cas je dépasse le nombre de lignes d'excel (65000), on m'a dit qu'au lieu de récupérer mes résultats sur une feuille dans excel ( comme c'est le cas pour l'instant) je n'avais qu'à récupérer mes résultats dans un fichier texte ou dans un csv, mais je n'arrive pas à le faire..
(à noter que je comptais le faire 60 000 par 60 000, donc je compte en fait les stocker dans une feuille "résultats" sur excel et les copier/coller dans un fichier csv lorsque la feuille excel est remplie, et revider la feuille excel, etc.. je pourrais aussi les stocker petit à petit dans le fichier csv, je verrais par la suite, mais en attendant je n'arrive même pas à copier/coller dans le fichier csv)

Une amie qui n'est plus là pour m'aider, m'a donné un exemple :
Dim oFSO
    Dim strChemin As String
    Dim strCheminComp As String

   
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    strChemin = ThisWorkbook.Path
    strCheminComp = ThisWorkbook.FullName
   
    dossier = oFSO.GetBaseName(strChemin)
    Fichier = oFSO.GetBaseName(strCheminComp)
    Dim stgOut1 As String
    Dim stgOut2 As String
   fich1 = "F:\outilswgsr"
    Fich = fich1 & "" & "resultats" & ".csv"
   
    Open Fich For Output As #1

     
       Do While Workbooks("" & Fichier & ".xls").Sheets("résultats").Cells(2, j).Value <> ""
           
                stgOut1 = Sheets("résultats").Cells(2, j)
             
                Do While Sheets("résultats").Cells(k, j) <> ""
                    stgOut1 = stgOut1 & ";" & Sheets("résultats").Cells(k, j)
                    k = k + 1
                Loop
                Print #1, (Trim(stgOut1))
         
            j = j + 1
        Loop

     
    Close 1


à la ligne "Do While" ça ne fonctionne plus et m'affiche le message d'erreur suivant : Erreur d'éxécution '1004' erreur définie par l'application ou par l'object..

il faut savoir que le fichier "résultats.csv" est bien créé, mais il est toujours vide.

Pouvez vous m'aider?
merci d'avance

2 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
19 juin 2010 à 15:35
Salut

-1- Ta variable k n'est jamais réinitialisée. Elle devrait l'être avant de commencer le Do While sur k,j

-2- Idem pour j : sans initialisation, j comme k sont égales à 0 --> Cells(2, 0) devrait générer une erreur

-3- Si tu as déjà regardé à l'intérieur d'un fichier CSV, les données d'une même ligne sont bien stockées avec un séparateur point-virgule.
Mais dans ton programme, tu scannes les cellules par colonne : j (colonne) reste fixe alors que k (ligne) évolue.
Donc, tu te retrouves avec des données de 60.000 cellules sur une seule ligne !
La longueur d'une String est limitée à 2 Go (de mémoire), mais par contre, pas sûr que Windows sache enregistrer une ligne aussi vaste par la méthode Output, par un Print #.

-4- Les données sont-elles uniquement numériques ?
Si non, il manque des "

-5- Apprends à utiliser le mode debug :
Place ton curseur sur le Do d'une boucle et appuie sur F9
Lance ton programme, quand il arrivera sur ce Do, il s'arrêtera.
Avec la souris, survole le nom de tes variables pour visualiser sont contenu.
Tu peux aussi aller dans la fenêtre de debug (Ctrl-G) et demander un Print local :
? maVariable
Utilise F8 pour faire avancer ton programme d'une ligne, ou F5 pour continuer normalement.
A toi d'analyser ce qui se passe et à vérifier que c'est bien ce que tu voulais faire

--> Cherche, charge et regarde les sources VB du site qui parlent de CSV; même si ce sont des fichiers VB6, tu pourras lire les fichiers .BAS, .FRM dans un éditeur de texte standard.

Dernier conseil :
Si tu as tant de données à mémoriser, mieux vaudrait se tourner vers une solution de base de données (Access, SQL Server ou autre)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
linann Messages postés 2 Date d'inscription samedi 19 juin 2010 Statut Membre Dernière intervention 21 juin 2010
21 juin 2010 à 12:56
merci beaucoup pour toutes ces explications!
0
Rejoignez-nous