IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Excel Discussion :

Enregistrer un classeur Excel avec séparateur de colonne et identificateur de texte [XL-365]


Sujet :

Excel

  1. #1
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut Enregistrer un classeur Excel avec séparateur de colonne et identificateur de texte
    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

  2. #2
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    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...

    Nom : 2022-04-20_205140.png
Affichages : 134
Taille : 121,0 Ko


    Tu peux aussi ne créer qu'une colonne et utiliser JOINDRE.TEXTE...

    Nom : 2022-04-20_205812.png
Affichages : 147
Taille : 140,8 Ko

    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).

    Nom : 2022-04-20_210200.png
Affichages : 196
Taille : 141,9 Ko


    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...
    ---------------

  3. #3
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    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

    Nom : 2022-04-20_214316.png
Affichages : 134
Taille : 96,3 Ko


    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...
    ---------------

  4. #4
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    Bonjour

    Merci je regarde cela.
    Juste une question , je découvre Power Query sous Excel
    (je connais pour PowerBI) est ce le meme language ?

  5. #5
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par shaun_the_sheep Voir le message
    [...](je connais pour PowerBI) est ce le meme language ?
    Oui, c'est le même langage et le même outil. L'interface est un peu différente, mais c'est bien le même outil
    "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...
    ---------------

  6. #6
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    Merci
    C'est trois pistes vont m'aider.
    J'ai trouvé une base de macro VBA qui pourrait correspondre

  7. #7
    Membre émérite
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 057
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 057
    Points : 2 522
    Points
    2 522
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Avec Power Query, on pourrait réaliser ceci
    ...

    Il y a peut-être plus simple, mais en Power Query, je ne vois pas. Il reste bien entendu l'option VBA.
    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

    Citation Envoyé par Pierre Fauconnier Voir le message
    AjoutDateFormatee = Table.AddColumn(AdapationTitres, "Personnalisé", each Date.ToText([Date],[Format="YYYY-MM-DD"])),
    SuppressionDateOriginale = Table.RemoveColumns(AjoutDateFormatee,{"Date"}),
    devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DatesFormatees = Table.TransformColumns(AdapationTitres,{{"Date", each Date.ToText(_,[Format="yyyy-MM-dd"]), type text}})
    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
    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 : {}

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Entete = Table.DemoteHeaders(DatesFormatees),
        AjoutGuillement = Table.TransformColumns(Entete,{}, each """" & Text.From(_) &""""),
    3. Enfin pour ne pas lister toutes les colonnes dans le Table.CombineColumns on peut utiliser Table.ColumnNames

    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

  8. #8
    Membre émérite
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 057
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 057
    Points : 2 522
    Points
    2 522
    Par défaut
    Bonsoir

    un complément sur le JOINDRE.TEXTE proposé par Pierre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =JOINDRE.TEXTE(";";FAUX;""""&plage&"""")
    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
    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

  9. #9
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    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...
    ---------------

  10. #10
    Membre émérite
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 057
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 057
    Points : 2 522
    Points
    2 522
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message

    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).

    Nom : 2022-04-20_210200.png
Affichages : 196
Taille : 141,9 Ko
    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)
    Nom : 2022_04_26 VALEUR EN TEXTE.JPG
Affichages : 107
Taille : 39,6 Ko

    Stéphane

  11. #11
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    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...
    ---------------

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2013] Enregistrer des données d'un formulaire vers un ensemble d'autres classeurs excel avec VBA
    Par chanelausie dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/10/2019, 11h13
  2. Enregistrer un classeur excel en csv
    Par ceaser dans le forum Excel
    Réponses: 1
    Dernier message: 23/05/2007, 15h13
  3. Réponses: 3
    Dernier message: 02/04/2007, 21h52
  4. [VBA-E] enregistrer un classeur excel depuis un autre classeur
    Par roseau dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 12/03/2007, 15h15
  5. [VBA-Excel,VB6,Fichier texte]enregistrer un classeur excel..
    Par Tarul dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/01/2005, 13h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo