Suppression de ligne en fonction du critère #REF!

rkan

XLDnaute Nouveau
Bonjour,

Pour faire simple je voudrais supprimer dans une plage de données variables toutes les lignes renvoyant #REF!
Etant débutant en VBA j'ai essayé en m'inspirant de réponses sur le net de coder la fonction ci-dessous:

Code:
 Sub Nettoyage_SYNTHESE_1()
    Dim Rw As Range
    Dim Ligne As Long
    
        Sheets("SYNTHESE").Select
            Range("A5").Select
            Selection.Rows.End(xlDown).EntireRow.Select
            Range("$A$5", Selection).Select
        
        For Each Rw In Selection.Rows
            Ligne = Rw.Row
            If IsError(Rw.Cells(1, 1)) Then
            Rw.Select
            If MsgBox("Detection données à supprimer", vbExclamation + vbOKOnly, "**** MESSAGE IMPORTANT ****") = vbOK Then
                Selection.Delete
            End If
        End If
    Next Rw
 End Sub

Malgré ma boucle FOR pour obtenir une suppression à 100% je dois relancer plusieurs fois la Fonction nettoyage.

Si vous pouviez me corriger ou m'aiguiller sur une fonction qui supprime du 1er coup ça m'aiderait,

Merci d'avance.

Pour info :

_ j'utilise excel 2003
_ je travaille sur un tableau à plusieurs onglet, l'onglet SYNTHESE reprend des infos d'autres onglets avec un collage par liaison
_ la fonction nettoyage doit corriger les erreurs de l'onglet SYNTHESE qui apparaissent suite à l'archivage des données sources contenues dans les autres onglets
 

Pierrot93

XLDnaute Barbatruc
Re : Suppression de ligne en fonction du critère #REF!

Bonjour,

quand tu veux supprimer des lignes il faut commencer par la fin et remonter, exemple ci-dessous pour la colonne A de la feuille active :
Code:
Dim i As Long
For i = Range("A65536").End(xlUp).Row To 1 Step -1
    If IsError(Cells(i, 1)) Then Rows(i).Delete
Next i

bon après midi
@+
 

rkan

XLDnaute Nouveau
Re : Suppression de ligne en fonction du critère #REF!

Un grand merci je me suis tordu l'esprit pendant de longues heures en 23 min, la fonction est corrigée :)

pour info voilà le code corrigé :
Code:
Sub Nettoyage_SYNTHESE_1()
        Dim i As Long
     
        Bon_classeur
        Sheets("SYNTHESE").Select
      
        For i = Range("A65536").End(xlUp).Row To 1 Step -1
              If IsError(Cells(i, 1)) Then Rows(i).Delete
        Next i
    
 End Sub
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 502
Messages
2 089 036
Membres
104 010
dernier inscrit
Freba