Concaténer fichiers csv
Bonjour gens du forum,
Je reçois quotidiennement un fichier .csv. Ces fichiers de format identique sont sauvegardés dans un répertoire sous les noms de: REGQUINOC_AAAAMMJJ
J'aimerais avoir une macro qui copie le contenu de ces fichiers dans un seul classeur xls nommé: mtq_tous.
Par la suite, il serait intéressant que la macro exécute une mise en forme conditionnelle de certaines cellules telle qu'indiquée dans le fichier: mtq_tous fourni en exemple.
Note: Par soucis de simplicité, j'ai mis le contenu des fichiers sources dans un seul fichier (REGQUINOC20100104.xls). En réalité, ces fichiers sonts distincts et contiennent près de 500 lignes.
La macro concaténera près de 100 fichiers.
Merci d'avance pour votre aide.
Émil
Bonjour forum,
Aucune réponse. Est-ce que mon problème est trop difficile ou mon peut-être trop confus?
Mon problème est surtout de mettre le contenu de tous les classeurs dans un seul. Pour le reste, je crois que je pourrai me débrouiller. Une réponse SVP!
Merci
Émil
Bonjour emil,
Pour ma part, j'avais pas vu passé le postEmil a écrit :Aucune réponse. Est-ce que mon problème est trop difficile ou mon peut-être trop confus?
Petites questions :
1. Ce sont des fichiers xls ou csv ?
2.
J'ai pas vu de mise en forme conditionnelle. J'ai mal vu ?Emil a écrit :Par la suite, il serait intéressant que la macro exécute une mise en forme conditionnelle de certaines cellules telle qu'indiquée dans le fichier: mtq_tous fourni en exemple.
Bonjour VBA-new,
1. Ce sont des fichiers csv que j'ouvrent avec excel (ils se comportent aussi comme des fichiers excel).
Voici un exemple d'un tel fichier:
2. Effectivement je n'ai pas utilisé la mise en forme automatique de excel pour obtenir les cellules colorés dans le fichier final: mtq_tous. En somme,je désire
dans la colonne F mettre en motif gris et la police en rouge les celulles les cellules ou c'est écrit: " critique"
dans la colonne G: mettre en motif bleu pâle les cellules ou c'est écrit: "glacée" ou "Glacée par endroits" ou
"Partiellement glacée"
dans la colonne H: mettre une police rouge ou c'est écrit "Nulle" ou "Nulle par endroits"
Voilà, en espérant que ça répond bien aux questions.
Émil
Re-questions :
1- Dans ton premier post, tu dis que les fichiers portent le nom de REGQUINOC_AAAAMMJJ. Or, tu joins un fichier qui s'appelle REGQUEBEC_20100108. Peux-tu être plus précis stp ?
2- Peux-tu joindre un bout de fichier (quelques lignes suffisent mais faut que toutes les couleurs y soient) avec les couleurs adéquates ? La flemme d'en créer un
3- Je vois que dans le fichier joint, il y a une ligne d'en-têtes alors que dans le fichier du premier post, il n'y a pas d'en-têtes. La structure des fichiers n'est pas la même ?
4- Dans quel répertoire se trouvent les csv ?
Bonjour VBA-new,
a me relire, j'avoue que les explications de mon 2ième post sème la confusion... toutes mes excuses. Je refais mes devoirs en répondant à tes questions:
1. Effectivement, le nom réel des fichiers est: REGQUEBEC_AAAAMMJJ (j'avais légèrement modifié le nom réel dans mon premier post pour garder l'anonymat, c'est raté).
2. Je joins le fichier abbrégé du 26 janvier (converti en xls pour conserver les couleurs des cellules).
3. Le format est toujours le même avec une ligne d'en-tête (dans le premier post, je les avais excluses). Tu remarqueras que l'en-tête que je veux dans le fichier: mtq_tous, cette denière est légèrement différente de celles des fichiers sources.
4. Je compte mettre le fichier: mtq_tous.xls qui contiendra la macro dans le même répertoire que les fichiers csv. Ce dernier répertoire ne contiendra que ces fichiers csv (et le fichier mtq_tous.xls). Est-il ainsi possible que la macro lise simplement tous les fichiers du répertoire courant?
Sinon le répertoire est sur une clé USB, disons à l'adresse suivante: G:\verification\mtq_2010
Voilà, en espérant être plus clair
Émil
Emil a écrit :1. Effectivement, le nom réel des fichiers est: REGQUEBEC_AAAAMMJJ (j'avais légèrement modifié le nom réel dans mon premier post pour garder l'anonymat, c'est raté).
Pas grave.Emil a écrit :3. ..... Tu remarqueras que l'en-tête que je veux dans le fichier: mtq_tous, cette denière est légèrement différente de celles des fichiers sources.
Oui c'est bon normalement.Emil a écrit :4. Je compte mettre le fichier: mtq_tous.xls qui contiendra la macro dans le même répertoire que les fichiers csv. Ce dernier répertoire ne contiendra que ces fichiers csv (et le fichier mtq_tous.xls). Est-il ainsi possible que la macro lise simplement tous les fichiers du répertoire courant?
Voici la macro qui va bien :
Sub importDonnees()
Dim principal As ThisWorkbook, cel As Range
Dim repertoire As String, fichier As String, derlign As Long
Application.ScreenUpdating = False
Set principal = ThisWorkbook
repertoire = ThisWorkbook.Path
ChDir repertoire
fichier = Dir("*.csv")
Do While fichier <> ""
Workbooks.Open fichier
ActiveSheet.UsedRange.Offset(1).Copy Destination:=principal.Sheets(1).[a65536].End(xlUp).Offset(1)
ActiveWorkbook.Close
fichier = Dir
Loop
derlign = [a65536].End(xlUp).Row
For Each cel In Range("F2:F" & derlign)
If cel Like "*Critique*" Then
cel.Interior.ColorIndex = 15
cel.Font.ColorIndex = 3
End If
Next cel
For Each cel In Range("G2:G" & derlign)
If cel Like "*lacée*" Then
cel.Interior.ColorIndex = 34
End If
Next cel
For Each cel In Range("H2:H" & derlign)
If cel Like "*Nulle*" Then
cel.Font.ColorIndex = 3
End If
Next cel
End SubFais quelques tests, ça devrait le faire. Si problème, reviens.
Bonsoir VBA-new,
quelques petits problèmes... il semble que excel ne comprend pas très bien les fichiers csv.
Regardes le résultat partiel dans le fichier joint.
Je me demande si on sauvegardait chaque fichier en xls avant de les copier si ça règlerait le problème?
Émil
Ah ouais effectivement !
Est-ce que tu pourrais me joindre un fichier csv en l'état mais en gardant quelques lignes de données ?
VBA-new,
Si tu remontes dans les posts précédents, tu trouveras le fichiers du 8 janvier en csv. Voici aussi la version csv du 26 janvier que je t'avais envoyé en format xls. Je joins aussi une portion du fichier reçu de 29 janvier en csv pour te permettre de mieux tester si tu le veux ( tous les 2 fichiers sont abbrégés).
Émil
Essaie avec ce code :
Sub importDonnees()
Dim principal As ThisWorkbook, cel As Range
Dim repertoire As String, fichier As String, derlign As Long
Application.ScreenUpdating = False
Set principal = ThisWorkbook
repertoire = ThisWorkbook.Path
ChDir repertoire
fichier = Dir("*.csv")
Do While fichier <> ""
Name fichier As Left(fichier, Len(fichier) - 3) & "txt"
fichier = Left(fichier, Len(fichier) - 3) & "txt"
Workbooks.OpenText Filename:=fichier, Origin:=xlWindows, _
StartRow:=1, DataType:=xlDelimited, Semicolon:=True
ActiveSheet.UsedRange.Offset(1).Copy Destination:=principal.Sheets(1).[a65536].End(xlUp).Offset(1)
ActiveWorkbook.Close
Name fichier As Left(fichier, Len(fichier) - 3) & "csv"
fichier = Dir
Loop
derlign = [a65536].End(xlUp).Row
For Each cel In Range("F2:F" & derlign)
If cel Like "*Critique*" Then
cel.Interior.ColorIndex = 15
cel.Font.ColorIndex = 3
End If
Next cel
For Each cel In Range("G2:G" & derlign)
If cel Like "*lacée*" Then
cel.Interior.ColorIndex = 34
End If
Next cel
For Each cel In Range("H2:H" & derlign)
If cel Like "*Nulle*" Then
cel.Font.ColorIndex = 3
End If
Next cel
End SubL'ouverture par vba des csv ne semble pas marcher comme une ouverture manuelle. Les csv sont donc renommés en texte pour pouvoir prendre les séparations en compte puis renommés à la fin en csv à nouveau.
Vba-new,
Excellent! Ça fonctionne no 1.
Un gros merci!
Émil