Résolu Pb mise en page import fichier.csv

Psit67

Nouveau membre
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

Code:
----------------------------------------------------------------------------------------------
'Rechcerche Fichier .csv'
Sub OuvertureFichier()

Dim Fichier As Variant
    
     ChDir ThisWorkbook.Path
    Fichier = Application.GetOpenFilename("Files *.csv (*.csv), *.csv") 
    If Fichier <> False Then
        Lire Fichier
    Else
    Call SortieSuiteAPB("Erreur Ouverture Fichier Impossible")
    End If
End Sub


---------------------------------------------------------------------------------------------
'import des informations'
Function Lire(ByVal NomFichier As String)

Dim Chaine As String
Dim Ar() As String
Dim i As Long
Dim iRow As Long, iCol As Long
Dim NumFichier As Integer
Dim Separateur As String * 1
 
   Separateur = ";"
     
    Cells.Clear
    NumFichier = FreeFile
    iRow = 1
    
 
    Open NomFichier For Input As #NumFichier
        Do While Not EOF(NumFichier)
            iCol = 1
            Line Input #NumFichier, Chaine
            Ar = Split(Chaine, Separateur)
            For i = LBound(Ar) To UBound(Ar)
                Cells(iRow, iCol) = (Ar(i))
                iCol = iCol + 1
                Next
            iRow = iRow + 1
        Loop
    Close #NumFichier
     
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
 

zeb

Modérateur
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:
[[i]/[/i]code].
[:zeb:6]

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

Psit67

Nouveau membre
Bonjour Zeb,

Excuse moi pour cette erreur involontaire.

Merci pour ton aide.

Psit67
 

Thore

Grand Maître
Psit67,

une question le csv source ets crée par quel application et tu veus l'utilisé avec quel application ?
 

Psit67

Nouveau membre
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
 

Thore

Grand Maître
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+
 

Storos

Modérateur cochon
Staff
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?

 

Psit67

Nouveau membre



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
 

Psit67

Nouveau membre


- 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 :)

 

Thore

Grand Maître


Tu as tester ?

 

Psit67

Nouveau membre



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
 

zeb

Modérateur
Meilleure réponse
Salut les ptits gars,

Scusez-moi, la neige me retenait.

Eh, Psit, étudie un peu ça :
Code:
Dim s As String

iRow = 1
Do While Not EOF(NumFichier)
	Line Input #NumFichier, Chaine
	Ar = Split(Chaine, Separateur)
	
	iCol = 1
	For i = LBound(Ar) To UBound(Ar)
		s = Ar(i)

		' // Supprimons le signe égal en début d'élément
		If Left(s, 1) = "=" Then s = Mid(s, 2)
		
		' // Supprimons les guillemets si il y en a au début et à la fin
		If Left(s, 1) = """" And  Right(s, 1) = """" Then s = Mid(s, 2, Len(s) - 2)

		Cells(iRow, iCol) = s
		
		iCol = iCol + 1
	Next
	iRow = iRow + 1
Loop

C'est bonnard ?
 

Psit67

Nouveau membre
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
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 134
Messages
6 718 052
Membres
1 586 393
Dernier membre
mathhh28
Partager cette page
Haut