Je vous expose mon problème :
Dans une feuille de calcul que je reçois chaque semaine, il y a certaines lignes pour lesquelles la valeur de la case (i , 1) est nulle (ou vide).
Je voudrai supprimer toutes ces lignes.
J'ai bien trouvé une solution avec un :
nblig = Range("a65535").End(xlUp).Row
For i = 2 To nblig
If Cells(i, 1) = 0 Or Cells(i, 1) = "" Then
Cells(i, 1).Delete Shift:=xlUp
End If
Next i
Oui ça marche mais c'est trés trés long. Mon fichier faisant entre 60 000 et 65 000 lignes j'ai donc cherché une autre solution un peu plus compliquée (mais qui ne marche pas ... encore :p ) et surtout plus rapide dans l'éxécution :
Dim zonasup as string
nblig = Range("a65535").End(xlUp).Row
zonasup = ""
For i = 2 To nblig
If Cells(i, 1) = 0 Or Cells(i, 1) = "" Then
If zonasup ="" then
zonasup = i & ":" & i
else: zonasup = zonasup & "," & i &":" & i
end if
End If
Next i
range(zonasup).Delete Shift:=xlUp
L'idée est donc de stocker tous les numéros de lignes à supprimer pour pouvoir tout supprimer en une seule étape à la fin.
Cependant, lorsque je fais tourner la macro, ça plante justement à la ligne
range(zonasup).Delete Shift:=xlUp
Et lorsque je regarde le contenu de ma variable zonasup à ce moment la (via un espion) je tombe sur
"86:86,87:87,88:88,89:89,90:90,91:91,92:92,93:93,94:94,95:95,96:96,97:97,230:230,231:231,232:232,233:233,234:234,235:235,236:236,237:237,238:238,239:239,240:240,241:241,327:327,328:328,329:329,330:330,331:331,332:332,333:333,334:334,336:336,337:337,33
Le point positif c'est que le contenu de la variable est écrit de la façon que je voulais, le point négatif c'est que cette variable ne semble stocker que 250 caractères (j'ai testé de copier coller dans une cellule excel et j'ai fait un NBCAR(...))
Le problème vient-il de la taille maximale de la variable string ?
J'espère avoir été suffisamment clair, peut être un peu trop pour quelque chose qui ne reste peut être, au fond, qu'un petit problème de string :)

For cptr = deplig To derlig
ça ne serait pas plutôt
For cptr = 2 To derlig ?
et en enlevant la ligne test = Cells(cptr, col + 1) tu gagnes encore 2 s (quand même, comme quoi les lectures sur feuille...)
eric
ne sachant pas au départ sur quelle ligne on commençait, j'avais mis deplig en constante (c'est plus visible pour le "client") mais on pourrait très bien la supprimer et mettre for cptr=2... tu as raison
et pour la ligne test = Cells(cptr, col + 1) tu as aussi tout à fait raison: c'était une variable temporaire pour essai que j'ai oublié d'enlever; ca m'apprendra à négliger option explicit
Je retire donc cette signalisation ;-)