Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Ajout lignes dans fichier CSV avec filtrage - VBA

Joshua P

XLDnaute Nouveau
Bonjour à tous !
Je dois être le énième clampin qui pose des questions sur l’exploitation des scripts en VBA pour des fichiers CSV ! Je me suis mis au script VBA sous Exel il y a exactement 2 jours (avec YT) dans le cadre de mon alternance. Mes bases sont donc très lacunaires !

Ce que j’aimerais faire, c’est rajouter chaque jour une ligne dans un fichier CSV, sans pour autant modifier ou supprimer le contenu du fichier CSV existant. J’explique :

- Tous les jours vers 17h, le service de production renseigne les codes défauts de la machine pour la journée de production. Une fois ces codes renseignés (les codes sont propres à l'entreprise) la personne appuierait sur un bouton « valider » (par exemple) et une ligne serait rajoutée dans un fichier CSV selon la forme suivante :



---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- Le lendemain, rebelote, la personne renseigne de nouveau les codes défaut de la journée et rajoute donc un ligne dans le fichier CSV qui prend la forme suivante :




Ainsi, vous comprendrez donc que le fichier CSV va grossir au fil du temps, car chaque jour, une nouvelle ligne sera ajoutée avec les codes défaut de la journée dans ledit fichier CSV.J'ai réussi à écrire dans un fichier CSV avec l’outil VBA : Open fichier For Output As #1.
Sauf que cet outil supprime le contenu du fichier CSV et ajoute ensuite les informations de la journée. Au final, le fichier CSV ne contient donc que les informations de la journée et tout le contenu des anciens jours part en fumée... Ce qui, vous l’imaginez, ne m’arrange pas du tout dans mon cas !
Je me suis donc dit, pas grave je vais dans un premier temps ouvrir le fichier CSV avec l’outil VBA : Open fichier For Input As #1 , prendre tout son contenu avec une boucle while et ensuite rajouter à la fin ma petite ligne de la journée.
Oui… sauf que j’ai un petit peu peur concernant la suite, quand le fichier CSV va devenir de plus en plus gros au fil des mois et au fur et à mesure des rajouts des codes défaut. Sachant que l’idée est d’avoir 1 fichier CSV par an.

De plus, il faut que le script soit suffisamment robuste pour prendre en compte le cas où, une personne de la production a fait une erreur et modifie les codes défauts d'une ancienne journée. Il ne faut pas que le script ajoute bêtement une ligne à la fin du fichier, mais qu'il écrase la ligne du fichier CSV ayant la même date.

Je suis conscient que c'est un peu facile ce que je demande, en mode "ba voilà merci de me donner la solution tout cuit dans le bec". Donc si vous n'avez ni l'envie (ce que je comprends totalement), ni le temps de vous palucher un code VBA, vous pouvez simplement me donner le nom des méthodes ou des outils VBA qui peuvent m'aider. Je ferai mes recherches de mon côté pour tenter de les comprendre et de les exploiter.Il y a de cela quelques temps, quand je faisais du Javascript, il y avait des fonctions incluses qui permettait de faire cela. Je me dis donc (et j'espère) que Exel en propose également. Car après plus de 3 heures de recherche (j'ai vraiment chercher et c'est en ultime recours que j'en appelle à vous) je suis toujours bredouille !Et si vous avez du temps et de l'énergie à me consacrer (déjà merci) et il me sera plus confortable si vous détaillez un peu les outils et les objets VBA que vous utilisez.
Bonne journée et bonne fin d'année.
Et comme dit l'autre - à force de faire des apéros seul, j'ai peur d'attraper le verre solitaire !
 

patricktoulon

XLDnaute Barbatruc
bonsoir
avec open for c'est append pour ajouter et non output
et on ouvre jamais un new fichier ou new instance de fichier avec "as #1"
dim x&
x=freefile
if dir (fichier)="" then' si le fichier n'existe pas encore

Open fichier For OutputAs #x ' on l'ouvre alors avec output
else' sinon
Open fichier For Append As #x' on l'ouvre en mode append
end if
'et tu écris dedans
 

Joshua P

XLDnaute Nouveau
Premièrement, merci pour votre réponse.

La méthode Append permet en effet d'ajouter une ligne et pour ça je vous en remercie.
Cependant, un problème subsiste. Cette méthode ne règle pas le problème des doublons. C'est-à-dire que si je rajoute une ligne dans le fichier CSV qui existe déjà , il faut écraser la ligne existante. A savoir que c'est la date en début de ligne qui fait office de contrôle des doublons.
Car en prenant votre méthode, voici le résultat si j'exécute plusieurs fois la macro :


-----------------------------------------------------------------------------------------------------------------------
On constate donc que les codes défauts de la journée du 18/12/2021 apparaissent à 3 reprises dans le fichier CSV, ce qui n'est pas correct.
Comment faire pour écraser la ligne si la date que je viens de choisir correspond à une date déjà présente dans le fichier CSV ?
De plus je viens de penser à un nouveau problème. Si je me trompe dans la date, et que j’insère un ligne d'une date antérieure devant un ligne d'une date supérieure ...
Bref beaucoup de problèmes !
 

Discussions similaires

Réponses
7
Affichages
299
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…