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 :

screen csv

Et voici le fichier Excel :

screen excel

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.

31extraction-test.zip (13.39 Ko)

Bonsoir !

Je vous livre une proposition via Power Query :

58excel-muzan93.xlsx (34.47 Ko)

Si le passage par VBA est un horizon indépassable, je laisse le soin à nos amis spécialistes d'apporter leur concours.

Bonjour

On peut passer par PowerQuery intégré à Excel (onglet Données) plutôt que VBA.

Tout dépend ce que tu fais ensuite dans ces tableaux

Modifier le chemin en S1 puis Données, Actualiser tout

28excel-muzan93.xlsx (35.06 Ko)

Merci beaucoup pour vos réponses. Mais je ne connais pas PowerQuery je ne sais pas comment cela fonctionne, en faite je voulais utiliser le VBA car c'est des actions que l'utilisateur va devoir effectué plusieurs fois la journée et avec pas forcément le même fichier CSV.

RE

Justement la requête est paramétrée en S1 dans mon exemple dont adaptable à tout csv

RE JFL et 78chris,

J'ai pris le temps de regarder vos deux fichiers merci pour votre temps de travail.

Pour les deux fichiers partagés, la colonne Ref monté n'a pas été complété grâce à l'extraction des données du csv je ne sais pas pourquoi peut être un oublié.

Et le problème avec le PowerQuery si j'ai bien compris c'est que l'utilisateur est obligé de se baser sur ce fichier Excel.

J'ai oublié de préciser que les fichiers Excel et Csv que l'on peut voir dans les captures sont des fichiers que l'utilisateur sera amené à créer, ce ne sont pas des fichiers fixes. Et sur lesquelles il fera des manipulations comme l'extraction du csv vers le fichier excel. Les fichiers que j'ai partagé en pièce jointe sont des exemples des fichiers Csv et Excel que l'utilisateur pourra créer.

Du coup, c'est pour cela que je voulais passer de préférence par du VBA car le but est d'automatiser le plus possible ces tâches et je pense qu'avec le PowerQuery sauf si je me trompe, il est obligé d'utiliser le fichier Excel afin d'extraire des infos du CSV.

Justement la requête est paramétrée en S1 dans mon exemple dont adaptable à tout csv

Et si j'ai bien compris, par rapport à ta solution 78chris, il faut que l'utilisateur renseigne lui même le chemin du fichier dans la S1, ce qui pose problème car je voudrai que l'utilisateur le renseigne depuis l'explorateur de fichier et non manuellement.

Personnellement j'ai déjà fait une macro en VBA qui permet d'extraire du fichier Excel des données et de les envoyer vers un fichier CSV et tout ce fait automatiquement et en sélectionnant le fichier à extraire et le fichier de destination via l'explorateur de fichier.

Je voulais juste du coup faire une macro qui fasse la même mais dans l'autre sens comme vous l'avez fait à travers PowerQuery mais toujours en VBA parce que c'est plus pratique pour l'utilisateur car la plupart des macros que j'ai fait sont en VBA et passer à PowerQuery va être compliqué.

Ah oui, c'est bien que je précise ce point, l'ensemble des macros seront utilisées grâce à des boutons depuis un fichier Excel qui servira d'IHM, du coup je pense que le VBA est la seule solution sauf si vous avez des idées et que je me trompe bien évidemment je suis là pour apprendre.

Bien cordialement,

Muzan93

J'appelle à l'aide à tous les spécialistes en VBA pour m'aider si possible.

Pour aider les développeurs VBA qui s'intéresseraient à mon sujet.

J'ai listé l'ensemble des étapes que devra réaliser la macro.

