Bonjour,
@Ausecour, il me semble que cela fonctionne mais je suis occupé de tester sur les 800.000 lignes, mois par mois.
Je n'y connais pas grand chose mais je trouvais que quand j'ai lancé la macro, cela a été hyper rapide.
Est-ce que tu rends possible cet effacement pour le 1.000.000 de lignes du fichier ?
Est-ce que je pourrais avoir le détail de la macro ?
D'avance merci.
Bonjour,
Le code fonctionne bien entendu pour 1 000 000 de lignes.
Je peux expliquer rapidement le code, mais sans rentrer trop dans le détail (le but n'est pas non plus d'enseigner VBA depuis zéro):
'optimisations
Application.ScreenUpdating = False
methodeCalcul = Application.Calculation
Application.Calculation = xlCalculationManual
Je désactive la mise à jour automatique de l'affichage, et je mets la méthode de calcul du classeur à manuel en enregistrant le paramètre actuel dans une variable, pour le remettre après l'exécution, ça permet d'éviter de perdre du temps à faire des calculs pour afficher ou mettre à jours des données.
'initialisations
ligFin = Range("A" & Rows.Count).End(xlUp).Row
tableauDate = Range("C2", "C" & ligFin).Value
tableauTSD = Range("I2", "I" & ligFin).Value
J'utilise une astuce pour récupérer la dernière ligne contenant une donnée, avec le range.end(xlup).row, tu peux voir ce que fait chaque fonction dans les docs de microsoft, mais concrètement je pars de la ligne à la dernière ligne du classeur, dans la colonne A, je remonte jusqu'à trouver une cellule avec une info dedans, et je prends son numéro de ligne, comme ça je n'ai pas besoin de savoir le nombre de lignes dans ton tableau en avance.
J'utilise ce numéro de ligne pour enregistrer dans des tableaux VBA les données en colonne C et I, passer par ce type de tableau permet une exécution plus rapide.
'recherche de doublons
For lig = LBound(tableauDate, 1) + 1 To UBound(tableauDate, 1)
If tableauDate(lig, 1) = tableauDate(lig - 1, 1) Then
tableauTSD(lig, 1) = 0
End If
Next lig
Je parcours toutes les lignes du tableau en commençant par la deuxième ligne de données à l'aide d'une boucle, à chaque itération je regarde si la date de la ligne actuelle est la même ou non que la date de la ligne précédente (c'est comme ça que j'identifie les doublons), et si c'est le cas, je modifie la valeur du TSD en lui affectant 0, je commence par la deuxième ligne du tableau car la première n'a pas de ligne pour la comparaison.
'export de la modification
Range("I2", "I" & ligFin).Value = tableauTSD
Une fois les valeurs du TSD mises à jour, j'exporte le résultat dans la feuille.
'retour à la normale de l'application
Application.ScreenUpdating = True
Application.Calculation = methodeCalcul
Application.Calculate
Comme le programme est fini, je rends la main à l'affichage et remet le paramètre de calcul que le fichier avait avant l'exécution du code, puis je lance un petit calcul histoire de tout mettre à jour si besoin.