Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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.

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

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
Bonjour le fil

Fonctionne chez moi
(avec ce petit biais )
VB:
Sub Macro3()
Const X = #12/31/1899#
Dim i, j
For i = 7 To 65535
    If Cells(i, 1).Value = X Then
        For j = 1 To 8
            Cells(i, j).ClearContents
        Next j
    End If
Next i
End Sub
 

eriiic

XLDnaute Barbatruc
Bonjour à tous,

ou bien, le 01/01/1900 étant 1 :
VB:
    Dim i As Long
    For i = 7 To Cells(Rows.Count, 1).End(xlUp).Row
        If Cells(i, 1).Value = 1 Then
            Cells(i, 1).Resize(, 8).ClearContents
        End If
    Next i
eric
 

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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…