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 :
Et voici ce que je vois quand j'ouvre le même fichier (un .CSV), mais à partir de VBA,
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) :
Merci par avance pour votre aide
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
Partager