Etape 1 : Ouvrir le fichier CSV (depuis l'explorateur de fichiers)

Etape 2 : Ouvrir le fichier Excel (depuis l'explorateur de fichiers)

Etape 3 : Aller sur le fichier CSV

Etape 4 : Identifier l'alias sur le CSV (ZzNumMontAlias/ZzRefMontAlias/ZzValAlias)

Etape 5 : Se positionner en dessous de l'alias présent dans le fichier CSV (soit ligne 2 du CSV à la colonne de l'alias)

Etape 6 : Copier le contenu de la cellule

Etape 7 : Aller sur le fichier Excel

Etape 8 : Coller l'information (issu du fichier CSV) dans le fichier Excel au bon endroit :

- Si ZzNumMontAlias (colonne F, ligne où il y a l'alias (TOTO,etc...) dans le fichier Excel)

- Si ZzRefMontAlias (colonne G, ligne où il y a l'alias (TOTO,etc...) dans le fichier Excel)

- Si ZzValAlias (colonne F, ligne où il y a l'alias Masse(1 à n) dans le fichier Excel)

Je remercie d'avance tous ceux qui m'aideront

Muzan93

Bonjour

On peut combiner VBA et POwerQuery : par exemple pour le choix du fichier...

On peut travailler avec des fichiers externes ou depuis les données du classeur ou un mixte des 2 (le cas ici)

Ce qui manque c'est la logique de traitement avec les étapes pour comprendre où se situe la partie demandée

Si tu tiens à du 100% VBA il reste à attendre un VBiste...

Merci pour ta réponse Chris.

On peut combiner VBA et POwerQuery : par exemple pour le choix du fichier...

Je me disais bien que c'était possible après je ne sais pas comment m'y prendre, j'ai regardé ce que tu avais fait en PowerQuery mais avant ta proposition je ne connaissais pas du tout cette fonctionnalité sur Excel.

On peut travailler avec des fichiers externes ou depuis les données du classeur ou un mixte des 2 (le cas ici)

Ce qui manque c'est la logique de traitement avec les étapes pour comprendre où se situe la partie demandée

Je sais pas si c'est de ça que tu parles mais tu veux que j'explique la logique de traitement afin de comprendre pourquoi je souhaite extraire ces données du fichier CSV vers un fichier Excel ?

Si tu tiens à du 100% VBA il reste à attendre un VBiste...

En faite, je souhaite juste la solution qui permet à l'utilisateur le moins d'effort et vu que la plupart des traitements ont été faits en VBA et sont utilisable depuis une IHM sur Excel. Bah l'option du VBA me paraissait plus pratique pour eux et pour moi.

RE

Merci pour ta réponse Chris.

On peut combiner VBA et POwerQuery : par exemple pour le choix du fichier...

Je me disais bien que c'était possible après je ne sais pas comment m'y prendre, j'ai regardé ce que tu avais fait en PowerQuery mais avant ta proposition je ne connaissais pas du tout cette fonctionnalité sur Excel.

Ouvrir un fichier depuis l'explorateur de fichiers ne fournit pas les mêmes paramètres à Excel que d'ouvrir depuis l'interface

Quand à ouvrir un csv c'est un non sens car le csv est paramétré à l'américaine et dans la majorité des cas la transformation qu'effectue Excel bousille le fichier...

Pour les étapes du processus complet, je ne parlais pas de ce que tu avais déjà décrit dès le début mais de

"les fichiers Excel et Csv que l'on peut voir dans les captures sont des fichiers que l'utilisateur sera amené à créer"

"extraire du fichier Excel des données et de les envoyer vers un fichier CSV"

qui ne correspondent à la demande initiale limité à la complétion d'un Excel à partir d'un csv

RE, je vais essayer de mieux expliquer la démarche centrale de mon projet.

L'utilisateur est amené au tout départ à exporter l'ensemble des champs d'un fichier PDF vers une feuille CSV. Ce qui va créer un fichier CSV, c'est pour cela que j'ai insisté sur le fait que le fichier CSV sont crée par l'utilisateur car il le crée en exportant les champs de son fichier PDF (les ZzMachin). Une fois le fichier CSV crée, il va créer un fichier Excel celui où il y a les deux tableaux Configuration et Masse.

L'utilisateur va renseigner manuellement les colonnes, Nature, Alias, Designation, Num attendu et Ref Attendu.

J'ai ensuite une macro qui récupère les données des colonnes Num attendu et Ref attendu pour les matériels et Valeur min et Valeur max pour les masses du fichier Excel et les colle dans le fichier CSV au bon endroit (en fct de l'alias).

Une fois le fichier CSV renseigné avec les valeurs des colonnes Num attendu et Ref attendu pour les matériels et Valeur min et Valeur max pour les masses.

L'utilisateur va remplir manuellement sur le fichier CSV les alias respectives des colonnes Num monté, Ref monté et Valeur Masse donc les (ZzNumMontAlias,ZzRefMontAlias et ZzValAlias).

On aura donc un fichier CSV rempli.

Je veux donc une macro qui fasse maintenant l'extraction des données du CSV Num monté, Ref monté et Valeur Max (en fct de l'alias) pour les coller dans le fichier Excel au bon endroit pour avoir le fichier Excel rempli.

Bonjour

Juste pour info : PowerQuery peut exploiter directement des pdf.

Pour le VBA : il faut un code indépendant du fichier donc un complément xlam ou placé dans le fichier de macros personnelles (moins pratique à distribuer)

Si l'utilisateur ouvre depuis l'explorateur de fichier et non depuis Excel le code devra repérer les deux fichiers concernés déjà ouverts au lancement...

Re,

Quand je dis ouverture depuis l’explorateur de fichier c’est bien depuis Excel. Je lance la macro et je choisis le fichier à ouvrir c’est de ça dont je parle

Du coup comment je fais pour utiliser Power Query depuis VBA ?

RE

Je continue juste pour info

On peut utiliser le pseudo dialogue qui n'ouvre pas le fichier csv mais en récupère le nom pour modifier un paramètre utilisé par une requête présente dans le même classeur que le code VBA

Le nom du classeur Excel ouvert peut de même modifier un autre en paramètre PowerQuery.

A noter qu'en VBA quand on code correctement, on ne se déplace pas d'un classeur à un autre et on n'utilise pas de copie coller pour une cellule (trop lent) car VBA on sait lire la valeur d'une cellule et valoriser une autre directement.

Modifie le titre de ton fil pour préciser VBA...

Bonjour,

Voici une proposition

Salut, je te remercie ça fonctionne à merveille !

Rechercher des sujets similaires à "extraire donnees fichier csv criteres"