Se connecter avec
S'enregistrer | Connectez-vous

Stocker des résultats dans un fichier csv en parant de vba

Dernière réponse : dans Programmation

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..
(sachez que pour l'instant les résultats sont stockés dans une feuille excel "résultats" et que je comptais lorsque celle ci était pleine, copier/coller les résultats dans un fichier csv, et ensuite vider la feuille excel, par la suite p-e que je stockerais directement les résultats dans le fichier csv mais pour l'instant je n'arrive même pas à envoyer quoi que ce soit dans ce fichier..)
Une amie qui n'est plus là pour m'aider, m'a donné un exemple :
  1. Dim oFSO
  2. Dim strChemin As String
  3. Dim strCheminComp As String
  4.  
  5.  
  6. Set oFSO = CreateObject("Scripting.FileSystemObject")
  7. strChemin = ThisWorkbook.Path
  8. strCheminComp = ThisWorkbook.FullName
  9.  
  10. dossier = oFSO.GetBaseName(strChemin)
  11. Fichier = oFSO.GetBaseName(strCheminComp)
  12. Dim stgOut1 As String
  13. Dim stgOut2 As String
  14. fich1 = "F:\outilswgsr"
  15. Fich = fich1 & "\" & "resultats" & ".csv"
  16.  
  17. Open Fich For Output As #1
  18.  
  19.  
  20. Do While Workbooks("" & Fichier & ".xls").Sheets("résultats").Cells(2, j).Value <> ""
  21.  
  22. stgOut1 = Sheets("résultats").Cells(2, j)
  23.  
  24. Do While Sheets("résultats").Cells(k, j) <> ""
  25. stgOut1 = stgOut1 & ";" & Sheets("résultats").Cells(k, j)
  26. k = k 1
  27. Loop
  28. Print #1, (Trim(stgOut1))
  29.  
  30. j = j 1
  31. Loop
  32.  
  33.  
  34. Close 1

cependant à 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
Lassé par la pub ? Créez un compte
Expert Programmation

Bonjour,

Je relis ton code. C'est du VB. Alors pourquoi ces codes HTML ?

Citation :
A la ligne "Do While" ça ne fonctionne plus

T'es gentil, mais il y en a plusieurs !

Ligne 20, tu utilises la variable j. Elle n'est ni déclarée, ni initialisée.

Ligne 20, toujours, tu précises le classeur, puis la feuille, puis la cellule. C'est bien.
Ligne 22, 24, 25, tu ne précises plus le classeur. Attention !

Mais pourquoi crées-tu un objet FileSystemObject ?
Tu ne te sers pas de dossier, et récupérer le nom du fichier d'un classeur que tu connais pour l'identifier est ridicule.

  1. ' // Code tordu !
  2. Dim oFSO
  3. Dim strCheminComp As String
  4.  
  5. Set oFSO = CreateObject("Scripting.FileSystemObject" )
  6. strCheminComp = ThisWorkbook.FullName
  7.  
  8. Fichier = oFSO.GetBaseName(strCheminComp)
  9.  
  10. Do While Workbooks("" & Fichier & ".xls" ).Sheets("résultats" ).Cells(2, j).Value <> ""
  11.  
  12. ' // Code simple, en une seule ligne !
  13. Do While ThisWorkbook.Worksheets("résultats").Cells(2, j).Value <> ""


-----------------------------------------------------

Excel est un tableur, pas un système de gestion de bases de données. Il faudrait reconsidérer le choix de tes outils. Si tu disposes d'Access, je t'invite à t'y intéresser.

-----------------------------------------------------

Je n'ai pas compris pourquoi on te dit de passer par un fichier .csv.
D'après tes explications, tes fichiers .csv ne feront jamais plus de 65536 lignes (la limite exacte des feuilles Excel). Par ailleurs, si tes fichiers .csv venaient à dépasser cette limite, il ne pourraient plus être lus dans Excel. Mais peut-être n'est-ce pas la finalité.

-----------------------------------------------------

Plutôt que de corriger ce code, ce qui est somme toute facile, je te propose de reconsidérer la question. Nous pouvons t'aider ;) 
Lassé par la pub ? Créez un compte