Bonjour à tous,

J'ai un petit problème sur une macro que je suis entrain de réaliser.
Pour schématiser :
- La macro ouvre un fichier excel (.xlsx)
- Copie une plage de données
- Ouvre un fichier (.csv)
- colle la plage de données en valeur
- Enregistre le fichier (.csv) J'ai des messages d'erreurs à cette étape
- Boucle sur tous les fichiers .xlsx

Elle fonctionne très bien mais j'ai un problème lié au format de mes fichiers à l'enregistrement.

Je m'explique, voici ce que je vois quand j'ouvre un fichier .CSV à partir d'Excel :
Nom : CSV1.JPG
Affichages : 256
Taille : 29,9 Ko

Et voici ce que je vois quand j'ouvre le même fichier (un .CSV), mais à partir de VBA,
Nom : CSV2.JPG
Affichages : 258
Taille : 30,4 Ko

C'est le premier problème, j'ai l'impression que VBA me supprime la mise en forme initiale des données et "scinde" toutes les données (en colonnes) dans une même ligne.

Quand je lance ma macro :
- Mes données se copient correctement
- La mise en forme est conforme car liée au range de la macro
- Par contre à l'enregistrement, je perd la mise en forme et le fichier devient similaire à la deuxième capture d'écran. J'ai également des messages d'erreurs lors de l'enregistrement, mais le fichier s'est pourtant correctement enregistré.

Quand je déroule les étapes de la macro une par une, lorsqu'elle ouvre le fichier .CSV, la mise en forme est conforme à la première capture d'écran (pourtant quand je souhaite juste ouvrir un fichier .CSV sans passer par l’exécution étape par étape j'ai la mise en forme de la deuxième impression écran), exactement pareil quand je colle mes valeurs, et après l'enregistrement, j'obtiens toujours la mise en forme de la deuxième impression écran.

J'espère avoir été compréhensible.

Quelqu'un est-il en mesure de me dire si ce que je souhaite faire est possible avec ces différents types de fichiers ?

Mon code (qui fonctionne) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
ub Automatisation()
 
Dim wb As Workbook
Dim ws As Worksheet
Dim Newwb As Workbook
Dim Newws As Worksheet
Dim DerLigne As Long
Dim Chemin As String, Fichier As String, Chemin_F As String, Chemin_V As String, Chemin_F_V As String, Name As String
 
Application.ScreenUpdating = False
 
Chemin = "CHEMIN\" 'Repertoire des extractions en.xlsx
Fichier = "0100.xlsx" 'Conserne tous les fichiers en /
 
Set wb = Workbooks.Open(Chemin & Fichier)
Set ws = wb.Worksheets("CMBU_BUDGET")
 
DerLigne = ws.Range("G" & Rows.Count).End(xlUp).Row 'Defini le numéro de la dernière ligne renseignée en colonne "G"
ws.Range("A1:" & "G" & DerLigne).Copy 'Copie toutes les cellules de "A1" à la dernière ligne non vide de la colonne "G"
 
Name = wb.Name 'Donne le numéro de dossier.xlsx
Name = Left(Name, InStrRev(Name, ".") - 1) ' donne le numéro de dossier sans le ".xlsx"
 
'DESTINATION DES FICHIERS A OUVRIR:
Chemin_F = "CHEMIN\" 'Chemin fixe
Chemin_V = Name & "\" 'Chemin Variable => Donne la partie variable du Chemin (qui est est nom du classeur sans le .xlsx)
Chemin_F_V = Chemin_F & Chemin_V 'Donne le chemin définitif
 
Set Newwb = Workbooks.Open(Chemin_F_V & "CMBU_BUDGET.csv") 'ouvre le fichier de destination.CSV
Set Newws = Newwb.Worksheets("CMBU_BUDGET") 'Ouvre la feuille CMBU_BUDGET de newwb
 
Newws.Range("A:G").ClearContents
ws.Range("A1:" & "G" & DerLigne).Copy 'Copie toutes les cellules de "A1" à la dernière ligne non vide de la colonne "G"
Newws.Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False 'Colle la sélection en valeur à partir de A1
 
wb.Close savechanges:=False 'Ferme le classeur en n'enregistrant pas les modifications
Newwb.Save
Newwb.Close
 
End Sub
Merci par avance pour votre aide