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 :

Export tableau en .txt [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 30
    Par défaut Export tableau en .txt
    Bonjour

    je sollicite votre aide pour un projet assez compliqué

    je vais essayer d'être claire et consise

    alors, j'ai un fichier de base Excel sur lequel j'ai 2 tableaux, totalement identique, c'est juste la suite du premier.

    Dedans j'ai tout un tas de données.

    Mon but est d'avoir un bouton qui exécute une macro qui exporte les données du tableau en créant des fichiers en format txt ou csv peu importe.

    Le format du fichier de sorti doit être du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    FICHIER 5.50 - GRP
    NUM(en dur);Numéro;
    TYPE(en dur);Type;Valeur3;
    Fin;;;
    mon séparateur choisi est le point virgule. Jusque là ca va.

    Mais je bloque sur la "particularité".

    Les numéros sont de la forme N.2000.XXX.

    Il peut y avoir plusieurs valeurs pour un meme numéro, nous donnant :



    le but serait d'exporter ces données en générant un fichier txt ou csv par numéro N.2000.XXX. C'est-à-dire que quand je clique sur le bouton cela me créer dans un dossier (pour l'exemple) :

    2 fichiers txt avec à l'intérieur :

    le 1er
    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    FICHIER 5.50 - GRP
    NUM;N.2000.001;
    TYPE;RCF;52;
    TYPE;FDC;658;
    Fin;;;
    et le 2ème :

    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    FICHIER 5.50 - GRP
    NUM;N.2000.002;
    TYPE;FDS;6;
    TYPE;CDS;8;
    Fin;;;
    il faudrait que la macro balaye bien la plage car certains numéro peuvent ne pas se suivrent.

    Pensez-vous qu'une telle macro est réalisable ? Si oui merci d'avance de m'aider

    pour l'instant j'ai juste réussi à faire un export csv tout court. Vous le verrez dans mon fichier joint.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre éprouvé
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Octobre 2011
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 46
    Par défaut
    Juste une petite idée :

    - pourquoi ne pas trier le tableau sur la colonne du numéro
    - ensuite boucler sur le tableau.
    - Tant que le numéro est identique on écrit dans le fichier.
    - Quand le numéro change on ouvre un nouveau fichier.

    A tester si ça peut répondre au problème.

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 814
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 814
    Par défaut
    Il y a des liens dans ton classeur, la sécurité de mon boulot m'empêche de l'ouvrir.

    Donc je vais répondre de manière générique : on peut parfaitement créér des fichiers .txt "à la main", mais ça nécéssite de gérer toutes les étapes.

    Morceau de code à utiliser :

    Code : 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
    19
    20
    21
    22
    23
     
    Sub ExportTxt()
        Dim NumFich1 As Integer, NumFich2 As Integer
        Dim Ligne As Long, LigneDebut As Long, LigneFin As Long
        Dim Num1 As Integer, Num2 As Integer
     
        NumFich1 = FreeFile
        Open "Sortie1.txt" For Output As #NumFich1
        NumFich2 = FreeFile
        Open "Sortie2.txt" For Output As #NumFich2
     
        '(calcul lignedebut et lignefin)
        For Ligne = LigneDebut To LigneFin
            '(calcul des valeurs)
            Print #1, "FICHIER 5.50 - GRP"
            Print #1, "NUM;N.2000." & Num1 & ";"
            Print #2, "FICHIER 5.50 - GRP"
            Print #2, "NUM;N.2000." & Num2 & ";"
        Next Ligne
     
        Close #NumFich1
        Close #NumFich2
    End Sub
    C'est juste un template, tu dois l'alimenter avec ton onglet, calculer tes limites, gérer les 2 fichiers, etc.....

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 30
    Par défaut
    Bonjour,

    merci de vos réponses.

    j'ai testé avec le code de el_slapper.

    Donc ça me génère bien 2 fichiers. Pour l'instant j'ai pas mes données mais un autre soucis, c'est que ça me répète "FICHIER 5.50 - GRP" alors que je voudrais que ça se mette qu'au début du fichier et avoir "Fin;;;" à la toute fin du fichier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    FICHIER 5.50 - GRP
    NUM;N.2000.0;
    FICHIER 5.50 - GRP
    NUM;N.2000.0;
    FICHIER 5.50 - GRP
    NUM;N.2000.0;
    FICHIER 5.50 - GRP
    NUM;N.2000.0;

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 814
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 814
    Par défaut
    Citation Envoyé par lili189 Voir le message
    Bonjour,

    merci de vos réponses.

    j'ai testé avec le code de el_slapper.

    Donc ça me génère bien 2 fichiers. Pour l'instant j'ai pas mes données mais un autre soucis, c'est que ça me répète "FICHIER 5.50 - GRP" alors que je voudrais que ça se mette qu'au début du fichier et avoir "Fin;;;" à la toute fin du fichier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    FICHIER 5.50 - GRP
    NUM;N.2000.0;
    FICHIER 5.50 - GRP
    NUM;N.2000.0;
    FICHIER 5.50 - GRP
    NUM;N.2000.0;
    FICHIER 5.50 - GRP
    NUM;N.2000.0;
    ah, mais j'ai bien dit "il faut adapter". D'autant plus que je ne peux pas voir ton EXCEL(sécurité interne), donc je ne peux pas voir quelle tronche exactement ont tes données. Donc je ne peux pas te ciseler une solution sur mesure.

    Mais pour les entêtes et les enqueues, il faut juste les sortir de la boucle for...next, comme par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        Print #1, "FICHIER 5.50 - GRP"
        Print #2, "FICHIER 5.50 - GRP"
        For Ligne = LigneDebut To LigneFin
            '(calcul des valeurs)
            Print #1, "NUM;N.2000." & Num1 & ";"
            Print #2, "NUM;N.2000." & Num2 & ";"
        Next Ligne
        Print #1, "fin;;;"
        Print #2, "fin;;;"
    Le principe, c'est que l'entête et l'enqueue ne sont chacun écrits qu'une fois, dans chacun des fichiers.

    Mais surtout, il faut remplacer mon commentaire (calcul des valeurs) par un vrai code qui aille chercher les valeurs dont tu as besoin, comme précisé par enernaej, qui donne une méthode possible.

  6. #6
    Membre éprouvé
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Octobre 2011
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 46
    Par défaut
    Voilà ce que le code peut donner
    1) il reste des parties à écrire
    2) on n'est pas limité à 2 codes donc 2 fichiers


    Code : 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    Sub ExportCSV()
      Dim DossierFichierExcel As String
      Dim NomFichierCSV As String
      Dim ChaineTemp As String
      Dim Separateur As String
      Dim intNumeroFichier As Integer
      Dim strReference     As String
      Dim intColonne       As Integer
      Dim intPremiereLigne As Integer
      Dim intDerniereLigne As Integer
      Dim intIndexLigne    As Integer
     
      '
      ' 1 - Tri du tableau ... à écrire (possibilité utiliser enregistreur macro)
      '
     
      ' 2 - Création des fichiers .CSV
      '
      DossierFichierExcel = ActiveWorkbook.Path
      Separateur = ";"
      intNumeroFichier = 1
      strReference = ""
      intPremiereLigne = 71
      intDerniereLigne = Cells(intPremiereLigne, 1).End(xlDown).Row
      For intIndexLigne = intPremiereLigne To intDerniereLigne
        If strReference = "" Then
          '
          ' 1er passage on ouvre le fichier
          '
          NomFichierCSV = Range("A1").Value
          NomFichierCSV = NomFichierCSV & intNumeroFichier & ".CSV"
          intNumeroFichier = intNumeroFichier + 1
          Open DossierFichierExcel & "\" & NomFichierCSV For Output As #1
          Print #1, "FICHIER 5.50 - GRP"
          Print #1, "NUM;" & Cells(intIndexLigne, 1) & ";"
        ElseIf Cells(intIndexLigne, 1) <> strReference Then
          '
          ' on ferme le fichier ouvert précédemment
          Print #1, "FIN" & Separateur & Separateur & Separateur
          Close
          '
          ' on ouvre un nouveau fichier
          NomFichierCSV = Range("A1").Value
          NomFichierCSV = NomFichierCSV & intNumeroFichier & ".CSV"
          intNumeroFichier = intNumeroFichier + 1
          Open DossierFichierExcel & "\" & NomFichierCSV For Output As #1
          Print #1, "FICHIER 5.50 - GRP"
          Print #1, "NUM;" & Cells(intIndexLigne, 1) & ";"
        End If
        '
        ' on écrit les données de la ligne dans le fichier
        ChaineTemp = ""
        For intColonne = 2 To 11
          ChaineTemp = ChaineTemp & Cells(intIndexLigne, intColonne) & Separateur
        Next
        Print #1, ChaineTemp
        '
        strReference = Cells(intIndexLigne, 1)
      Next
      '
      ' on ferme le dernier fichier
      Print #1, "FIN" & Separateur & Separateur & Separateur
      Close
     
    End Sub
    Il ne reste plus qu'à l'adapter au besoin réel.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 30
    Par défaut
    Bonjour enernaej,

    merci de vos réponses

    je teste ça tout de suite en adaptant ! Merci beaucoup d'avoir pris du temps pour moi.

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

Discussions similaires

  1. Export tableau Excel vers txt
    Par TheRealMike dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/05/2009, 08h53
  2. exportation excel vers txt
    Par actaruss dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 06/09/2006, 09h38
  3. Export au format txt : gestion des NULL
    Par guidav dans le forum Access
    Réponses: 3
    Dernier message: 08/08/2006, 11h28
  4. exportation tableau acces dans excel
    Par gronul dans le forum Access
    Réponses: 3
    Dernier message: 12/06/2006, 12h49
  5. [MSSqlServeur 2000] export vers fichier txt
    Par squal_13 dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 30/11/2004, 12h19

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