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

Macros et VBA Excel Discussion :

Transformation données Excel vers txt ou csv


Sujet :

Macros et VBA Excel

  1. #1
    Inactif  

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    3 064
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 064
    Points : 4 605
    Points
    4 605
    Par défaut Transformation données Excel vers txt ou csv
    bonjour,

    Je dispose d'un fichier Excel dans le quel j'importe des données d'une base de données. Le fichier Excel comporte une trentaine de champs.

    Je concatène mes champs nécessaire en colonne A avec ce type de formule

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    " =A2&";"&b2&";"&c2&";"&d2&";"&e2 ... "
    Je transfère ensuite ceci à la main par un copier coller dans un bloc note .txt ou .csv pour le réintégrer en BDD.

    Je souhaite construire un bout de code qui venir copier le contenu de la colonne A vers un fichier bloc note .txt ou .csv . A noter il n'y a pas de restriction sur le nombre de ligne à copier car celui ci est inconnu.

    Cependant 2 conditions :

    * je veux commencer à la ligne 2 (ligne 1 = entête de colonne )
    * ne copier que la colonne A avec les champs concaténés.

    Merci de m'aiguiller

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 197
    Points : 300
    Points
    300
    Par défaut
    Et pourquoi tu ne fais pas simplement "Enregistrer sous" en choisissant le format CSV(Séparateur point virgule) ??
    Et c'est quand tu intègres dans la base de données que tu lui demandes de commencer en ligne 2

  3. #3
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Le plus simple est de créer un nouveau classeur avec une feuille unique.
    Ensuite tu copies tes données sources vers ce classeur.
    Tu enregistres ce classeur comme un texte.
    Tu le fermes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Workbooks.Add
    Worbooks("MonClasseur").Worksheet("MaFeuille").Range("A2:A" & Rows.Count).Copy Destination:=Range("A1")
    ActiveWorkbook.SaveAs FileName:="MonTexte.txt" FileFormat:=xlTextWindows
    ActiveWorkbook.Close False
    Je n'ai pas testé ce code, il se pourrait donc que tu ais du débugage à faire.

    Si tu veux le faire en une ligne, tu peux passer par la méthode ExportAsFixedFormat de l'objet Range.
    https://msdn.microsoft.com/fr-fr/lib.../ff836441.aspx
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    3 064
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 064
    Points : 4 605
    Points
    4 605
    Par défaut
    Bonjour,

    Je viens de faire le code suivant :

    Code VBA : 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
    Sub clic()
     
    Dim chemin_fichier_export As String
    Dim nom_feuille_classeur As String
    Dim fichier_txt_cree As String
     
    chemin_fichier_export = "C:\Users\test\Downloads\20160609_macro.xlsm"
    nom_feuille_classeur = "feuille"
    fichier_txt_cree = "C:\Users\test\Downloads\MonTexte.txt"
     
    Workbooks.Add
     
    Worbooks(chemin_fichier_export).Worksheet(feuille).Range("A2:A" & Rows.Count).Copy Destination = fichier_txt_cree
    ActiveWorkbook.SaveAs(fichier_txt_cree,FileFormat = xlTextWindows)
     
    ActiveWorkbook.Close False
     
    End Sub

    VBA me dit que " ActiveWorkbook.SaveAs(fichier_txt_cree,FileFormat = xlTextWindows) " n'est pas déclaré et qu'il lui faut un format . J'ai pourtant bien préciser le format " FileFormat = xlTextWindows "

    Merci d'vance de l'aiguillage

  5. #5
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Tu le fais exprès ?
    Je t'ai donné la bonne syntaxe dans mon message précédent.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    3 064
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 064
    Points : 4 605
    Points
    4 605
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Je n'ai pas testé ce code, il se pourrait donc que tu ais du débugage à faire
    Bonjour,

    Comme tu le signalai le code brut de décoffrage que tu proposai n'a pas fonctionné . J'ai du chercher des fonctionnalités faire fonctionner le code.

    Voici ce que j'obtiens comme code .

    Le copier/coller vers le fichier texte ne marche pas . Je ne vois pas d'ou vient le problème :

    Code VBA : 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
    Function clic()
     
    Dim chemin_fichier_export As String
    Dim nom_feuille_classeur As String
    Dim fichier_txt_cree As String
     
    chemin_fichier_export = "C:\Users\N000137816\Downloads\20160609_macro.xlsm"
    nom_feuille_classeur = "feuille"
    fichier_txt_cree = "C:\Users\N000137816\Downloads\MonTexte.txt"
     
    Workbooks.Add
     
    Workbooks(chemin_fichier_export).Worksheet(feuille).Range("A2:A100").Copy Destination = fichier_txt_cree
    ActiveWorkbook.SaveAs Filename:=fichier_txt_cree, FileFormat:=xlTextWindows
     
    ActiveWorkbook.Close False
     
    End Function

  7. #7
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Mon code était peut-être "brut de décoffrage" mais au moins la syntaxe était bonne.
    Citation Envoyé par tanaka59 Voir le message
    Le copier/coller vers le fichier texte ne marche pas . Je ne vois pas d'ou vient le problème :
    Tu n'as pas du bien regardé parce que je vois au moins 5 erreurs dans la ligne (pas mal pour une seule ligne) :
    - Le nom du Workbook : il n'y a pas de chemin dans un nom de Workbook.
    - Le nom de la Worksheet : une désignation se met entre guillemets. S'il n'y a pas de guillemets, VBA le considère comme un nom de variable
    - Quand on désigne une Worksheet par son nom, c'est un indexe de la collection Worksheets. Il faut donc le mettre au pluriel.
    - Quand on indique un paramètre dans une méthode, on utilise := et non pas =.
    - La destination doit être une référence de cellule et non pas une chaine de caractère reprenant le nom d'un onglet.

    Je le répète : regarde la syntaxe dans le code que j'ai donné.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  8. #8
    Inactif  

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    3 064
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 064
    Points : 4 605
    Points
    4 605
    Par défaut
    Bonjour,

    J'ai encore modifié le code VBA qui ne fonctionne toujours pas malgrés des recherches et les conseilles suivis

    Code vba : 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
    Function clic()
     
    Dim chemin_fichier_export As String
    Dim nom_feuille_classeur As String
    Dim fichier_txt_cree As String
     
    chemin_fichier_export = "C:\Users\N000137816\Downloads\20160609_macro.xlsm"
    nom_feuille_classeur = "feuille"
    fichier_txt_cree = "C:\Users\N000137816\Downloads\MonTexte.txt"
     
    Workbooks.Add
     
    Workbook.Worksheets("feuille").Range("A2:A20").Copy Destination:=fichier_txt_cree
    ActiveWorkbook.SaveAs Filename:=fichier_txt_cree, FileFormat:=xlTextWindows
     
    ActiveWorkbook.Close False
     
    End Function

    Citation Envoyé par Menhir Voir le message
    Mon code était peut-être "brut de décoffrage" mais au moins la syntaxe était bonne.
    J'ai réutilisé le code que tu a fourni.

    Citation Envoyé par Menhir Voir le message
    - Le nom du Workbook : il n'y a pas de chemin dans un nom de Workbook.
    Alors comment VBA arrive a déterminer dans quel fichier il doit prendre les données ? Il le fait d'office dans le fichier courant ouvert ?

    Citation Envoyé par Menhir Voir le message
    - Le nom de la Worksheet : une désignation se met entre guillemets. S'il n'y a pas de guillemets, VBA le considère comme un nom de variable
    J'ai retrouvé l'explication des guillements et j'ai corrigé

    Citation Envoyé par Menhir Voir le message
    - Quand on désigne une Worksheet par son nom, c'est un indexe de la collection Worksheets. Il faut donc le mettre au pluriel.
    Bizzarement dans ton code que tu as donnée un Worksheet sans le " s " à la fin . Tu dois qu'il faut en mettre puis n'en met pas et après tu dis le contraire ... Je ne suis pas ta logique désolé. Soit on en met , soit on en met pas mais pas les deux à la fois .

    Citation Envoyé par Menhir Voir le message
    - Quand on indique un paramètre dans une méthode, on utilise := et non pas =.
    Que veux tu dire par méthode ? Pourtant on affecte une variable texte comme numérique avec un " = " simple normalement en VBA ? C'est bien la première fois que j'entend parler de " := " . Je sais qu'en PHP et en c++ il y a une différence entre une chaine texte et numérique.

    Citation Envoyé par Menhir Voir le message
    - La destination doit être une référence de cellule et non pas une chaine de caractère reprenant le nom d'un onglet.
    C'est ce que j'ai précisé pourtant , dans le range on a bien la plage de cellule dixit cet exemple sur le site de microsoft : https://msdn.microsoft.com/fr-fr/lib.../ff838238.aspx ... Dans le worksheet on a bien le nom de l'onglet du classeur dans lequel on travaille . La je ne vois pas le problème ?

    Merci d'avance

  9. #9
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par tanaka59 Voir le message
    Alors comment VBA arrive a déterminer dans quel fichier il doit prendre les données ? Il le fait d'office dans le fichier courant ouvert ?
    Pour être atteint par Workbook, le fichier doit faire partie de ceux ouverts dans Excel.
    S'il n'est pas ouvert, il faut l'ouvrir avec une méthode Workbooks.Open.

    Ensuite, il faut le désigner par son nom.

    Que veux tu dire par méthode ?
    On peut assigner à un objet VBA deux types de membres : des propriétés et des méthodes.
    Regarde l'aide VBA de n'importe quel objet Excel (de préférence l'objet Range, ça te donnera l'occasion de voir la description de la méthode Copy) et tu verras de quoi il s'agit.

    Pourtant on affecte une variable texte comme numérique avec un " = " simple normalement en VBA ?
    Là, ça n'a rien à voir avec une affectation de variable, c'est une transmission de paramètre.

    C'est bien la première fois que j'entend parler de " := " .
    Si tu avais pris la peine de regarder la description de la méthode Copy de Range, tu en aurais vu.
    https://msdn.microsoft.com/fr-fr/lib.../ff837760.aspx

    C'est ce que j'ai précisé pourtant , dans le range on a bien la plage de cellule dixit cet exemple sur le site de microsoft : https://msdn.microsoft.com/fr-fr/lib.../ff838238.aspx ... Dans le worksheet on a bien le nom de l'onglet du classeur dans lequel on travaille . La je ne vois pas le problème ?
    Ce que tu indiques est une chaîne de caractère contenant le chemin et le nom d'un fichier.
    Ce qu'il faut mettre, c'est la référence à une cellule.

    Tu ne vois pas le problème ?

    Je le répète une nouvelle fois : regarde mon code.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  10. #10
    Inactif  

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    3 064
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 064
    Points : 4 605
    Points
    4 605
    Par défaut
    Bonjour,

    J'ai repris le code à zéro et j'ai fait chou blanc

    Si une âme charitable peu m'aiguiller sur la question , merci d'avance.

  11. #11
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Bonjour, bonjour !


    Sinon rien qu'en activant l'Enregistreur de macros puis en effectuant la manipulation !

    Voilà, voilà !
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  12. #12
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par tanaka59 Voir le message
    Si une âme charitable peu m'aiguiller sur la question , merci d'avance.
    Je ne vois pas comment il serait possible de "t'aiguiller" plus que ce qui a déjà été fait, surtout si tu n'apportes aucune indications sur ce que tu n'es pas parvenu à appliquer.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  13. #13
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Poster le code entrepris via l'icône # en indiquant clairement le message d'erreur et le numéro de la ligne en erreur
    conformément aux règles de ce forum !


    Citation Envoyé par tanaka59 Voir le message
    Je dispose d'un fichier Excel dans le quel j'importe des données d'une base de données.
    Excel serait inutile : pourquoi ne pas exporter directement de la base de données uniquement les données souhaitées ?‼
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

Discussions similaires

  1. [XL-2010] Exporter des données d'un tableau Excel vers un fichier csv sous condition avec "print"
    Par Thierry_59300 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 07/04/2016, 09h45
  2. Extraire une Base de donnée Excel vers Mysql ??
    Par Arvulis dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 09/01/2006, 22h58
  3. [Excel] Exportation de donnée excel vers MySQL
    Par yoda7666 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 17/11/2005, 16h18
  4. Importer des données excel vers outlook
    Par faayy dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 17/10/2005, 09h30
  5. Récupérer des données Excel vers Interbase ...
    Par Djedjeridoo dans le forum InterBase
    Réponses: 2
    Dernier message: 20/07/2003, 18h16

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