Temps de suppression de lignes enorme en vba

Fermé
atlas063 - 20 mars 2009 à 18:34
 atlas063 - 26 mars 2009 à 19:52
Bonjour,
J'ai un fichier excel qui contient déjà un certain nombre de lignes réparties sur deux onglets différents.
J 'alimente chaque onglet par 6 fichiers text selon un certain nombre de critères.
Je close chaque fichier après l'avoir traité
En fin de traitement, je trie chaque onglet, et supprime les lignes en doublon (trop compliqué pour moi pour les supprimer dans le traitement initial), en concervant la ligne initiale et en recopiant 2 valeurs de la ligne en doublon puis en supprimant la ligne en doublon
Je ne suis pas très douée en programmation et ca donne ça :
i = 7
j = 8
While Cells(j, 1) <> ""
If Cells(i, 2) = Cells(j, 2) Then
Cells(i, 3) = Cells(j, 3)
Cells(i, 4) = Cells(j, 4)
Rows(j).Delete
j = j + 1
i = i + 1

Else
j = j + 1
i = i + 1
'
End If
Wend

En fait, si je fais du pas à pas, le sytème passe au mini 5 secondes sur la commande rows.delete, et plus ça vas, plus cette commande augmente (10 secondes)
Pour supprimer 200 lignes, il faut 1/2 heure voire plus
Je ne sais pas quelle commande rajouter pour que l'espace mémoire soit libéré après chaque lecture de fichier
Merci pour votre aide

2 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 690
20 mars 2009 à 22:41
bonjour

Ton code est tout à fait correct même si tu peux le simplifier ainsi :
i = 7
Application.ScreenUpdating = False
While Cells(i + 1, 1) <> ""
    If Cells(i, 2) = Cells(i + 1, 2) Then
        Cells(i, 3) = Cells(i + 1, 3)
        Cells(i, 4) = Cells(i + 1, 4)
        Rows(i + 1).Delete
    End If
    i = i + 1
Wend

N'as tu pas une utilisation importante de cellules dans ton traitement d'importation de tes fichiers ?

Regardes la taille de ton classeur : n'est-elle pas un peu importante ?

Une procédure comme la tienne devrait s'exécuter en instantané en enlevant l'affichage.
0
Bonjour
Merci pour ta réponse mais en fait , cela n'a rien changé quant au déroulement de la macro.
Mon fichier initial fait 250k. il a 214 lignes au départ, auxquelles se rajoutent 200 lignes avant la suppression.
Ce qu'il faut savoir, c'est que je crée des menus déroulants sur toutes les lignes que je rajoute (3 menus déroulants par ligne).
Je pars d'un fichier avec un certain nb de lignes, je lis mes 6 fichiers en séquence et je rajoute les lignes à la suite, je fais de l'encadrement pour faire beau, je trie les lignes pour ensuite supprimer les doublons.
Si je fais du pas à pas sur la suppression, au debut c'est instantanné, puis, plus ça va, plus la commande rows.delete prend du temps (en tout 15 minutes pour supprimer 200 lignes)
En plus, j'ai l'impression que cela ouvre une autre fenêtre excel (gestionnaire des taches)
J'ai l'impression que toutes les ressources ne sont pas libérées quand je ferme mes fichiers( le gestionnaire des taches indique qu'excel tourne à 99%), alors qu'au début, lors de la récupération des fichiers
Est-ce un problème de libération de ressources ?
J'utilise peu de variables car sur les fichiers en entrée, je ne récupère que 6 cellules par ligne
Que puis-je faire ?
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
24 mars 2009 à 12:36
Bonjour,
Difficile de t'aider sans avoir tes données, tu peu mettre une copie de ton classeur avec les données à trier (les fichiers déjà copier) sur Cjoint.com et mettre le lien dans un poste suivant.
A+
0
Bonjour
Je ne peux pas t'envoyer le fichier car il s'agit de données confidentielles qui m'obligeraient à completement modifier mes données pour pouvoir le diffuser sur le net.
L'application que je tente d'installer est une appli professionnelle.
En fait, je me suis aperçue que lorsque je fais la macro à la maison, elle s'exécute en un rien de temps (quelques secondes)
Par contre au bureau, c'est le festival. 10 minutes en gros sur le reseau.
Et là, je ne sais plus que penser, et comment solutionner mon problème
Help
0