Temps de suppression de lignes enorme en vba
atlas063
-
atlas063 -
atlas063 -
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
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
A voir également:
- Temps de suppression de lignes enorme en vba
- Forcer suppression fichier - Guide
- Partage de photos en ligne - Guide
- Renommer plusieurs fichiers en même temps - Guide
- Combien de temps reste une story sur facebook - Guide
- Formulaire en ligne de meta - Guide
2 réponses
bonjour
Ton code est tout à fait correct même si tu peux le simplifier ainsi :
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.
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.
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+
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+
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
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
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 ?