[VBA-E] Comment convertir 3000 fichiers de .csv à .xls?? (Attention prise de têt

maximecdb Messages postés 5 Date d'inscription mardi 24 avril 2007 Statut Membre Dernière intervention 25 avril 2007 - 25 avril 2007 à 00:02
 Utilisateur anonyme - 6 mai 2012 à 17:56
Salut,

Je suis en stage depuis 2 semaines, et l'un de mes premiers boulot est
de concaténer plein de données a la suite

et je piétine depuis deux jours (pour info, ca fait aussi deux jours que
j'ai commencé vba)

Voici le probleme: Je dois mettre à la suite une centaine de tableaux
excel (en fait du .csv, ce qui me pose probleme) issus de simulation
statistiques(meme nombre de colonnes).

Les chemins de ces fichiers
(C:\utilisateur\mesdocuments.....\tableauXX.csv)  sont listés dans un
tableau excel

Je dois donc prendre ces noms de de fichier, les convertir et les ouvrir
en excel, et les copier à la suite dans un grand fichier excel, en
enlevant a chaque fois la première ligne. C'est la partie conversion qui me pose de gros problemes, malgrés les infos trouvées les forums.
J'ai deja fait plusieurs  tentatives...voici la derniere
.......................................

'Boucle qui va chercher le chemin des fichier a convertir, et les places
dans la varible Fich1

Option Explicit

Private Sub Command1_Click()

Dim Fich1$

Dim i As Integer

For i = 1 To 30

Fich1 = Worksheets("feuil2").Cells(i, 1)

Application.DisplayAlerts = False

Workbooks.Open _

Filename:=Fich1 'ouvre le fichier csv,

ActiveWorkbook.SaveAs Filename:="C:\Documents and
Settings\Utilisateur\Bureau\testb.xls", _

FileFormat:=xlWorkbookNormal 'et le réenregistre à la meme place sous
forme xls...en fait ca ne marche pas...

ActiveWorkbook.Close

Application.DisplayAlerts = True

Next i
End Sub

En esperant que ca voux paraiteras moins hermétique qu'a moi...Merci d'avance!!.

Max

9 réponses

mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
25 avril 2007 à 00:08
Salut,

pourquoi le convertir ?
Tu ne peux pas ouvrir ton .csv, extraire les données comme dans un classeur normal et les placer dans ton classeur XL ?

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~
  
0
maximecdb Messages postés 5 Date d'inscription mardi 24 avril 2007 Statut Membre Dernière intervention 25 avril 2007
25 avril 2007 à 00:25
Merci pour ta réponse;
C'est ce que j'ai essayé de faire, mais le programme que j'utilise pour concaténer les tableaux, que j'ai récuperé sur le internet (de frederic sigonneau) ne prend malheureusement pas en charge les .csv
......

'J'ai plusieurs fichiers xls, construits selon la même architecture.

'Une première ligne de "titres", puis des données, sur chacune des lignes.

'Je souhaite qu'un autre fichier "synthétise" tous les

'fichiers "sources".

'Une solution de consolidation utilisant ADO :

'Les données sont lues sans ouvrir les fichiers source et copiées

'dans le fichier cible à la suite des données déjà présentes.

'Les données lues et recopiées sont les données entières de la feuille passée en

'paramètre Source.

'fs, mpfe

Sub TestConso()

Dim Fich1$, Source1$, Cible$

Dim i As Integer

For i = 1 To 2

  Fich1 = Worksheets("feuil2").Cells(1, 1)

  Source1 = "Feuil1"

  Cible = "Feuil1"

  ConsoDatas Fich1, Source1, Cible

  Next i

End Sub


.......
Donc
0
maximecdb Messages postés 5 Date d'inscription mardi 24 avril 2007 Statut Membre Dernière intervention 25 avril 2007
25 avril 2007 à 00:29
Padon, j'a coupé la suite du code!

Public Sub ConsoDatas(NomFichier$, FeuilleSource$, FeuilleCible$)
'Va chercher dans le classeur NomFichier (sans l'ouvrir) les données
'de la feuille FeuilleSource et les copie dans la feuille FeuilleCible
'du classeur actif, à la suite des données (éventuellement) déjà présentes.
'(La ligne d'entêtes de FeuilleSource n'est pas importée)
'inspiré de Rob Bovey, mpep
'nécessite une référence à la librairie
'Microsoft ActiveX Data Object 2.x Library
Dim rsData As ADODB.Recordset
Dim szConnect As String
Dim szSQL As String
Dim Li&, FeuilleDest

''' Crée la chaîne de connexion
szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & NomFichier & ";" & _
"Extended Properties=Excel 8.0;"

' La requête est basée sur le nom de la feuille. Ce nom
' doit se terminer par un $ et doit être entouré de crochets droits.
szSQL = "SELECT * FROM [" & FeuilleSource & "$];"

Set rsData = New ADODB.Recordset
rsData.Open szSQL, szConnect, adOpenForwardOnly, _
adLockReadOnly, adCmdText

'où envoyer les données :
Set FeuilleDest = ActiveWorkbook.Sheets(FeuilleCible)
Li = FeuilleDest.Range("A65536").End(xlUp).Row + 1
'envoi sur la première ligne vide
If Not rsData.EOF Then
FeuilleDest.Range("A" & Li).CopyFromRecordset rsData
Else
'si la source était vide...
MsgBox "Aucun enregistrement renvoyé.", vbCritical
End If

''' On nettoie pour finir...
rsData.Close
Set rsData = Nothing

Voila!

End Sub
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
25 avril 2007 à 00:34
Mais je comprends ton problème de CSV.
Chez moi, si je créer un fichier texte sur le bureau, je met dedans
aaaaaa;ddddddddd

je ferme et j'enregistre. Ensuite je change .txt et .csv, si je l'ouvre, il s'ouvre avec excel, aaaaa dans la colonne A, et dddd dans la colonne B.
Bref, tout ça pour dire, csv ou pas csv (xls), c'est pareil.
Tu peux très bien faire

WorkBooks.Open "C:\classeur.XLS"
ou
WorkBooks.Open "C:\fichier.CSV"

Avec le csv, si je fais MsgBox Range("A1").Value, il me donnera --> aaaaaa

Conclusion : si tu sais piloter un classeur excel, tu sais piloter un fichier à séparateur de virgule

Pour ton second message, peut pas t'aider, je ne travaile pas avec des requêtes sur Excel

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~
  
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
25 avril 2007 à 00:35
Oups, ça change le sens de la phrase :

Mais je NE comprends PAS ton problème de CSV.

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~
  
0
maximecdb Messages postés 5 Date d'inscription mardi 24 avril 2007 Statut Membre Dernière intervention 25 avril 2007
25 avril 2007 à 10:49
Merci pour ta réponse, je m'en suis servi pour ecrire un code different, qui marche presque!
Je le posterais des qu'il marche
0
maximecdb Messages postés 5 Date d'inscription mardi 24 avril 2007 Statut Membre Dernière intervention 25 avril 2007
25 avril 2007 à 10:49
Merci pour ta réponse, je m'en suis servi pour ecrire un code different, qui marche presque!
Je le posterais des qu'il marche
0
ahmedbett Messages postés 1 Date d'inscription lundi 31 décembre 2012 Statut Membre Dernière intervention 6 mai 2012
6 mai 2012 à 06:51
salut,
Je suis un etudiant et je suis entrain de preparer mon Projet Fin d'Etude .Je suis débutant en language VB et svp je vous demande de vous me aide .
Mon problem est :
J'ai un fichier sans extension et je veux changer son extension à .xls
et merçi .
0
Utilisateur anonyme
6 mai 2012 à 17:56
L'école ne vous montre pas VBA et vous vous garrochez tous ves VBA comme projets de fins d'études. C'est qui le zouave qui vous enseigne ?

Suffit de faire une simple concaténation:

dim nomfichier as string
nomfichier = nomfichier & ".xls"
0
Rejoignez-nous