XL 2019 Supprimer des cellules en fonction d'une cellule de la ligne

chris4785478547

XLDnaute Junior
Bonjour tout le monde,
J'ai essayé de trouver cette solution sur ce forum et d'autres, même si certains sujets se rapprochent de mon problème, je n'arrive pas à adapter...
Il s'agit d'effacer les 8 premières colonnes de chaque ligne comprenant (en 1ere colonne) une date= "01/01/1900"
Ma macro est celle ci:

Sub Macro2()
'
' Macro2 Macro
'

Dim i, j

For i = 7 To 65535
If CDate(Cells(i, 1).Value) = "01/01/1900" Then
For j = 1 To 8
Cells(i, j).ClearContents
Next j
Next i

'

End Sub

Elle me renvoie une erreur de compilation : NEXT SANS FOR (sur le next i)
J'ai certainement une erreur de syntaxe mais je ne vois pas laquelle
Merci par avance.
 
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Chris,
Prenez l'habitude d'indenter:
VB:
Sub Macro2()
Dim i, j
For i = 7 To 65535
    If CDate(Cells(i, 1).Value) = "01/01/1900" Then
        For j = 1 To 8
            Cells(i, j).ClearContents
        Next j
    End If
Next i
End Sub
Il manquait un End If, et il y avait un End With en trop. :p

En plus vous pouvez réduire la boucle en allant seulement jusqu'à le dernière cellule occupée avec :
Code:
For i = 7 To Range("A65500").End(xlUp).Row
 

chris4785478547

XLDnaute Junior
Bonjour Chris,
Prenez l'habitude d'indenter:
VB:
Sub Macro2()
Dim i, j
For i = 7 To 65535
    If CDate(Cells(i, 1).Value) = "00/01/1900" Then
        For j = 1 To 8
            Cells(i, j).ClearContents
        Next j
    End If
Next i
End Sub
Il manquait un End If, et il y avait un End With en trop. :p

En plus vous pouvez réduire la boucle en allant seulement jusqu'à le dernière cellule occupée avec :
Code:
For i = 7 To Range("A65500").End(xlUp).Row

Merci Sylvanu pour cette réponse.
Je venais de voir que j'avais omis d'enlever le End with mais le End if m'échappait toujours. Merci.
Pourtant, de mon côté j'ai une erreur:

"Erreur d'exécution 13: Incompatibilié de type"



VB:
Sub Macro2()
'
' Macro2 Macro
'

Dim i, j

    For i = 7 To 65535
        If CDate(Cells(i, 1).Value) = "00/01/1900" Then
            For j = 1 To 8
                Cells(i, j).ClearContents
            Next j
        End If
    Next i
End Sub

Si vous avez une idée...
Bien sûr, dès que ça fonctionnera, je raccourcirai mon code avec la proposition.
Merci
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

Moi c'est à cause de
VB:
Sub Test()
[A1] = "01/01/1900"
MsgBox [A1].Value
End Sub
Ce qui m'a permis de re-découvrir rétro-news ;)
Donc rien que pour cela, merci à chris pour sa question ;)

NB: Si jamais il y avait des vrais 1 au milieu des 01/01/1900
Avec le X, c'est plus sexy, non ? ;)
 

Staple1600

XLDnaute Barbatruc
Re

je voulais dire si il y a des 1 qui ne correspondent pas à 01/01/1900 mais à des 1 fait à la main, sans pesticides ;)
Et les données associées à ces vrais 1 ne doivent pas être effacés.
Avec mon code, seuls les 01/01/1900 sont traitées ;)

EDITION: Pan sur le nez
Au coin, Staple, j'ai dit une cronerie
Désolé.
 

Discussions similaires

Statistiques des forums

Discussions
315 089
Messages
2 116 099
Membres
112 661
dernier inscrit
ceucri