Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1000 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Conversion depuis .csv en prenant compte des textes

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Conversion depuis .csv en prenant compte des textes

n°2027105
tingslayer
Posté le 05-10-2010 à 15:44:52  profilanswer
 

Bonjour à tous,

 

J'ai un petit soucis de VBA avec lequel je me prend la tête depuis tout à l'heure, alors que la solution pourrait être évidente .. (comme d'hab :))

 

le voilà le problème :

 

Dans un fichier excel existant, je dois récupérer des données depuis un fichier .csv placé ailleurs dont le séparateur utilisé est le ;
sauf qu'il existe des données textes qui contiennent également un ;

 

une ligne complète pourrait par exemple être :
toto1;toto2;"toto;3";toto4

 

il faudrait que le résultat donne :
toto1            toto2             toto;3          toto4

 

Sauf que je ne trouve aucun moyen de faire comprendre au VBA que le ; de "toto;3" fait parti d'un String.

 

ce que j'obtiens c'est :
toto1            toto2             "toto             3"             toto4

 

On peut sans doute utiliser les guillements comme identificateur de texte, mais je ne vois pas où l'ajouter, voici mon code de lecture du fichier (l'ouverture se passe sans pb):

 

Sub test(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
 
    '  Séparateur Point Virgule
    Separateur = ";"
     
    Cells.Clear
    Application.ScreenUpdating = False
    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
     
    Application.ScreenUpdating = True
End Sub

 

Merci d'avance :hello:


Message édité par tingslayer le 07-10-2010 à 11:59:18
mood
Publicité
Posté le 05-10-2010 à 15:44:52  profilanswer
 

n°2027140
kiki29
Posté le 05-10-2010 à 17:42:59  profilanswer
 

Salut, passe par l'enregistreur de macro et  
Fichier Ouvrir etc .....
ce qui te donnera qqch comme


    Workbooks.OpenText Filename:="C:\Transfert\CSV.txt", Origin:=xlMSDOS, _
        StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
        ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, Comma:=False _
        , Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), _
        Array(3, 1), Array(4, 1)), TrailingMinusNumbers:=True


 
La macro que tu utilises est utile quand on veut par exemple modifier des données à la volée lors d'un import
 
Voire même tout bêtement


Workbooks.Open Filename:="C:\Transfert\CSV.csv", Local:=True


Message édité par kiki29 le 05-10-2010 à 22:31:30
n°2027141
tingslayer
Posté le 05-10-2010 à 17:48:12  profilanswer
 

Merci, je test demain :)

n°2027238
SuppotDeSa​Tante
Aka dje69r
Posté le 06-10-2010 à 11:31:56  profilanswer
 

Pourquoi toujours vouloir faire du code quand Excel le permet en meme pas 1mn...?
 
Sous excel 2007 il y a la fonction "Convertir" de l'onglet Données (Sous 2003 Menu Données, Convertir)
 
Tu sélectionnes ta cellule où tu as :
toto1;toto2;"toto;3";toto4  
 
Onglet ou menu Données ; Convertir ; Délimité-Suivant ; Séparateur : point virgule - identificateur de texte : " - Suivant ; Destination : tu selectionnes ou tu veux le resultat - Terminer
 
On se retrouve bien avec :
toto1            toto2             toto;3          toto4
 
Et si vraiment tu veux coder :  

Code :
  1. Selection.TextToColumns Destination:=Range("A2" ), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, Semicolon:=True


Message édité par SuppotDeSaTante le 06-10-2010 à 11:37:29

---------------
Soyez malin, louez entre voisins !
n°2027250
tingslayer
Posté le 06-10-2010 à 11:48:43  profilanswer
 

@ Kiki29: J'ai du louper un truc, mais quand on ouvre de cette manière, ça ouvre un nouveau fichier excel non ?

 

Le but de la manoeuvre est de lire le fichier csv, sans le modifier d'aucune manière :)

 

@dje69r : Je dois intégrer la sub de lecture du fichier dans une macro auto_open :)

 

crois-moi, si je pouvais, j'utiliserai l'enregistreur de macro tout le temps :D


Message édité par tingslayer le 06-10-2010 à 11:50:58
n°2027468
SuppotDeSa​Tante
Aka dje69r
Posté le 07-10-2010 à 10:14:04  profilanswer
 

Non mais c'est pareil. Tu ouvres ton fichier, ok, et tu n'as qu'une ligne de code pour transposer tes chaines.
 
J'avais pas vu la réponse de Kiki29 en fait, mais c'est exactement la meme chose.
 
En fait ca ouvre ton fichier CSV et ca te le traite pour avoir le résultat que tu demandes.
Ensuite soit tu l'enregistres, et a ce moment tu perds l'original, soit tu l'enregistres sous un autre nom et tu as un nouveau fichier Excel formaté selon ta demande.


---------------
Soyez malin, louez entre voisins !
n°2027499
tingslayer
Posté le 07-10-2010 à 11:29:48  profilanswer
 

Justement, j'ai besoin de faire l'opération de lecture et de traitement sur un fichier qui existe déjà, donc il n'est pas question d'en rouvrir un autre puis de le sauvegarder quelque part ... :)

 

Je me suis sans doute pas exprimé correctement dans le premier post, je corrige !


Message édité par tingslayer le 07-10-2010 à 11:58:33
n°2030661
mortelrdv
Posté le 19-10-2010 à 20:06:29  profilanswer
 

tingslayer
il me semble que j'ai du traiter un fichier csv aussi (j'ai pas le script ici).
Ma démarche en VBA était :
- ouvrir un fichier toto.csv dans excel en lecture seul => chaque cellule de la feuille A du classeur toto.csv contient donc les bonnes élémentq (toto1/toto2/toto;3/toto4 )
- récuperer les info cellules qui m'intéressent de la feuille A
- fermer le classeur toto.csv => le contenu toto.csv ne sera jamais changé


Message édité par mortelrdv le 19-10-2010 à 20:09:11

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Conversion depuis .csv en prenant compte des textes

 

Sujets relatifs
Besoin d'aide pour conversion Access 2003 2007import, traitement, conversion, opération sur fichier texte .txt
[VB Outlook] Changer de compte de messagerie au moment de l'envoiConversion de type c pour une utilisation de dll VBA
Conversion et sauvegarde de fichier JSFProblème d'affichage dans champs textes dynamiques (POUR UN DECOMPTE)
voir 4 eme reponse probleme chonometre[résolu]fonction prenant en compte une url brute d'une image
Plus de sujets relatifs à : Conversion depuis .csv en prenant compte des textes


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR