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 :

arrangement d'un fichier csv


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2017
    Messages : 11
    Points : 5
    Points
    5
    Par défaut arrangement d'un fichier csv
    Bonjour à tous
    Je débute totalement en VBA, en fait j'ai juste besoin d'un petit outil pour trier des données venant d'un fichier csv.
    En fait j'ai une boutique en ligne sur etsy.fr, et chaque fin de mois, je récupère mes données dans un fichier csv, le problème est que je suis obligé d'avoir une trentaine de colonnes alors que seules 7 ou 8 me suffisent pour mon compte rendu de fin de mois. Le faire à la main est assez long et pénible, j'aimerais automatiser.

    Alors j'ai déja fait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Sub import_csv()
    Dim wk1 As Workbook, wk2 As Workbook
    Dim chemin As String, fichier As String
     
    Set wk1 = ThisWorkbook
     
    chemin = wk1.Path & "/"
    fichier = "jan2019.csv"
    MsgBox chemin & fichier
     
    Workbooks.Open chemin & fichier
    End Sub
    j'arrive déja à ouvrir mon fichier csv, (je suis déja content) mais j'ai plusieurs choses que j'aimerais faire (je vais y aller petit à petit) :
    - j'aimerais pouvoir ouvrir le csv dans le document courant car actuellement il m'ouvre un nouveau classeur (il faut peut etre importer au lieu d'ouvrir ?)
    - j'aimerais pouvoir éliminer par exemple les colonnes 3, 7, 9, 10 et les redimensionner à la taille du champs de texte à l'interieur.
    - j'aimerais afficher une boite de dialogue qui liste tous les fichiers csv du dossier afin d'ouvrir celui que je veux
    - j'aimerais pouvoir remplacer tous les champs intitulés par exemple "wooden lampshade" par "L30"
    - j'aimerais créer une nouvelle colonne "Total" qui ajoute la somme des frais de port et du montant de la commande (pour chaque ligne)
    - j'aimerais créer une nouvelle ligne à la fin du tableau qui fait le total de mon chiffre d'affaire du mois

    Je vais arreter là pour le moment, ça fait déja beaucoup.
    Quand j'aurais le temps je fouillerais de mon coté et je mettrais ce que j'ai trouvé ici.
    Je ne suis pas contre un peu d'aide pour les principales commandes qui me seraient utiles dans ce petit projet.

    Merci à vous
    Pierre

  2. #2
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 405
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 405
    Points : 16 245
    Points
    16 245
    Par défaut
    Bonjour

    Si tu as 2016 ou plus récent, Tu peux faire cela avec PowerQuery intégré, sinon en add on sur 2010 et 2013
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2017
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Merci pour ta réponse,
    j'ai regardé un peu les requetes powerquery mais malheureusement je ne peux y avoir accès avec ma version d'excel, c'est une 2016 mais version mac, je peux faire uniquement des requetes vers des bases de données.
    Je vais regarder si je peux avoir une autre version plus récente sinon je me mettrais au vba

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2017
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Ca y est j'y suis arrivé tout seul comme un grand.

    Au début, on me demande de choisir le fichier csv à transformer avec une boite de dialogue et voilà le résultat : (pour mon intimité, j'ai effacé les noms, prix etc, )

    Nom : import csv.png
Affichages : 580
Taille : 71,1 Ko


    Du coup, si jamais quelqu'un a besoin d'aide la dessus , n'hésitez pas

  5. #5
    Candidat au Club
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Mars 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Mars 2019
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Bravo bebdoo !

    Je suis intéressé, je veux bien le code pour m'en inspirer (je suis en apprentissage VBA sur Mac...).

    Patrick.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2017
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Pas de problème, le voici en pièce jointe, j'ai commenté un peu le code.


    importCsv.xlsm

  7. #7
    Candidat au Club
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Mars 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Mars 2019
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Merci bebdoo.

    Je regarderai ça lundi ou mardi.

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re une proposition parmis d'autre
    bonjour
    une proposition commentée

    solution1:

    exemple
    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
    Sub test()
        Dim MyCsv, Chemin, montablo, colonnes, Rng As Range    ' variables utiles
        Chemin = "C:\Users\polux\DeskTop\toto.csv"    ' url du csv
        Application.ScreenUpdating = False    ' raffraichissement ecran inhibé
        Set MyCsv = Workbooks.Open(Chemin, local:=True)    'ouverture du CSV
        Set Rng = ActiveWorkbook.Sheets(1).UsedRange    ' on determine la plage complete du CSV
        colonnes = Array(3, 7, 9, 10)    ' les colonne que l'on veut
        montablo = CreateTableauWithNonContigue(Rng, colonnes)    'apel de la fonction de creation du tableau
        MyCsv.Close
        With ActiveSheet.Cells(1, 1).Resize(UBound(montablo), UBound(montablo, 2))    'determine la plage de reception
            .Value = montablo    ' pose du tableau obtenu
            .Columns.AutoFit    ' autsize des colonnes utilisé par le tableau
        End With
    End Sub
    '
    '
    'Fonction pour créer un tableau avec un range non contigue
    Function CreateTableauWithNonContigue(Rng As Range, colonnes)
        CreateTableauWithNonContigue = Application.Index(Rng, Evaluate("Row(1:" & Rng.Rows.Count & ")"), colonnes)
    End Function
    le csv au depart ouvert dans excel
    Nom : csv dep.JPG
Affichages : 514
Taille : 123,6 Ko

    resultat

    Nom : resuiltat.JPG
Affichages : 506
Taille : 75,4 Ko

    Proposition 2

    on créer une variable"p" qui contiendra l'union des plage colonnes et on copy -->destination
    le resultat sera le meme
    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 testU()
        Dim MyCsv, Chemin, montablo, colonnes, Rng As Range    ' variables utiles
        Chemin = "C:\Users\polux\DeskTop\toto.csv"    ' url du csv
        Application.ScreenUpdating = False    ' raffraichissement ecran inhibé
        Set MyCsv = Workbooks.Open(Chemin, local:=True)    'ouverture du CSV
        Set Rng = ActiveWorkbook.Sheets(1).UsedRange    ' on determine la plage complete du CSV
        colonnes = Array(3, 7, 9, 10)    ' les colonne que l'on veut
        Set maplage = CreateRangeWithUnionRangeNonContigue(colonnes)    'on créé une plage non contigue avec la fonction
        maplage.Copy Destination:=ThisWorkbook.Sheets(1).Cells(1)  ' on copy destination tout simplement
        MyCsv.Close    ' on peut fermer le csv
        With ActiveSheet:
            .Cells(1, 1).Resize(.UsedRange.Rows.Count, UBound(colonnes) + 1).Columns.AutoFit  ' autsize des colonnes utilisé par le tableau
        End With
    End Sub
    'fonction pour créer un range avec l'union de rangeS non contigues
    '
    '
    Function CreateRangeWithUnionRangeNonContigue(colonnes) As Range
        Dim p As Range
        With ActiveSheet
            For i = LBound(colonnes) To UBound(colonnes) ' union  de plage colonnes dans "p"
                If p Is Nothing Then Set p = .Cells(1, colonnes(i)).Resize(.UsedRange.Rows.Count, 1) Else Set p = Union(p, .Cells(1, colonnes(i)).Resize(.UsedRange.Rows.Count, 1))
            Next
        End With
        Set CreateRangeWithUnionRangeNonContigue = p
    End Function
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  9. #9
    Candidat au Club
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Mars 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Mars 2019
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Bonjour Patricktoulon,

    Merci pour tes codes.

    Le 1er fonctionne nickel.
    Mais pas le deuxième : ActiveSheet n'est pas alimenté, il me semble.
    C'est sûrement facile à corriger, mais pas encore pour moi qui suit en apprentissage
    Pour info, je suis sur Mac avec Excel 16.23

Discussions similaires

  1. Mise à jour d'une table avec un fichier csv
    Par blackangel dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 26/05/2005, 15h46
  2. Importation de fichier CSV vers une base Interbase
    Par PrinceMaster77 dans le forum ASP
    Réponses: 3
    Dernier message: 15/03/2005, 16h18
  3. Mettre a jour BD avec fichier csv
    Par Looping94510 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 07/02/2005, 19h56
  4. Sortir un fichier csv sur base d une requete
    Par Freeman_80 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 12/01/2005, 12h21
  5. Réponses: 2
    Dernier message: 14/05/2004, 13h55

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