[Calc] Transformer texte (csv) au format date - durée exécution longue

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
SolPro
Membre OOrganisé
Membre OOrganisé
Messages : 64
Inscription : 31 juil. 2022 12:38

[Calc] Transformer texte (csv) au format date - durée exécution longue

Message par SolPro »

Bonsoir à tous

Mon problème est le suivant : je récupère un fichier csv d'une trentaine de colonnes et de plus de 30 000 lignes tous les jours au travail.
Pour anonymiser le tout, j'ai supprimé le contenu de toutes les colonnes sauf de 2 ; j'ai masqué les colonnes vides/inutiles pour conserver la structure.

Je retravaille le fichier csv (mise en forme, table dynamique).
J'arrive tout doucement à ce que je veux mais je tourne en rond sur la transformation de cellules qui affichent ="28/11/2024" et que je voudrai au format date afin de trier/filtrer.
Je suis parvenu à l'aide de macro à arriver à des choses qui me conviennent mais je ne suis pas sûr que j'utilise la méthode la meilleure et surtout la plus rapide.

Pouvez-vous me dire si mon code est correct et comment réduire la durée d'exécution qui est de plus de 2 minutes pour transformer plus de 30 000 données ?Mon code est-il bien fait ? Merci à vous et bonne soirée
Le fichier en question et une capture d'image
Merci
Le code

Code : Tout sélectionner

REM  *****  BASIC  ***** 3,1,4 du 8 janvier 2025
sub test
	Dim monDocument As Object, lesFeuilles As Object, maFeuille As Object
	    monDocument = ThisComponent
	    lesFeuilles = monDocument.Sheets
	    maFeuille = lesFeuilles.getByIndex(0)
		maFeuille.Name = "essai"
    zCellule.Ecrit ( "essai", "aC1", "C", "TestDate")  ' on écrit "controle" en C1
   
'Calcul de la duree de la boucle
 	Dim top As Date
	top = Now
  	Wait 5000  
 
 'debut de la boucle permettant de compléter la cellule AC2 par la formule Cnum(AB2) --> value en anglais
   Id_lig = 2 'Indice de la ligne de départ
    contenu = 1 ' Le contenu de la cellue B2 3 4 5 .....
    Do while True
       'msgBox ("Recopie de la formule vers le bas en cours  "  &  Id_lig)
       contenu = zCellule.Lit("essai", "AB"&Id_lig, "C")
      ' msgbox(contenu)
       If contenu <> "" then
          zCellule.Ecrit ( "essai", "AC" & Id_lig , "F", "=VALUE(AB" & Id_lig &")")    
       Else  '  Cellue Bx  = 0 -> on sort de la boucle
         
          exit do
       endif
       Id_lig = Id_lig + 1  ' Passage à la ligne suivante
    Loop
MsgBox(Format(Now-top, "h\h m\mn s\s"), 0, "Durée du traitement") 
 ' fin de la boucle
     '------------------------------------------------------
    '                 Format date - colonnes 28     	  !
    '------------------------------------------------------
   	maZone=maFeuille.getCellRangeByPosition(28,1,28,50000) 'de 28ème à 28ème colonne (on commence à 0)
	maZone.numberFormat=37  'format date jj/mm/aa

	
end sub

solprodureetraitement.png
Solpro_date.ods
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 7.5.4.2 (x64) et Windows 10 Pro (personnel)
LibreOffice 7.2.7.2.M7 (x64) et Windows 10 Pro (professionnel, obligatoire)
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25777
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Transformer texte (csv) au format date - durée exécution longue

Message par Dude »

Salut,
SolPro a écrit : 20 janv. 2025 21:44 je récupère un fichier csv d'une trentaine de colonnes et de plus de 30 000 lignes [...] mais je tourne en rond sur la transformation de cellules qui affichent ="28/11/2024"
C'est sans doute au moment de l'importation qu'il faut agir.
Comprendre pourquoi la date se transforme avec ces guillemets alors qu'elle semble correctement formatée.
Fournis le CSV de départ en l'encapsulant dans un ZIP.
Pas besoin des 30.000 lignes, les 100 premières suffiront.
Jeff
GourOOu
GourOOu
Messages : 9856
Inscription : 18 sept. 2006 09:40
Localisation : France

Re: [Calc] Transformer texte (csv) au format date - durée exécution longue

Message par Jeff »

Bonjour à tous,
Dude a écrit : 21 janv. 2025 07:39 C'est sans doute au moment de l'importation qu'il faut agir
+ 1

Normalement, on doit pouvoir adapter (ici pour un format date année/mois/jours) :
.
20250121_122753.jpg
.
A +
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
À lire avant tout !

Pour télécharger Apache OpenOffice

AOO 4.1.15 / Debian 11.7 "Bullseye" / Cinnamon
SolPro
Membre OOrganisé
Membre OOrganisé
Messages : 64
Inscription : 31 juil. 2022 12:38

Re: [Calc] Transformer texte (csv) au format date - durée exécution longue

Message par SolPro »

Bonsoir à tous et merci pour vos réponses
Dude a écrit : 21 janv. 2025 07:39 Fournis le CSV de départ en l'encapsulant dans un ZIP.
Voir fichier en Zip. J'ai ouvert le csv depuis calc pour pouvoir anonymiser les données et me limiter à une centaine de lignes.
Jeff a écrit : 21 janv. 2025 11:51 Normalement, on doit pouvoir adapter (ici pour un format date année/mois/jours) :.
A +
Cela je sais le faire sans souci mais à terme, ce seront mes collègues et là.... cela va être difficile pour certains (beaucoup ne savent pas faire une simple somme)
Encore merci à vous
Solpro_archive_csv.zip
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 7.5.4.2 (x64) et Windows 10 Pro (personnel)
LibreOffice 7.2.7.2.M7 (x64) et Windows 10 Pro (professionnel, obligatoire)
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25777
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Transformer texte (csv) au format date - durée exécution longue

Message par Dude »

Il suffit d'importer avec un filtre CSV déclaré correctement :

Code : Tout sélectionner

Sub Main
	GlobalScope.BasicLibraries.loadLibrary ("zBasic")

	sFic = "c:\temp\RC30_LISTE_TITRES_BANNETTE_054038_20241226_690499181632(1).csv"
	sFeuille = "Liste"
	
	oFiltre = zCSV.Demarre(sFic)
	zCSV.Parametre(oFiltre, "JEU", "UTF-8")
	zCSV.Colonne(oFiltre, 28, "JJ/MM/AA")
	
	zFeuille.Importe(sFic, sFeuille, oFiltre)	

End Sub