Se connecter avec
S'enregistrer | Connectez-vous

Pb mise en page import fichier.csv

Dernière réponse : dans Programmation

Bonsoir :(  ,

Je viens de chercher un peu d'aider afin de résoudre un problème auquel je suis actuellement confronté.
Afin de d'éviter les taches répétitives, je me suis lancer dans un petit développement VBA qui consiste à
ouvrir un fichier .csv, l'utilisateur aura le choix du fichier (format des données identique pour chaque fichier,
fonction utilisée: GetOpenfilename), importer les données de ce fichier dans un nouvelle feuille excel créée au préalable.
Mon soucis, à l'aide du code ci-dessous, est que j'obtiens une erreur 1004 lors de l'exécution du code.Quand je supprime les "=" du fichier importé
cela résout le problème et la mise en page se fait correctement. Après plusieurs essais infructueux, je lance un appel à l'aide pour me sortir de ce mauvais pas,mais connaissances étant limitées au niveau du développement Vba.
Quelles commandes à insérer dans les lignes de code pour que mon import se fasse correctement?
D'avance, merci pour votre aide...

Psit67

  1. ----------------------------------------------------------------------------------------------
  2. 'Rechcerche Fichier .csv'
  3. Sub OuvertureFichier()
  4.  
  5. Dim Fichier As Variant
  6.  
  7. ChDir ThisWorkbook.Path
  8. Fichier = Application.GetOpenFilename("Files *.csv (*.csv), *.csv")
  9. If Fichier <> False Then
  10. Lire Fichier
  11. Else
  12. Call SortieSuiteAPB("Erreur Ouverture Fichier Impossible")
  13. End If
  14. End Sub
  15.  
  16.  
  17. ---------------------------------------------------------------------------------------------
  18. 'import des informations'
  19. Function Lire(ByVal NomFichier As String)
  20.  
  21. Dim Chaine As String
  22. Dim Ar() As String
  23. Dim i As Long
  24. Dim iRow As Long, iCol As Long
  25. Dim NumFichier As Integer
  26. Dim Separateur As String * 1
  27.  
  28. Separateur = ";"
  29.  
  30. Cells.Clear
  31. NumFichier = FreeFile
  32. iRow = 1
  33.  
  34.  
  35. Open NomFichier For Input As #NumFichier
  36. Do While Not EOF(NumFichier)
  37. iCol = 1
  38. Line Input #NumFichier, Chaine
  39. Ar = Split(Chaine, Separateur)
  40. For i = LBound(Ar) To UBound(Ar)
  41. Cells(iRow, iCol) = (Ar(i))
  42. iCol = iCol + 1
  43. Next
  44. iRow = iRow + 1
  45. Loop
  46. Close #NumFichier
  47.  
  48. End Function

----------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------
Données importées non ok
Reference;="Zone 1";="Zone 2";="Zone 3"
#Description;AAAA-BBBBBB-A-A;AAAA-BBBBB;CCCC-B-A
#Analyse;;="............";="........."
1;1234;France;;;
2;1111;Allemagne;;;
3;5555;Suisse;;;
4;888;Belgique;;;
5;36;Autriche;
6;6789;Luxembourg;
7;3456;Angleterre;


Données importées ok
Reference;Zone 1;Zone 2;Zone 3
#Description;AAAA-BBBBBB-A-A;AAAA-BBBBB;CCCC-B-A
#Analyse;;"""............""";"""........."""
1;1234;France;
2;1111;Allemagne;
3;5555;Suisse;
4;888;Belgique;
5;36;Autriche;
6;6789;Luxembourg;
7;3456;Angleterre;


----------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------
affichage souhaité:
Référence Zone 1 Zone 2 Zone 3
Description AAAA-BBBB-A-A AAAA-BBBBB CCCC-B-A
#Analyse ......... ........
1 1234 France
2 1111 Allemagne
3 5555 Suisse
4 888 Belgique
5 36 Autriche
6 6789 Luxembourg
7 3456 Angleterre
6 6789 Luxembourg

Autres pages sur : mise page import fichier csv

Lassé par la pub ? Créez un compte

Meilleure solution

Expert Programmation

Salut les ptits gars,

Scusez-moi, la neige me retenait.

Eh, Psit, étudie un peu ça :
  1. Dim s As String
  2.  
  3. iRow = 1
  4. Do While Not EOF(NumFichier)
  5. Line Input #NumFichier, Chaine
  6. Ar = Split(Chaine, Separateur)
  7.  
  8. iCol = 1
  9. For i = LBound(Ar) To UBound(Ar)
  10. s = Ar(i)
  11.  
  12. ' // Supprimons le signe égal en début d'élément
  13. If Left(s, 1) = "=" Then s = Mid(s, 2)
  14.  
  15. ' // Supprimons les guillemets si il y en a au début et à la fin
  16. If Left(s, 1) = """" And Right(s, 1) = """" Then s = Mid(s, 2, Len(s) - 2)
  17.  
  18. Cells(iRow, iCol) = s
  19.  
  20. iCol = iCol + 1
  21. Next
  22. iRow = iRow + 1
  23. Loop


