Bonjour
Je suis sous Office365, je cherche une solution simple pour convertir un onglet d'un fichier Excel en fichier CSV avec séparateur au choix (; à défaut)
mais surtout encapsuler mes données par une double cote.
Merci à vous
Bonjour
Je suis sous Office365, je cherche une solution simple pour convertir un onglet d'un fichier Excel en fichier CSV avec séparateur au choix (; à défaut)
mais surtout encapsuler mes données par une double cote.
Merci à vous
Salut.
Tu as de la chance d'être en 365. Tu peux utiliser MAKEARRAY et LAMBDA...
Voici un exemple simple lorsque le texte des cellules ne doit pas être formaté (que du texte). Il s'appuie bien entendu sur un tableau structuré puisque transformé en CSV. ici, j'ai mis le résultat sur la même feuille pour mieux visualiser le résultat, mais tu dois bien sûr placer la formule en A1 d'une feuille vierge et c'est cette feuille vierge que tu enregistrera en CSV...
Tu peux aussi ne créer qu'une colonne et utiliser JOINDRE.TEXTE...
Si tu dois formater du texte (par exemple, des dates), je n'ai pas d'autres solutions que d'énumérer les colonnes (ça ne veut pas dire que ça n'existe pas, mais par formule, je ne vois pas).
Chouette, hein, ces nouvelles fonctions... En plus, tu peux bien sûr utiliser Power Query
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Avec Power Query, on pourrait réaliser ceci
Code powerquery : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 let Source = Excel.CurrentWorkbook(){[Name="Tableau8"]}[Content], AdapationTitres = Table.TransformColumnTypes(Source,{{"Prénom", type text}, {"Nom", type text}, {"Date", type date}}), AjoutDateFormatee = Table.AddColumn(AdapationTitres, "Personnalisé", each Date.ToText([Date],[Format="YYYY-MM-DD"])), SuppressionDateOriginale = Table.RemoveColumns(AjoutDateFormatee,{"Date"}), FusionColonnes = Table.CombineColumns(SuppressionDateOriginale,{"Prénom", "Nom", "Personnalisé"},Combiner.CombineTextByDelimiter(""";""", QuoteStyle.None),"Fusionné"), Ajoutguillemets = Table.AddColumn(FusionColonnes, "Personnalisé", each """"&[Fusionné]&""""), SuppressionColonneOriginale = Table.RemoveColumns(Ajoutguillemets,{"Fusionné"}), RenommageEntete = Table.RenameColumns(SuppressionColonneOriginale,{{"Personnalisé", """Prénom"";""Nom"";""Date"""}}) in RenommageEntete
Il y a peut-être plus simple, mais en Power Query, je ne vois pas. Il reste bien entendu l'option VBA.
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Bonjour
Merci je regarde cela.
Juste une question , je découvre Power Query sous Excel
(je connais pour PowerBI) est ce le meme language ?
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Merci
C'est trois pistes vont m'aider.
J'ai trouvé une base de macro VBA qui pourrait correspondre
Bonjour
Je retrouve un PC après une semaine de déconnexion
Avec Power Query on peut aller au delà des fonctionnalités proposées dans les menus en modifiant le code M obtenu initialement
1. Pour transformer un champ sans passer par une colonne intermédiaire
devient
2. Pour ne pas avoir à gérer les en-têtes à la fin je propose de les "descendre" avant d'ajouter les guillemets avec Table.DemoteHeaders
Code : Sélectionner tout - Visualiser dans une fenêtre à part DatesFormatees = Table.TransformColumns(AdapationTitres,{{"Date", each Date.ToText(_,[Format="yyyy-MM-dd"]), type text}})
et pour ajouter ces guillemets sur toutes les colonnes le plus intéressant est d'utiliser le 3e argument de la fonction Table.TransformColumns : la transformation par défaut.
on note alors que le 2e argument est une liste vide : {}
3. Enfin pour ne pas lister toutes les colonnes dans le Table.CombineColumns on peut utiliser Table.ColumnNames
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Entete = Table.DemoteHeaders(DatesFormatees), AjoutGuillement = Table.TransformColumns(Entete,{}, each """" & Text.From(_) &""""),
Ce qui donne au final
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 let Source = Excel.CurrentWorkbook(){[Name="Tableau8"]}[Content], AdapationTitres = Table.TransformColumnTypes(Source,{{"Prénom", type text}, {"Nom", type text}, {"Date", type date}}), DatesFormatees = Table.TransformColumns(AdapationTitres,{{"Date", each Date.ToText(_,[Format="yyyy-MM-dd"]), type text}}), Entete = Table.DemoteHeaders(DatesFormatees), AjoutGuillement = Table.TransformColumns(Entete,{}, each """" & Text.From(_) &""""), FusionColonnes = Table.CombineColumns(AjoutGuillement,Table.ColumnNames(AjoutGuillement),Combiner.CombineTextByDelimiter(";", QuoteStyle.None),"Fusionné") in FusionColonnes
Le tout est chargé dans un Tableau_xxx à une seule colonne
Quand au code VBA pour générer le fichier, le plus simple à mon sens est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Sub xxx() Open "C:\xxx.csv" For Output As #1 For i = 1 To Range("Tableau_xxx").Rows.Count Print #1, Range("Tableau_xxx").Cells(i) Next i Close #1 End Sub
Stéphane
Bonsoir
un complément sur le JOINDRE.TEXTE proposé par Pierre
et équivalent à
Code : Sélectionner tout - Visualiser dans une fenêtre à part =JOINDRE.TEXTE(";";FAUX;""""&plage&"""")
je préfère la première formulation avec les guillemets ajoutés avant et après chaque élément de la plage
Code : Sélectionner tout - Visualiser dans une fenêtre à part =""""&JOINDRE.TEXTE(""";""";FAUX;plage)&""""
plutôt que la seconde syntaxe qui en ajoute entre chaque élément mais qui nécessite également d'en ajouter avant et après le JOINDRE.TEXTE
Stéphane
Bien vu, Stéphane. Je préfère aussi ta formulation
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Perso, j'ai 365 en préversion canal entreprise semestriel 2202 mais pas encore les fonctions MAKEARRAY et LAMBDA
par contre on peut simplement utiliser la fonction VALEUR.EN.TEXTE pour ajouter des "" autour de chaque élément avec le format = 1
j'ai ajouté un TEXTE pour convertir les dates suivant l'exemple de Pierre
Code : Sélectionner tout - Visualiser dans une fenêtre à part =VALEUR.EN.TEXTE(TEXTE(Tableau8[#Tout];"aaaa-mm-jj");1)
Stéphane
Comme quoi les nouvelles fonctions sont vraiment à utiliser, car elles simplifient clairement les formules.
Pour LAMBDA et MAKEARRAY, j'ai une version "365 Apps for enterprise", mais il me semble que Chris avait confirmé disposer de Lambda sur sa version...
Par contre, lorsque je bascule sur le canal "Insider", j'ai de nouvelles fonctions dont FRACTIONNERTEXTE, VSTACK (empiler des listes), etc... Vivement qu'elles soient dispo dans les versions "grand public"
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager