OVH Cloud OVH Cloud

Supprimer des lignes vides pas vraiment vides

11 réponses
Avatar
JacquesH
Bonjour à toutes et tous,

Je me heurte très souvent au même problème et je ne trouve pas vraiment
quelque chose de satisfaisant dans les archives.

J'ai une feuille 1 avec un tableau contenant de nombreuses formules, je
le copie sur une seconde feuille (collage spécial - valeurs)dans
laquelle, je supprime des lignes qui sont vides en colonne A après les
avoir mis à la fin du tableau :
Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete

Cette ligne de code fonctionne la plupart du temps très bien et très
très rapidement.

Cependant, avec certains types de formules dans la feuille 1 et malgré
le collage spécial, cela ne fonctionne pas car il ne considère pas que
les cellules sont vides.

Exemple de formule qui génère cela mais il y en a beaucoup d'autres :
=SI(ET(E3<>E2;E3<>E4);D3;SI(ET(E3=E2;E3=E4);"";SI(E3=E2;D3;"")))

Si j'efface ce qu'il y a dans les cellules (ou plutôt ce qu'il n'y a
pas car on ne voit rien), tout va bien.

On peut évidemment contourner ce problème en remplaçant dans la formule
les "" par 0 et en utilisant une autre manière de supprimer :

Sub JH()
For i = [a65536].End(xlUp).Row To 2 Step -1
If Cells(i, 1) = 0 Then Rows(i).Delete
Next
End Sub

Mais la rapidité d'exécution laisse fortement à désirer. J'en ai tester
de nombreuses autres du même type et c'est pareil.

Quelqu'un a certainement déjà résolu ce problème ?

Merci de votre aide.

Jacques

1 réponse

1 2
Avatar
JacquesH
Bonjour,

Merci de ta réponse.

Pour l'instant, j'ai résolu le problème avec l'idée de AV et les
filtres.

Je garde Len() pour plus tard.

Jacques

Bonjour,

Tu pourrais peut-être mettre une très petite partie (mais signifiante) de ton
fichier sur cjoint.com ?
De cette façon, on pourrait consulter le fichier et voir ce qui ne va pas avec
tes données.

Parce qu'à prime abord, les quasiblancs (formule retournant "") devraient être
répertoriés lorsqu'on teste par Len()=0, comme Rama l'a fait.

Salutations,

Daniel M.

"JacquesH" wrote in message
news:

Bonjour et merci de t'intéresser à mon problème,

Dans mon code :

Sub JH()
For i = [a65536].End(xlUp).Row To 2 Step -1
If Cells(i, 1) = 0 Then Rows(i).Delete
Next
End Sub

J'ai remplacé la seconde ligne par celle que tu proposes :
If Len(Cells(i, 1)) = 0 Then Rows(i).Delete

Malheureusement, il ne se passe absolument rien.

Je suppose que c'était censé améliorer la rapidité. Ce serait déjà très
bien.

En revanche, ce que j'aimerais surtout c'est regler la première partie
du problème : cellules vides qui ne sont pas vides.

Jacques



Bonjour
essaie avec ceci
If Len(Cells(i, 1)) = 0 Then Rows(i).Delete

salutations
RaMa


"JacquesH" a écrit dans le message de
news: unm$


Bonjour à toutes et tous,

Je me heurte très souvent au même problème et je ne trouve pas vraiment
quelque chose de satisfaisant dans les archives.

J'ai une feuille 1 avec un tableau contenant de nombreuses formules, je le
copie sur une seconde feuille (collage spécial - valeurs)dans laquelle, je
supprime des lignes qui sont vides en colonne A après les avoir mis à la
fin du tableau :
Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete

Cette ligne de code fonctionne la plupart du temps très bien et très très
rapidement.

Cependant, avec certains types de formules dans la feuille 1 et malgré le
collage spécial, cela ne fonctionne pas car il ne considère pas que les
cellules sont vides.

Exemple de formule qui génère cela mais il y en a beaucoup d'autres :
=SI(ET(E3<>E2;E3<>E4);D3;SI(ET(E3â;E3ä);"";SI(E3â;D3;"")))

Si j'efface ce qu'il y a dans les cellules (ou plutôt ce qu'il n'y a pas
car on ne voit rien), tout va bien.

On peut évidemment contourner ce problème en remplaçant dans la formule
les "" par 0 et en utilisant une autre manière de supprimer :



Mais la rapidité d'exécution laisse fortement à désirer. J'en ai tester de
nombreuses autres du même type et c'est pareil.

Quelqu'un a certainement déjà résolu ce problème ?

Merci de votre aide.

Jacques













1 2