J'ai le SUB suivant qui traverse de nombreuses feuilles de calcul et doit supprimer toutes les lignes vierges dans la plage. Parfois, cela fonctionnera bien, mais d'autres fois, cela me donne une "erreur de cellules trouvée" et échoue. Je ne comprends pas pourquoi.
L'erreur apparaît à la ligne J'ai essayé Attraper cette erreur en ayant une instruction IF pour accéder à la poignée d'erreur de test mais, en faisant que la routine ne supprime rien que r n'est bien sûr rien alors. P> est peut-être un moyen plus facile Pour supprimer des lignes vierges de plusieurs onglets, étant donné que les lignes vierges peuvent être dans différentes positions chaque fois que la macro est exécutée. P> Set R = Plage ("B2: B" & Compteur) .Specialcells (XLCELLTYPEBBLANDS) CODE> P> Sub RemoveBlanks()
Dim ws As Worksheet
Dim counter As Long
Dim r As Range
Dim cell As Range
For Each ws In ActiveWorkbook.Worksheets
If ws.Name <> "Summary" Then
ws.Activate
counter = ws.Range("A" & Rows.Count).End(xlUp).Row
Set r = Range("B2:B" & counter).SpecialCells(xlCellTypeBlanks)
If r Is Nothing Then
GoTo test
End If
r.EntireRow.Delete shift:=xlShiftUp
End If
test: Next ws
Worksheets("Summary").Activate
End Sub
3 Réponses :
Essayez-le de cette manière, s'il vous plaît:
'your code...
On Error Resume Next
Set r = Range("B2:B" & counter).SpecialCells(xlCellTypeBlanks)
On Error GoTo 0
If Not r Is Nothing Then r.EntireRow.Delete shift:=xlShiftUp
'your code...
Comme il est dans une boucle, vous devez explicitement définir r = rien code> sinon il pourrait toujours avoir la valeur précédente
@Patrick Honorez: Pas du tout B>! Première fois lorsque la plage comprendra, au moins une cellule vierge, elle renvoie une plage correcte ( R code>).
S'il n'y a pas de cellules vides, vous obtiendrez une erreur, vous pouvez reprendre ensuite s'il y a une erreur.
Sub Button1_Click()
Dim sh As Worksheet
For Each sh In Sheets
On Error Resume Next
If sh.Name <> "Summary" Then
With sh
.Range("B2:B" & .Cells(.Rows.Count, "A").End(xlUp).Row).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End With
End If
Next
End Sub
Si vous soupçonnez d'avoir des espaces dans des cellules, vous pouvez appliquer P> spécialcells (xlcelltypeblanks) code> échoue lorsqu'il n'y a jamais eu de données dans une cellule. Vous êtes plus sûr de faire de cette façon: ... LenB(Trim(Cells(i, 2)) ...
Très propre! Que fait Lenb? Je n'ai jamais vu Len.
lenb code> est légèrement plus rapide car il compte les octets tandis que len code> compte des caractères qui prend des efforts supplémentaires dans un environnement Unicode
Je ne sais pas si vous êtes conscient que vous pouvez utiliser Autofilter à réaliser ce que vous voulez. Il est plus rapide que la boucle.