Importation données CSV avec nombre colonnes variables

Bonsoir

J’importe des données CSV qui contiennent des données financières dans un tableau. Ce fichier CSV à comme particularité de ne pas avoir toujours le même nombre de lignes, pas toujours les mêmes chapitres et surtout pas le même nombre de colonnes suivant les lignes. Les données à récupérer dépendent du chapitre, de la devise, ..... Donc je dois tout charger et ensuite analyser les lignes pour extraire certaines informations. Une information est repérée par son titre et sa valeur, mais elles peuvent se situer en colonne C ou E ou G ou .....

Je n’ai aucun problème pour l’importation. Mon problème réside dans le fait que je n’arrive pas à remplir correctement les cellules par ligne.

En gros, je n’arrive pas à détecter la fin d’une ligne du fichier csv et donc à l'arrivée, c'est un peu n'importe quoi.

Y a-t-il une astuce pour cela ?

Merci pour votre aide.

Jacques

Bonsoir,

Avec toutes les informations on ne peut plus util sur la structure et les données que ton CSV est susceptible de contenir !

Je ne peut que compatir avec toi😂

Bonsoir,

Regarde du coté de Power Query inclus dans ta version d'excel.

Cordialement

Bonsoir

Merci pour l'information. Je vais regarder et je communiquerai si j'ai trouvé une solution.

Cordialement

Bonjour

J'ai réussi à récupérer mes données et les traiter. Tout n'est pas encore parfait, mais la contrainte du nombre de colonnes par ligne

ne me pose plus trop de problème. Je mets en pièce jointe le tableau. Voir routine IB_Charge_Fichier

Il est certainement possible de faire plus performant. Personnellement, ce que je cherche surtout, c'est de pouvoir maintenir ce code dans le temps.

Donc je privilégie la clarté à la performance. Et ce n'est pas simple.

Bonjour Jjulien

Pour maintenir un code applicatif, rien ne remplace une vraie documentation, pour décrire la conception, l'entrée dans le programme, l'architecture des données et des traitements avec des diagrammes.

Votre feuille "Onglets" permet d'accéder aux différentes feuilles mais ne constitue pas une documentation décrivant un découpage fonctionnel mais plutot un découpage technique.

Globalement votre code commençant par Option Explicit est déjà un bon début.

Personnellement, dans chaque module, chaque fonction peut faire l'objet d'une description (exemple cette fonction retourne ....), je vais personnellement plus loin (je décrit les entrées, les sorties, les fonctions appelées, les fonctions appelantes (permet de faire un arbre des appels (cf. diagramme de traitement))

La qualité technique de maintenance du code peut commencer à un découpage fonctionnel en différents modules (semaine, mois, import, resultat, ...) et non avec un seul module (ici Module1)

Ensuite faire attention à l'enchainement des traitements car IB_Charge_Fichier commence par Wrk_File_Name = Cells(..) mais la feuille technique ThisWorkbook n'affecte pas une feuille active par défaut. Si bien que Wrk_File_Name est vide lorsque j'utilise le code donc le traitement qui suit ne peut fonctionner.

Un traitement comme InitDebutAnnee, initialise la feuille active avec "Résultats" et se termine avec la feuille active "Commentaires"

Pas tout compris. Déjà, j'ai compris que l'on peut faire plusieurs modules. Je vais commencer par regarder pas là.

merci pour tous ces commentaires qui vont m'aider à progresser.

Bonne journée

jacques

Bonjour Jacques

En entête de chaque module:

je précise la date de dernière modification, et le contexte de la modification

je liste l'ensemble des fonctions qui suivent : cela me permet de ne pas parcourir un module si la fonction n'y est pas, et voir si les fonctions répondent au découpage ou s'il faut que je déplace une fonction d'un module à l'autre

Les modules.

Si je comprends bien, je peux mettre chaque sub dans un module différent et renommer le nom des modules.

Je peux garder ma déclaration de variables avant la première subroutine et elles seront valables pour tous les modules.

Mais pour cela, je dois remplacer DIM par PUBLIC

Sur la première sub j'ai ajouté Public. J'avais lu quelque part que c'etait bien.

N'y aurait il pas un site qui montre des exemples de codage avec plusieurs modules, ........

Lorsque j'écris du code, je fouille en permanence sur internet et bien que ça fonctionne, il est évident que c'est un empilement d'instructions que j'essaie d'ordonner, mais que ça manque de structuration.

Tu es sur la bonne voie

J'essaye de ne pas dupliquer des fonctions si je dois ajouter un paramètre ou des contrôles supplémentaires, j'ajoute parfoiS une gestion d'erreur suite à des tests complémentaires mais j'ai parfois des effets de bords.

j'essaye de ne pas utiliser des constantes pour les colonnes des données, le mieux est d'utiliser des tableaux structurés.

pour les index de colonnes, j'utilise un tableaux des titres d'entête et un tableau d'index des colonnes dans lesquels ses titres doivent se trouver. Avant l'import je vérifie que le format du fichier d'import n'a pas changé.

Ensuite dans le traitement d'import, je réutilise les tableaux précités.

je ne suis pas encore organisé au mieux : je commence à créer des fichiers json par projet excel afin de reconstruire mes projets xlsm xla

Par contre, je n'ai rien pour faire des tests automatiques.

je n'ai pas de recherche de traitements semblables, je me suis créé un outil pour comparer les modules intégrés dans un projet xl* et les modules exportés, en comparant les nombres de lignes et la date de dernière modif en entête de module : cela fait double emploi avec les projets json descriptifs de projets xl*

pour comparer des extractions de différents projets xl*, j'utilise winmerge, c'est parfois un peu long

Il m'arrive de récupérer du code sur internet mais cela marche parfois pour un cas particulier mais pas autant que je voudrais : mieux vaut se faire ses propres codes.

coder n'est pas documenter quoique j'ai écrit un extracteur de commentaires qui devrait permettre de gérer une Doc technique des algorithmes.

Rechercher des sujets similaires à "importation donnees csv nombre colonnes variables"