Importer fichier CSV tout en le modifiant avec VBA

Bonjour,

Je voudrais automatiser un processus assez répétitif et qui peut causer des erreurs coûteuses, je me suis donc dit qu'une macro VBA pourrait être la solution.

Ce que j'aimerais faire est importer via VBA un fichier CSV dans Excel tout en inversant la position de certaines colonnes, et qu'en même temps la ligne de titre soit supprimée pour ne laisser que les données.

Là ou ça se complique c'est que j'aimerais aussi que certaines colonnes s'ajoutent au moment de l'importation, une colonne qui aura toujours le numéro 24, puis six colonnes vides, puis une colonne avec 0 (toujours), une colonne avec Miroires (toujours) et une colonne avec 0 (toujours).

Je sais que ce que je demande est vraiment compliqué, je suis vraiment désolé mais je ne maîtrise pas assez VBA pour réaliser cette macro.

Vous trouverez en pièce jointe un exemple de ce que je veux, avec explications étape par étape, le dernier exemple de tableau est ce que j'aimerais avoir comme résultat final de l'importation sur mon fichier excel.

Merci énormément pour votre aide.

58database.xlsx (11.98 Ko)

Bonsoir BountyVba, bonsoir le forum,

Ton fichier c'est bien, test explications pas trop mal. L'idéal serait que tu mettes deux onglets dans le fichier. Dans le premier tu montres ce que tu as avant et dans le second ce que tu voudrais après le traitement de la macro. Au moins, plus de doutes sur les explications.

Bonjour ThauThème,

Merci pour ton intérêt concernant mon problème, j'ai modifié mes explications suivant tes conseils pour les rendre plus claires.

Encore merci pour ton aide,

Bonne journée

75database-v2.xlsx (14.43 Ko)

Re,

Essaie comme ça :

Sub Macro1()
Dim O As Worksheet 'déclare la variable O (onglet)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set O = Worksheets("Database") 'définit l'onglet O (à adapter)
DL = Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne A de l'onglet O
Columns("D:D").Cut 'coupe la colonne D
Columns("B:B").Insert Shift:=xlToRight 'colle la colonne D dans B en décalant a droite
Range("E1:E" & DL).Value = "24" 'écrit 24 dans la colonne E
Range("L1:L" & DL).Value = "0" 'écrit dans 0 la colonne L
Range("M1:M" & DL).Value = "Miroirs" 'écrit "Miroirs"dans 24 la colonne M
Range("N1:N" & DL).Value = "0" 'écrit 0 dans la colonne N
Rows(1).Delete 'supprime a ligne 1
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub

Cela marche, super, merci beaucoup !

Re,

je e recommande l'enregistreur de macro dans ce genre de situation. C'est vrai qu'il génère beaucoup de code pollué mais ça te permet d'avoir une idée puis de nettoyer le code inutile...

Bonjour à tous

Puisque version 2016, on peut aussi faire cela TRES simplement pas Powerquery intégré

Oui mais le problème est que ce fichier sert à importer des données à des dates différentes par des personnes différentes.

Donc je ne sais pas si c'est pratique pour chaque personne qui veut manipuler le fichier d'utiliser PowerQuery à chaque fois (sachant que plusieurs d'entre elles ne sauront probablement pas faire).

RE

Avec PQ on peut prévoir une cellule du classeur où on met le chemin et nom du fichier à importer : il suffit de changer le nom et d’utiliser Données, Actualiser tout...

De même que tes utilisateurs ne touche pas au code VBA ils n'auront pas à toucher à la requête...

J'ai réussi à Patchworker grossièrement différentes méthodes trouvées sur internet et ai réussi à régler mon problème, un grand merci pour vos inputs qui m'ont beaucoup aidé à cerner le problème.

Si ça intéresse quelqu'un voici mon code final:

Sub Macro1()

Dim O As Worksheet 'déclare la variable O (onglet)

Dim DL As Integer 'déclare la variable DL (Dernière Ligne)

Dim xFileName As Variant

Dim Rg As Range

Dim xAddress As String

xFileName = Application.GetOpenFilename("CSV File (*.csv), *.csv", , "Kutools for Excel", , False)

If xFileName = False Then Exit Sub

On Error Resume Next

Set Rg = Application.InputBox("please select a cell to output the data", "Kutools for Excel", Application.ActiveCell.Address, , , , , 8)

On Error GoTo 0

If Rg Is Nothing Then Exit Sub

xAddress = Rg.Address

With ActiveSheet.QueryTables.Add("TEXT;" & xFileName, Range(xAddress))

.FieldNames = True

.RowNumbers = False

.FillAdjacentFormulas = False

.PreserveFormatting = True

.RefreshOnFileOpen = False

.RefreshStyle = xlInsertDeleteCells

.SavePassword = False

.SaveData = True

.RefreshPeriod = 0

.TextFilePromptOnRefresh = False

.TextFilePlatform = 936

.TextFileStartRow = 1

.TextFileParseType = xlDelimited

.TextFileTextQualifier = xlTextQualifierDoubleQuote

.TextFileConsecutiveDelimiter = False

.TextFileTabDelimiter = True

.TextFileSemicolonDelimiter = True

.TextFileCommaDelimiter = False

.TextFileSpaceDelimiter = False

.TextFileTrailingMinusNumbers = True

.Refresh BackgroundQuery:=False

End With

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran

DL = Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne A de l'onglet O

Columns("D:D").Cut 'coupe la colonne D

Columns("B:B").Insert Shift:=xlToRight 'colle la colonne D dans B en décalant a droite

Range("E1:E" & DL).Value = "24" 'écrit 24 dans la colonne E

Range("L1:L" & DL).Value = "0" 'écrit dans 0 la colonne L

Range("M1:M" & DL).Value = "MIRRORED FLOW ON FR37 FOLLOWING FIN IMPLEMENTATION" 'écrit "Mirrord flow..."dans la colonne M

Range("N1:N" & DL).Value = "0" 'écrit 0 dans la colonne N

Rows(1).Delete 'supprime a ligne 1

Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran

End Sub

Macro extrêmement longue j'en conviens xD

Rechercher des sujets similaires à "importer fichier csv tout modifiant vba"