C'est bonnard ?
Expert Programmation

Bonjour Psit67.
Et bienvenue sur ce site.

Voudrais-tu lire et appliquer le règlement s'il te plaît. Celui-ci stipule que tout code-source doit être publié entre les balises [code][/code].
[:zeb:6]

En attendant, je me penche sur ton problème...

Bonjour,

Le fichier csv correspond a un export d'une base d'informations.
La valeur des informations contenu sont différentes mais le format ou la mise en page sont identiques à l'exemple donné ci dessus.
Ce fichier csv est importé, à l'aide du code ci-dessus, dans une feuille excel, où je retravaille l'ensemble des informations pour obtenir le résultat voulu.
J'espère t'avoir amené les information souhaitées.


Bonne journée
Expert Programmation

Si je comprend bien, tu souhaites te débarrasser des " et des ; qui traînent encore dans le fichier résultat que te crée ton programme? C'est bien ça?

Au passage: ne connaissant pas le format source de tes données, notre solution ne pourra guère être élégante, tout au plus pourra-t-on modifier ton code pour faire disparaître les caractères parasites... :/ 

Une dernière chose: c'est normal que dans le résultat "voulu" Angleterre et Luxembourg soient inversés?

Thore a dit :
Tu as beaucoup de fichier comme cela a traiter ?

car si tu en as un ou 2

Nopad++ et en 15min c'est fait !
j'ai tester avec ton exemple !
a+



L'objectif final est d'obtenir un fichier excel facile d'utilisation (lancement d'une seule macro et utilisable par n'importe qui), qui permets d'importer ces données, et d'avoir un rendu rapide (pas de taches répétitives du style copier/coller)
La partie répétitive a déjà été traitée, malheureusement je bute sur l'importation.

Merci pour ta solution;)

Spit67

Storos a dit :
Si je comprend bien, tu souhaites te débarrasser des " et des ; qui traînent encore dans le fichier résultat que te crée ton programme? C'est bien ça?

Au passage: ne connaissant pas le format source de tes données, notre solution ne pourra guère être élégante, tout au plus pourra-t-on modifier ton code pour faire disparaître les caractères parasites... :/ 

Une dernière chose: c'est normal que dans le résultat "voulu" Angleterre et Luxembourg soient inversés?


- Oui, je voudrais faire disparaitre les " et les =, les point virgules sont considérés comme des tabulations et mettent les informations qui suivent dans les cellules suivantes de ma feuille de travail.

- Je suis a la recherche un bout de code qui serai inséré dans le code existant de préférence.

- Concernant l'inversion, cela est du a une erreur de frappe de ma part lors de la copie, merci de ne pas en tenir compte.


Comme je l'ai expliqué a Thore, l'objectif final étant d'avoir un fichier excel facile d'utilisation (utilisable par n'importe qui), le fichier d'import ayant toujours le même format mais avec des valeurs différentes.
La partie du code concernant le traitement des données de l'import est déjà en place, elle prend juste les valeurs au bon endroit de la feuille de travail et les traite comme souhaitées, la feuille de travail est supprimée à la fin de la macro, il ne reste plus alors que la feuille principale du fichier excel.

Merci pour ton aide :) 

Psit67 a dit :
L'objectif final est d'obtenir un fichier excel facile d'utilisation (lancement d'une seule macro et utilisable par n'importe qui), qui permets d'importer ces données, et d'avoir un rendu rapide (pas de taches répétitives du style copier/coller)
La partie répétitive a déjà été traitée, malheureusement je bute sur l'importation.

Merci pour ta solution;)

Spit67


Tu as tester ?

Thore a dit :
Tu as tester ?



oui, j'ai testé, le soucis est que les "=" me provoquent une erreur 1004 au moment du traitement, ce qui stoppe la macro.....
J'ai essayé de modifier le code comme je pouvais (en rajoutant des lignes traitant les caractères non désirable) mais le résultat final ne correspondait plus :( 

Bonne Soirée

Hello Zeb,


:)  Merci pour ces quelques lignes de code elles ont réussie à résoudre mon "fameux" pb :)  SUPER, je vais pourvoir poursuivre mon développement, à charge de revanche.....
Je remercie aussi les 2 autres personnes qui se sont données la peine de se pencher sur mon problème. ;) 


Bonnes Fetes de Fin d'Année.

Psit67
Lassé par la pub ? Créez un compte