Effacer des données d'un CSV

Bonjour,

Voilà j'ai des fichiers CSV (générés par un drone) et il y a parfois plusieurs milliers de lignes de données.

Mon soucis est que j'aimerais garder seulement 99 lignes mais que ce soit une moyenne de toutes les lignes.

Exemple : j'ai 2000 lignes donc 2000/99=20 (j'arrondi le résultat car pas besoin des décimales) il me faudrait garder la ligne 1, effacer les 20 suivantes garder la 22ème effacer les 20 suivantes etc...

Est il possible de créer une macro qui ferait ça et pouvoir choisir le nombre de lignes a effacer, 20 étant un exemple, car le faire manuellement comment dire euuuh c'est looooong

Merci

Bonjour,

mais non, si tu t'y prend bien ça prend 10 s.

Dans une colonne supplémentaire tu mets un titre, et en ligne 2 =MOD(LIGNE();20) que tu copies jusqu'en bas par un double-clic sur la poignée de recopie.

Tu mets un filtre automatique et sur cette colonne tu décoches une seule valeur, celle que tu garderas. Par exemple 0.

Tu sélectionnes de la ligne 2 à la dernière (lignes entières), clic-droit dessus et 'Supprimer'.

Enlève le filtre pour retrouver tes 1 ligne/20 survivantes.

eric

Bonjour,

une proposition par macro (brute de forge, ... à optimiser sans doute)

Bonjour Xero, le forum,

Je te propose ce code VBA (pas besoin de supprimer des lignes) :

Option Explicit

Sub ReadCSV()
  Dim chn$, lng As Byte, nb As Byte, lg&: On Error GoTo ErrFile
  Do
    chn = InputBox("Nom du fichier (sans l'extension) :", "FileName")
    lng = Len(chn): If lng = 0 Then Exit Sub ' sortie si Echap !
  Loop Until lng >= 5 ' le nom doit avoir 5 caractères minimum !
  Open ActiveWorkbook.Path & "\" & chn & ".csv" For Input As #1
    Application.ScreenUpdating = 0
    Do While Not EOF(1)
      Line Input #1, chn
      If nb = 0 Then ' on prend en compte la ligne du fichier
        lg = lg + 1: Cells(lg, 1) = chn
      End If
      nb = nb + 1: If nb = 20 Then nb = 0 ' nombre 20 à adapter
    Loop
  Close #1: Exit Sub
ErrFile:
  MsgBox "Le fichier " & chn & ".csv n'existe pas.", 48, "Nom de fichier erroné"
End Sub

Si besoin, tu peux demander une adaptation.

Merci de me donner ton avis.


C'est seulement si tu as besoin d'une solution VBA, car sinon, la solution d'eriiic sans macro est très bien aussi !

tu as juste à suivre ce lien : https://forum.excel-pratique.com/viewtopic.php?p=651981#p651981

dhany

Bonjour Dhany,

j'ai essayé :

Line Input #1, chn

mais a priori excel comprenait l'intégralité du fichier comme une seule ligne

et je n'ai pas trouvé la raison !!

Bonjour Steelson,

Line Input #1, chn est pour un fichier texte dont toutes les lignes se terminent par le couple de 2 octets CR / LF

CR = Carriage Return = retour chariot = code ASCII 13 ; LF = Line Feed = « nourrir » ligne = nouvelle ligne en dessous = code ASCII 10

et ça se termine à la fin du fichier texte : EOF = End Of File ; si j'me rappelle bien, c'est l'code ASCII 27 (escape = échap).

conclusion : si Excel a lu l'intégralité du fichier comme une seule ligne, c'est que les lignes du fichiers doivent pas se terminer par CR / LF ; pourtant, il me semble qu'un fichier .csv est bien un fichier texte, n'est-ce pas ? ou je fais peut-être une erreur là-dessus ?

(suggestion : vérifie ton fichier .csv avec un éditeur hexadécimal)

dhany

conclusion : si Excel a lu l'intégralité du fichier comme une seule ligne, c'est que les lignes du fichiers doivent pas se terminer par CR / LF ; pourtant, il me semble qu'un fichier .csv est bien un fichier texte, n'est-ce pas ? ou je fais peut-être une erreur là-dessus ?

en effet, mais en l’occurrence, une lecture directe du csv fonctionne mais pas une lecture pas à pas (ligne par ligne)

sachant qu'on peut écrire un fichier texte et lui donner ensuite l'extension csv ... c'est ce que fait son drone

bref dans son fichier il y a un truc qui cloche

cloche

et c'est pour cela que j'ai abandonné Line Input # au profit d'une lecture globale après m'être arraché les cheveux

cheveux

toute la nuit sur ce sujet !

"petit cadeau pour Steelson"
screen

dhany

Bonjour,

son séparateur de ligne est 0A (LF). Line Input ne reconnait que CR ou CRLF

A voir si c'est paramétrable dans l'appli d'export.

Au passage As #1 est risqué. Utiliser Freefile pour avoir le premier port disponible.

eric

merci eriiiic, je voulais décoder, tu l'a fait !

comme j'utilise la lecture globale et la recopie, je n'ai pas de soucis ni avec #1 ni avec la fin de ligne

le #1 était pour dhany.

@Xero

J'ai regardé ton fichier.

Ton choix de 1 ligne/20 correspond à peu près à 1 ligne toutes les 5 s.

Tu peux faire ainsi :

  • en CP1 : 0:00:05, choix que tu peux facilement changer si tu veux plus ou moins de précision
  • en CO1 le titre "selection"
  • en CO2 : =MOD(L2;$CP$1)<MOD(L1;$CP$1) à recopier vers le bas par un double-clic.
  • supprimer toutes les lignes qui ne sont pas VRAI avec le filtre auto.
eric

Edit : on pourrait même essayer d'imaginer une formule qui retienne plus de ligne selon le vitesse du drone.

En garder moins s'il fait du surplace, et augmenter le nombre selon la vitesse

Merciii Eriiic.

Bon maintenant j'ai une autre question. Je fais un post dédié.

Encore merci

Tu as vu que tu avais d'autres propositions en page 1 ?

Bonjour eriiic,

Tu a écrit :

Au passage As #1 est risqué. Utiliser Freefile pour avoir le premier port disponible

... le #1 était pour dhany

oui, tu as raison ; perso, j'utilise toujours #1 car c'est très rare quand j'ai besoin d'ouvrir plus d'un fichier texte à la fois (et en plus j'ai jamais eu besoin d'utiliser des fichiers .csv) ; si exceptionnellement je devais ouvrir simultanément un 2ème fichier texte, j'utiliserai #2 ; et même #3 si un 3ème ; car je sais que pour une utilisation de 3 fichiers texte non simultanée mais successive, je peux utiliser #1 pour les 3 fichiers : un seul canal.

ce que tu as préconisé est parfait pour un environnement réseau professionnel avec fichiers multiples , et je suppose aussi en accès partagé (j'ai mis le verbe « supposer » car les réseaux, c'est pas mon rayon).

dhany

Bonjour,

une proposition par macro (brute de forge, ... à optimiser sans doute)

Euuuh je suis un peux grave débutant sous excel (que j'utilise tous les 36 du mois vers 27h67 du matin ),

comment on fait pour utiliser ta macro Steelson ??

le #1 était pour dhany.

@Xero

J'ai regardé ton fichier.

Ton choix de 1 ligne/20 correspond à peu près à 1 ligne toutes les 5 s.

Tu peux faire ainsi :

  • en CP1 : 0:00:05, choix que tu peux facilement changer si tu veux plus ou moins de précision
  • en CO1 le titre "selection"
  • en CO2 : =MOD(L2;$CP$1)<MOD(L1;$CP$1) à recopier vers le bas par un double-clic.
  • supprimer toutes les lignes qui ne sont pas VRAI avec le filtre auto.
eric

Edit : on pourrait même essayer d'imaginer une formule qui retienne plus de ligne selon le vitesse du drone.

En garder moins s'il fait du surplace, et augmenter le nombre selon la vitesse

Pas bête cette idée en fonction du temps.

Euuuh vus mon message précédent et mon expertise négative à propos d'excel tu parles un peut chinois pour moi ,

CP1, CO1, CO2 : c'est quoi tous ça ?

@Xero : réponse à ton message de 15:47

Tu a écrit :

Euuuh je suis un peux grave débutant sous excel

j'comprends pas : dans c'cas, pourquoi t'utilises pas tout simplement la solution d'eriiic sans macro (donc sans VBA) ?

https://forum.excel-pratique.com/viewtopic.php?p=651981#p651981 c'est une solution qui marche impeccable ! garanti !!!

faut croire que tu veux absolument passer par du VBA ; si oui, j'laisse Steelson t'expliquer la manœuvre !

dhany

En fait je suis curieux et souhaite découvrir...

Bonjour,

une proposition par macro (brute de forge, ... à optimiser sans doute)

Euuuh je suis un peux grave débutant sous excel (que j'utilise tous les 36 du mois vers 27h67 du matin ),

comment on fait pour utiliser ta macro Steelson ??

ben, heu, tu appuies sur le bouton et il te demandera de charger le fichier csv

epicetou

Spoiler
picetou

j'laisse Steelson t'expliquer la manœuvre !

en bon officier de marine que je fus
Rechercher des sujets similaires à "effacer donnees csv"