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 :

Extraire des données d'un fichier CSV vers un fichier Excel avec critères


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2021
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2021
    Messages : 25
    Par défaut Extraire des données d'un fichier CSV vers un fichier Excel avec critères
    Bonjour le Forum,

    J'aurai besoin de vous étant encore débutant dans le domaine du VBA, je voudrai réaliser une macro mais je n'ai aucune idée de comment y parvenir malgré des recherches sur le net.

    La macro que je souhaiterai réaliser doit extraire des données d'un fichier CSV et les coller dans un fichier Excel avec des critères.

    Voici le fichier CSV en question :

    Nom : screen_csv.PNG
Affichages : 146
Taille : 35,6 Ko

    Et voici le fichier Excel :

    Nom : screen_excel.PNG
Affichages : 161
Taille : 60,7 Ko

    Comme vous pouvez le constater le seul lien entre ces deux fichiers est la présence d'alias. Il faut donc ce servir de ces alias pour l'extraction, enfin c'est ce que je propose comme idée ^^.

    L'extraction devrait suivre ce processus :

    Pour le tableau Configuration :

    Tout d'abord, sur le fichier CSV, on identifie l'alias des numéros montés "ZzNumMontAlias" (ex : ZzNumMontCXN3), puis on va se placer sur la ligne d'en-dessous de l'alias identifié et on va enregistrer le contenu dans une variable intermédiaire (par exemple si on détecte l'alias ZzNumMontCXN3, on enregistre la ligne en-dessous de cet alias donc 4134) et on colle la valeur enregistrée dans le fichier Excel au bon endroit, c-à-d dans la colonne "Num monté" à colonne F et à la ligne de l'alias identifié (dans mon exemple, on collera du coup le 4134 à la colonne F, ligne 7).

    On fait la même chose pour les alias des références montés du fichier CSV "ZzRefMontAlias" (ex : ZzRefMontCXN3) que l'on colle dans le fichier Excel au bon endroit (dans mon exemple, on collera du coup le 4351 à la colonne G, ligne 7).

    Pour le tableau Masses :

    On fait exactement la même manipulation que le tableau Configuration sauf qu'on identifie dans le fichier CSV l'alias
    valeurs des masses "ZzValAlias" ( ex : ZzValMasse1) que l'on colle dans le fichier Excel au bon endroit c-à-d dans la colonne F et à la ligne de l'alias identifié (ex : si on identifie ZzValMasse1 sur le CSV on collera l'information dans le fichier Excel à la colonne F de la ligne 19).

    Bien sûr, je voudrai faire une boucle sur l'ensemble des alias des deux tableaux afin que les informations du fichier CSV se reportent dans le tableau automatiquement.

    N'hésitez pas à me poser des questions afin de rendre claire mon sujet, je répondrai le plus rapidement possible

    Je vous remercie d'avance et bonne journée !

    PS : J'ai joint les deux fichiers Excel et CSV.

    extraction_test.zip

  2. #2
    Membre Expert
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 276
    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 276
    Par défaut
    Bonjour

    Personnellement, avec Excel 2016 je conseillerai d'utiliser Power Query pour transformer votre fichier csv :
    - charger le fichier
    - le transposer
    - scinder la 1ere colonne pour obtenir vos codes
    - mettre le résultat en "tableau"

    Puis dans votre fichier Excel, des SOMME.SI.ENS permettront de récupérer vos valeurs.

    Je ne me souviens plus depuis quand est disponible la fonction "Splitter.SplitTextByCharacterTransition" dans Power Query car elle permet de couper suivant les transitions "minuscule/majuscule", assez pratique avec la structure de vos codes

    A adapter suivant votre chemin d'accès au fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    let
        Source = Csv.Document(File.Contents("...\CSV_Muzan93.csv"),[Delimiter=";", Columns=74, Encoding=1252, QuoteStyle=QuoteStyle.None]),
        #"Table transposée" = Table.Transpose(Source),
        #"Diviser la colonne selon les transitions de caractères" = Table.SplitColumn(#"Table transposée", "Column1", Splitter.SplitTextByCharacterTransition({"a".."z"}&{"0".."9"}, {"A".."Z"}), {"Column1.1", "Column1.2", "Column1.3", "Column1.4"}),
        #"Type modifié" = Table.TransformColumnTypes(#"Diviser la colonne selon les transitions de caractères",{{"Column2", Int64.Type}})
    in
        #"Type modifié"
    Stéphane

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2021
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2021
    Messages : 25
    Par défaut
    Citation Envoyé par Raccourcix Voir le message
    Bonjour

    Personnellement, avec Excel 2016 je conseillerai d'utiliser Power Query pour transformer votre fichier csv :
    Bonjour Stéphane, merci de ta réponse mais je voudrai passer par le VBA c'est une contrainte car l'utilisateur devra simplement cliquer sur un bouton pour lancer le processus d'extraction d'où l'idée de passer par une macro en VBA.

    L'utilisation de Power Query est pratique mais pour mon cas ça ne l'est pas car le fichier CSV et le fichier Excel changeront chaque jour (création d'autre fichier Excel ou Csv) donc ce ne sera pas toujours les mêmes fichiers.

    Le but est que l'utilisateur ne fasse rien mis à part cliquer sur un bouton pour lancer le processus donc le VBA serait le mieux car adapter le Power Query tous les jours ne leur simplifierait pas la tâche surtout qu'ils ont autre chose à faire derrière.

    Je sais pas si du coup tu as une solution en VBA.

    Bien Cordialement,

    Muzan93

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/01/2015, 09h18
  2. [XL-2007] Extraire des données d'un fichier Xml avec des balises identiques
    Par Danieldu54 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/03/2011, 20h45
  3. Réponses: 8
    Dernier message: 31/10/2007, 09h10
  4. Réponses: 4
    Dernier message: 17/01/2007, 09h09
  5. Extraire des données dans un fichier .csv
    Par orj30754 dans le forum C
    Réponses: 7
    Dernier message: 03/11/2006, 14h48

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