2017-10-17 3 views
0

J'ai le code suivant qui efface les cellules qui contiennent #NUM!Effacer les cellules contenant #NUM! dans VBA Excel

Dim CLR As Range 
For Each CLR In ActiveSheet.UsedRange 
     If CLR.Text = "#NUM!" Then 
CLR.ClearContents 
     End If 
Next 

Le problème est que ces quelques lignes de code ralentissent mon programme. Beaucoup. Je me demandais s'il y avait une autre façon de le faire, puisque j'ai besoin de supprimer ces valeurs afin d'exécuter une autre macros.

J'ai déjà essayé de raccourcir cela à une plus petite plage au lieu de chercher la dernière cellule utilisée. Cependant, cela a pris le même temps ou je n'ai pas remarqué la différence.

Dim CLR As Range 
    For Each CLR In ActiveSheet.Range("Q3:BA2500") 
      If CLR.Text = "#NUM!" Then 
    CLR.ClearContents 
      End If 
    Next 

Merci d'avance!

+0

comment exécutez-vous le code? vous n'avez pas inclus le début et la fin de votre sub .... note: 'CLR.ClearContents' devrait être indenté de deux autres niveaux – jsotola

Répondre

1

Si vous avez un nombre raisonnable de cellules contenant des erreurs, le code suivant efface toutes les valeurs d'erreur (pas seulement #num!):

ActiveSheet.Range("Q3:BA2500").SpecialCells(xlCellTypeFormulas, xlErrors).ClearContents 

Notez que cela l'erreur s'il y a plus de 8 192 zones distinctes contenant des erreurs. Il y aura aussi une erreur si aucune cellule d'erreur n'est trouvée. Je vais vous laisser aborder la gestion des erreurs.

+0

Pour éviter le 2ème problème, vous pouvez renvoyer le code dans' On Error Resume Next' et 'On Error GoTo 0' –

+1

Et pour éviter le 1er problème, vous pouvez balayer la plage colonne par colonne. – Excelosaurus