S'arrêter à temps !!!

glaine

XLDnaute Junior
Bonjour à tous,
Merci d'avance pour toutes aides apportées. J'essaye de supprimer toutes les cellules vides d'une colonne.
Sub SupprimCellVide()
Columns(4).Select
For Each cell In Selection
If IsEmpty(cell.Value) = True Then
cell.Select
cell.Delete
Range("D65356").Offset(1, 0).Select
End If
Next
End Sub
La colonne est bien épurée des cellules vides, mais la macro fait inutilement tout le tour de la colonne. Je sèche pour résoudre ce soucis, mais avec des tas de petits bouts d'idées(do while...) sans être satisfait. Merci pour vos conseils.
 

glaine

XLDnaute Junior
Re : S'arrêter à temps !!!

Merci à vous deux, cela fonctionne parfaitement. Par contre, je ne comprends pas: comment avec cette méthode (SpecialCells(xlCellTypeBlanks)) ne glisse-t'on jusqu'au bout de la colonne ???
Merci encore en tous cas.
 

laetitia90

XLDnaute Barbatruc
Re : S'arrêter à temps !!!

re, j'avais un exemple qui marcher avec !! mais pas retrouve :(

autrement si beaucoup de cellules dans ta colonne tu peus passer par un tablo plus rapide

Code:
Sub essai()
Dim t As Variant, t2() As String, x As Long, i As Long, k As Long
 Application.ScreenUpdating = False
 On Error Resume Next
t = Range("d1:d" & Range("d65536").End(xlUp).Row)
x = 1
For i = 1 To UBound(t)
If t(i, 1) <> "" Then
 ReDim Preserve t2(1 To 1, 1 To x)
For k = 1 To 1
t2(k, x) = t(i, k): Next k: x = x + 1: End If: Next i
Columns("d:d").Clear
Range("d1").Resize(UBound(t2, 2), UBound(t2, 1)) = Application.Transpose(t2)
Erase t, t2
End Sub
 

Staple1600

XLDnaute Barbatruc
Re : S'arrêter à temps !!!

Bonjour

Comme bhbh je dirai, complétant la suggestion de tototiti2008
Code:
Sub Macro1()
Columns(4).SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp
End Sub
Avec ce léger changement, c'est ok non ? et las est l'Hélas de glaine ;)


PS: laetitia90, pour le coup , je crois que l'Array est moins rapide que SpecialCells
 
Dernière édition:

laetitia90

XLDnaute Barbatruc
Re : S'arrêter à temps !!!

re,

salut l'ami Staple

c'est le bout de code que j'avais perdu. bien vu ;)

sur une colonne
Code:
SpecialCells(xlCellTypeBlanks)
cela va dependre des cellules vide ??? & la grandeur de la plage
il y a quelques mois j'avais des essais sur une colonne de 60000 cellules avec
une cellule vide sur deux avec
Code:
SpecialCells(xlCellTypeBlanks)
tres lent plus de 40 secondes.... en passant par un array < a une seconde
cela devient interessant si on a de grandes plages de cellules vide contiguées dans la colonne

a+ leti
 

Staple1600

XLDnaute Barbatruc
Re : S'arrêter à temps !!!

Re


Je ne suis pas pressé (contrairement aux jeunes générations ;) )

Pour moi 40 secondes, c'est très rapide :D
(comparer à jadis quand je chargeais un programme à partir d'un magnétophone car oui Madame, en ce temps là, je n'avais pas de disque dur !)

PS: je travaille rarement avec des classeurs contenant 60 000 lignes de données utiles , voir jamais )
 

Membres actuellement en ligne

Statistiques des forums

Discussions
312 668
Messages
2 090 739
Membres
104 644
dernier inscrit
MOLOKO67