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