Message d'erreur lors de la suppression de nombreuses lignes

Fermé
Akon93 - 12 juil. 2013 à 17:51
 Akon93 - 15 juil. 2013 à 12:30
Bonjour,

Je travaille sur un gros tableau d'environ 30 000 lignes et qui prend 10Mo environ.
Il y a de très nombreuses lignes seulement partiellement complètes dans le sens ou certaines colonnes sont important mais dans au moins 2 cas sur 3 elles sont vides. Du coup j'ai besoin de supprimer ces lignes car elles sont pour moi inutiles.
Pour cela j'ai fait une boucle ou je vérifie si ces colonnes sont vides ou non, et si tel est le cas je supprime la ligne entière.
Malheureusement je reçois le message d'erreur suivant :
"Excel ne peut pas terminer cette tâche avec les ressources disponibles.
Sélectionnez moins de données ou fermez des applications"

Quand j'essaie la boucle seulement sur les 200 premières lignes par exemple alors cela marche très bien.
J'ai vérifié ma corbeille peut contenir dans les 100Mo donc je ne m'explique pas le problème. Pouvez-vous m'aider ?

je vous transmet le code :


' taille est le nombre de ligne de mon tableau
s=taille
' mois un entier entre 1 et 12
While s > 3
b = False
for h = mois To 12 'il y a plusieurs controles à faire selon la valeur de h c'est pk j'ia fait cette boucle
If Cells(s, 8 + mois + (h - mois) * 4) <> "" Then
b = True
Exit For
End If
Next
If b = False Then
Sheets("Data").Rows(s).EntireRow.Delete Shift:=xlUp
End If
s = s - 1
Wend

peut-être que ma méthode n'est pas la plus simple, si vous avez mieux et que ça marche je suis rpenneur.
merci beaucoup pour votre aide!


A voir également:

3 réponses

lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 12/07/2013 à 19:12
Bonjour,
Quand tu entre dans la procédure mois vaux combien ?
If Cells(s, 8 + mois + (h - mois) * 4) <> "" Then 

Quel sont les colonnes à tester ?
Comment tu déclare ta variable "s" ?
A+

Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
Note: Je ne répond pas aux MP pour les questions techniques. Et ma boule de cristal est cassée .
0
Quand je rentre dans la procédure mois vaut une valeur comprise entre 1 et 12, disons par exemple 7.
Les colonnes à tester sont les 8 + mois + (h-mois)*4. Pour être plus clair j'ai une colonne "total" pour chaque mois (de 1 à 12), et selon la valeur du mois je veux vérifier si toutes les colonnes du mois souhaité jusqu'à 12 sont vides ou non. Si oui je les supprimes

de mémoire (je n'ai pas accès au fichier avant lundi matin) s est déclarée ainsi : Range("A1048576").End(xlUp).Row (je ne suis plus 100% sûr de ça mais n tout cas j'avais vérifié la valeur de s et elle est bonne).
0
f894009 Messages postés 17187 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 1 mai 2024 1 704
13 juil. 2013 à 17:57
Bonjour,

certaines colonnes sont important mais dans au moins 2 cas sur 3 elles sont vides. Du coup j'ai besoin de supprimer ces lignes car elles sont pour moi inutiles. Vous melangez lignes et colonnes, votre programme supprime une ligne des qu'il trouve une cellule vide dans la plage mois choisi a 12 et cela meme si les cellules pour les autres mois sont non vides. A ce detail près, J'ai fait un test en supprimant 30000 lignes, ca passe sans probleme si vous avez un PC un peu costaud, autrement ca force un peu.

J'ai vérifié ma corbeille peut contenir dans les 100Mo donc je ne m'explique pas le problème. Rien a voir avec votre probleme.

A+
0
Bon je reexplique car je n'ai pas été clair visiblement.

J'ai un fichier de 40.000 lignes environ.
Les colonnes sont de ce type
C1-C2-C3-C4-C5-C6-C7-C8-Janvier-C10-C11-C12-Févr-C14-C15-C16-Mars-C18-C19-C20-Avr-C22-C23-C24-Mai-C26-C27-C28-Juin.....
Je choisis un mois, par ex 4 qui correspond à Avril.
Je veux supprimer toutes les lignes dont les cellules à toutes les colonnes des mois Avril à décembre sont vides.
Par ex si j'ai (ligne 25 ; colones Mai) = 154871 alors je garde la ligne 25
Si j'ai (ligne 26 ; colones avril) et (ligne 26 ; colones mai) et (ligne 26; colones juin) ...(jusqu'à décembre) vide alors je supprime la ligne 26.
J'ai vérifié la formule me parait bonne. Par contre j'ai revérifier et il est vrai qu'il y a environ 30.000 lignes à supprimer et seulement 1000 à garder donc peut-être qu'il y na un meilleur moyen de faire ce que je veux (par exemple en copiant les lignes que je veux garder ?)
0
bon j'ai reessayé l'opération de manière manuelle sur excel en utilisant les filtres (en affichant juste les trucs vide) et quand je supprime toutes les lignes (env 30.000) ça me met le meme message d'erreur donc effectivement le probleme semble etre qu'il y a trop de données à effacer d'un coût.
Du cup, à moins que quelqu'un me propose mieux, je vais simplement copier sur une autre feuille les données que je veux garder et ensuite supprimer la feuille.
0