Boucle FOR auto-adaptable

Creepy

XLDnaute Accro
Bonjour à tous,

J'ai une petite question pas bien compliquée, mais qui me pose souvent probleme. Voici mon code :

Private Sub dede()
Dim A As Integer
For A = 4 To Range('A4').End(xlDown).Row
If (Range('B' & A).Value = 'NA' Or Range('B' & A).Value = '-' Or Range('B' & A).Value = '0') And (Range('C' & A).Value = 'NA' Or Range('C' & A).Value = '-' Or Range('C' & A).Value = '0') And (Range('D' & A).Value = 'NA' Or Range('D' & A).Value = '-' Or Range('D' & A).Value = '0') Then
Range('N' & A).EntireRow.Delete
A = A - 1
End If
If Range('B' & A).Value = '' Then
Range('A' & A & ':Y' & A).Font.Bold =
True
Range('A' & A & ':Y' & A).Interior.ColorIndex = 37
End If
Next
End Sub

Ma boucle recherche la dernière ligne de mon tableau. Mais pendant la procédure j'efface des lignes, ce qui fait que la fin de mon tableau change.

quelle est le moyen le plus 'propre' de changer la fin de mon tableau ?

Parce que là, à la fin de ma macro, j'ai une 40aines de lignes toutes bleues (le code ne s'adapte pas à la fin du tableau, garde la fin de départ.

Merci d'avance

++

Creepy
 

dg62

XLDnaute Barbatruc
Bonjour creepy, pascal76


Code:
Private Sub dede()
Dim A As Integer
Fin=Range('A4'Â'Â').End(xlDown).Row
A=4
do until A=Fin
If (Range('B' & A).Value = 'NA' Or Range('B' & A).Value = '-' Or Range('B' & A).Value = '0'Â'Â') And (Range('C' & A).Value = 'NA' Or Range('C' & A).Value = '-' Or Range('C' & A).Value = '0'Â'Â') And (Range('D' & A).Value = 'NA' Or Range('D' & A).Value = '-' Or Range('D' & A).Value = '0'Â'Â') Then
Range('N' & A).EntireRow.Delete
fin = fin-1
A=A+1
End If
If Range('B' & A).Value = '' Then
Range('A' & A & ':Y' & A).Font.Bold = True
Range('A' & A & ':Y' & A).Interior.ColorIndex = 37
End If
loop
End Sub

non testé


Désolé mais ça marche pas !

Message édité par: dg62, à: 19/04/2005 10:11

Message édité par: dg62, à: 19/04/2005 10:27
 

Hervé

XLDnaute Barbatruc
Bonjour

Je pense qu'il vaut mieux boucler en partant de la fin :

Code:
Public Sub vev()
Dim i As Integer, j As Integer

For i = Range('a65536').End(xlUp).Row To 4 Step -1
    For j = 2 To 4
        If Cells(i, j) = 'NA' Or _
           Cells(i, j) = '-' Or _
           Cells(i, j) = '0' Then
           Rows(i).Delete
        End If
    Next j
    If Cells(i, 2) = '' Then
        Range(Cells(i, 1), Cells(i, 25)).Font.Bold = True
        Range(Cells(i, 1), Cells(i, 25)).Interior.ColorIndex = 37
    End If
Next i
End Sub

Salut
 

Statistiques des forums

Discussions
312 310
Messages
2 087 113
Membres
103 474
dernier inscrit
taha1995