Macro Excel pour mise en forme

Bonjour,

Très souvent, je dois ouvrir des csv et les remettre en forme (simplement, séparation par "," et format "texte").

Est-ce qu'il serait svp possible :

1) De mettre une macro qui soit présente à chaque fois que j'ouvre un csv avec excel. Actuellement, mes macros appartiennent au fichier excel sur lequel je les créé. Comment pourrait-on avoir la macro présente partout?

2) Comment arranger la macro pour qu'elle s'adapte à chaque fois au nombre de colonne? Dans l'exemple ci-dessous c'est 4 mais ça pourrait être plus

Sub Macro1()
'
' Macro1 Macro
'

'
    Columns("A:A").Select
    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
        Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
        :=Array(Array(1, 2), Array(2, 2), Array(3, 2), Array(4, 2)), TrailingMinusNumbers:= _
        True
End Sub

Merci pour votre aide !

Bonjour

Il suffit de créer un classeur type avec un code de quelques lignes permettant de choisir le CSV et d'inscrire son nom dans une cellule

Ensuite une requête PowerQuery ouvre le fichier dont le nom est inscrit dans la cellule et fait le job

Je rappelle qu'on n'ouvre jamais les CSV pour éviter qu'Excel ne les cuisine à la sauce US et fasse perdre des infos mais qu'on l'importe via Données, A partir d'un fichier texte/CSV ce qui invoque automatiquementPOwerQuery

Le changement de nom suivi d'une actualisation traitera n'importe quel CSV

Merci,

J'ai trouvé un topic similaire mais je suis bloqué

https://forum.excel-pratique.com/excel/ouvrir-un-fichier-nom-contenu-dans-une-cellule-power-query-17...

Vous savez où je me suis trompé?

5pq.xlsx (14.91 Ko)
image image

RE

Ce que tu ouvres n'est pas un classeur Excel
=Excel Workbook (
mais un CSV
=Csv.Document(

qui nécessite également d'autre paramètres

travailler sur un réel import CSV puis modifier la ligne source pour remplacer son nom par la référence à la cellule nommée

Merci Chris

En travaillant "manuellement" j'obtiens cela comme code source

= Csv.Document(File.Contents("C:\Users\oujikun\Downloads\TEST CSV.csv"),[Delimiter=";", Columns=3, Encoding=65001, QuoteStyle=QuoteStyle.None])

Mon modèle est celui ci-dessous

= Excel.Workbook(File.Contents(Excel.CurrentWorkbook(){[Name="CheminFichier"]}[Content]{0}[Column1]), null, true)

ESSAI 1 :

= Csv.Document(File.Contents(Csv.Document(){[Name="CheminFichier"]}[Content]{0}[Column1]), null, true)

KO, on me dit

image

ESSAI 2 :

= Csv.Document(File.Contents(Csv.Document(){[Name="CheminFichier"]}[Delimiter=";", Columns=3, Encoding=65001, QuoteStyle=QuoteStyle.None]))

KO aussi, on me dit

image

Essai 3 :

= Csv.Document(File.Contents({[Name="CheminFichier"]}),[Delimiter=";", Columns=3, Encoding=65001, QuoteStyle=QuoteStyle.None]

KO

Essai 4 :

= Csv.Document(File.Contents({[Name="CheminFichier"]}))

KO

Est-ce que vous sauriez svp m'aider à identifier mon erreur?

Bonjour

Csv.Document(File.Contents(Excel.CurrentWorkbook(){[Name="CheminFichier"]}[Content]{0}[Column1]),[Delimiter=";", Columns=1, Encoding=65001, QuoteStyle=QuoteStyle.None])

Il faut juste remplacer ce qui est en rouge avec " " par

Excel.CurrentWorkbook(){[Name="CheminFichier"]}[Content]{0}[Column1]

Super, impeccable Chris.

Merci.

= Csv.Document(File.Contents(Excel.CurrentWorkbook(){[Name="CheminFichier"]}[Content]{0}[Column1]),[Delimiter=";", Columns=3, Encoding=65001, QuoteStyle=QuoteStyle.None])

Est-ce qu'on n'a pas possibilité de ne pas spécifier "columns3", pour que le PQ prenne à chaque fois le nombre de colonnes qu'il y a dans le csv dont je renseigne lme chemin?

RE

Oui tu peux enlever

Columns=3,

Top, ça marche.

Bon, ça fait un peu plus d'étapes que prévu (faut copier le chemin du fichier, le coller dans le fichier PQ, enlever les guillemets et actualiser) mais c'est tout de même un peu plus rapide que la méthode classique.

Merci !

Re

NOOon

On utilise un code VBA qui demande quel fichier traiter , récupère le choix, l'inscrit dans la cellule CheminFichier puis actualise la requête

Ingénieux!!!

Merci Chris.

J'ai testé ça fonctionne super.

A voir au bureau avec 150k lignes de données si ça tient le choc :)

Bonjour

Certains utilisent PowerQuery pour des millions de lignes...

Rechercher des sujets similaires à "macro mise forme"