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 :

Exporter plusieurs .Csv en fonction de différentes valeurs


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Urbaniste
    Inscrit en
    Mars 2016
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2016
    Messages : 80
    Par défaut Exporter plusieurs .Csv en fonction de différentes valeurs
    Bonjour à toutes et à tous, j'appelle a vos connaissances....

    Je réalise une macro pour automatiser l'export de différentes données en plusieurs CSV.

    J'ai réussi a créer ma macro pour l'import des données, le traitement de celles-ci, etc...
    Maintenant vient le moment de l'export et c'est la ou je coince : :
    Comme vous pouvez le voir en PJ, il y a plusieurs type de données ( maximum 10 différentes) dans la colonne A : BT, HT, EU, EP.... Mon but est de faire un CSV pour chaque type de données.
    Pour l'instant, j'ai réussi a faire l'export en CSV de toute la feuille, mais je n'arrive pas a exporter un CSV pour chaque type de données...

    En vous remerciant par avance

    Jujudeo


    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
    Sub Exporter() 'copie sauvegarde rapport
    Application.ScreenUpdating = False
     
    Dim nom, chemin As String
     
     nom = InputBox("Nom du fichier ?", "nom")
        chemincsv = ThisWorkbook.Path & "\Export\" & nom & ".csv"
        rep = MsgBox("La feuille excel a été exportée sous : " & nom)
     
     
    Worksheets("Feuil1").Select
    Dim Plage As Object, oL As Object, oC As Object, Tmp As String, Sep$
    Sep = ";"
    Set Plage = ActiveSheet.Range("A1:AH" & ActiveSheet.Range("A65000").End(3).Row)
    Open chemincsv For Output As #1
    For Each oL In Plage.Rows
    Tmp = ""
    For Each oC In oL.Cells
    Tmp = Tmp & CStr(oC.Text) & Sep
    Next
    Print #1, Tmp
    Next
    Close
     
    Application.DisplayAlerts = False
    End Sub
    Fichiers attachés Fichiers attachés

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par jujudeo Voir le message
    Bonjour,

    Il vous faut créer une table sans doublons de vos dix types et faire une première boucle à partir de cette table. Chaque item de la boucle lancera chaque fois votre procédure Exporter. Il faudra bien sur enlever l'InputBox de celle-ci. Le plus simple serait de mettre votre type en paramètre de lancement d'Exporter.

  3. #3
    Membre confirmé
    Homme Profil pro
    Urbaniste
    Inscrit en
    Mars 2016
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2016
    Messages : 80
    Par défaut
    bonjour,

    Si je comprends bien, je dois créer une feuille supplémentaire "TABLES" avec mes 10 types ! Mais l'histoire de la boucle j'ai du mal a comprendre... ou du moins a traduire en vba...

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par jujudeo Voir le message
    Soit une table des types nommée "TableDesTypes" dans un onglet "Paramètres"

    Pièce jointe 420802

    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
    66
    67
    68
    69
    70
    71
    72
    73
     
    Option Explicit
     
     
    Sub BouclerSurLaTableDesTypes()
     
    Dim AireDesTypes As Range, CelluleDesTypes As Range
    Dim AireDesDonnees As Range, CelluleDesDonnees As Range
    Dim DerniereColonne As Long, DerniereLigne As Long
    Dim Chemin As String
     
        Chemin = ThisWorkbook.Path & "\Export"
      ' Chemin = ThisWorkbook.Path
     
       Set AireDesTypes = Sheets("Paramètres").ListObjects("TableDesTypes").DataBodyRange
     
       With Sheets("Feuil1")
            DerniereColonne = .UsedRange.SpecialCells(xlCellTypeLastCell).Column
            DerniereLigne = .Cells(.Rows.Count, 1).End(xlUp).Row
            Set AireDesDonnees = .Range(.Cells(1, 1), .Cells(DerniereLigne, 1))
       End With
     
       Application.ScreenUpdating = False
       For Each CelluleDesTypes In AireDesTypes
           Exporter2 AireDesDonnees, CelluleDesTypes, Chemin
       Next CelluleDesTypes
       Application.DisplayAlerts = False
     
     
       Set AireDesTypes = Nothing
       Set AireDesDonnees = Nothing
     
     
    End Sub
     
     
     
    Sub Exporter2(ByVal Airedesdonnees2 As Range, ByVal TypeChoisi As String, Chemin2 As String) 'copie sauvegarde rapport
     
    Dim CheminCsv As String
    Dim Plage As Range, oL As Range, oC As Range
    Dim Tmp As String, Sep As String
     
            CheminCsv = Chemin2 & "\" & TypeChoisi & ".csv"
     
            Sep = ";"
            Open CheminCsv For Output As #1
     
            ' Copie de la ligne de titre
            Tmp = ""
            Set Plage = Range(Airedesdonnees2(1), Airedesdonnees2(1).Offset(0, 6))
            For Each oC In Plage
                Tmp = Tmp & CStr(oC.Text) & Sep
            Next oC
            Print #1, Tmp
            Set Plage = Nothing
     
     
            For Each oL In Airedesdonnees2
                Tmp = ""
                If oL = TypeChoisi Then
                   Set Plage = Range(oL, oL.Offset(0, 6))
                   For Each oC In Plage
                       Tmp = Tmp & CStr(oC.Text) & Sep
                   Next oC
                   Print #1, Tmp
                   Set Plage = Nothing
     
                End If
            Next oL
            Close
     
    End Sub

  5. #5
    Membre confirmé
    Homme Profil pro
    Urbaniste
    Inscrit en
    Mars 2016
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2016
    Messages : 80
    Par défaut
    l'idée de la table des types me plait beaucoup car je peux modifier par la suite si j'ai besoin !

    mais il me sort le message d'erreur " impossible d’exécuter la macro "....". Il est possible qu'elle ne soit pas disponible dans ce classeur ou que toutes les macros soient désactivées" quand je mets votre code ! et si je remplace par le mien cela marche donc mes macros sont activées...

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par jujudeo Voir le message
    Modifier le chemin.

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

Discussions similaires

  1. [XL-2010] Supprimer plusieurs colonne en fonction d'une valeur
    Par Lexie91 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 28/09/2016, 14h50
  2. Réponses: 4
    Dernier message: 29/06/2016, 11h34
  3. [AC-2013] "Fusionner" plusieurs lignes en fonction de la valeur d'un champ
    Par pommimat dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 18/04/2016, 10h59
  4. Réponses: 4
    Dernier message: 02/06/2015, 02h28
  5. Réponses: 2
    Dernier message: 14/09/2011, 16h17

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