Microsoft 365 VBA : effacer les données dans les feuilles Excel

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Bonjour,

Je ne comprends pas pourquoi mon code ne marche pas : je n'arrive pas à effacer les données.
Mon code est :
VB:
Sub TEST()

Dim ws As Object


For Each ws In Worksheets
  
'on efface les données précedentes
    If Sheets(ws.Name).Cells(1, 1).Value <> "" Then
        Sheets(ws.Name).Select
        Selection.ClearContents
    Sheets(ws.Name).Cells(1, 1).Value = "Code"
    Sheets(ws.Name).Cells(1, 2).Value = "Libelle"
    End If
 
Next
End Sub

Merci pour votre aide.
 

dysorthographie

XLDnaute Accro
Bonjour,
Ws représente déjà ton onglet pas besoin de te compliquer la vie avec ws.name!
Code:
For Each ws In Worksheets  'ws représente succécivement les onglets !
'on efface les données précedentes
    If ws.Cells(1, 1).Value <> "" Then
        Ws.cells.ClearContents
    ws.Cells(1, 1).Value = "Code"
    ws.Cells(1, 2).Value = "Libelle"
    End If
Next
End sub
Si tu as 500 onglet, faut pas être épileptique Sheets(ws.Name).Select!
 
Dernière édition:

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Bonjour,

Je ne vois pas trop pourquoi vous ne travaillez que sur la cellule A1 mais voyez le code suivant et ses commentaire. Le test If n'est pas forcément obligatoire suivant le cas.

VB:
Sub TEST()

    Dim ws As Worksheet 'Objet worksheet


    For Each ws In Worksheets

        'on efface les données précedentes
        With ws
            If .Cells(1, 1).Value <> "" Then
                ' Pour supprimer toutes les données du tableau de A1
                ' Décommenter la ligne ci-dessous
                '.Cells(1, 1).CurrentRegion.ClearContents
                '
                ' valoriser les cellules d'entête par la ligne suivant :
                .Cells(1, 1).Resize(, 2).Value = Application.Transpose(Array("Code", "Libellé"))
                '
                ' Ou par les deux lignes suivantes
                '.Cells(1, 1).Value = "Code"
                '.Cells(1, 2).Value = "Libelle"
            End If
        End With
    Next
End Sub

Il vaut mieux déclarer vos variables objets par le type attendu, vous profiterez ainsi de l'intellisense dès que vous mettrez un point collé après.
1628413578606.png


Cordialement

[Edit] Oups ! à la bourre :) [/Edit]
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Bonjour,

Bonjour,

Je ne vois pas trop pourquoi vous ne travaillez que sur la cellule A1 mais voyez le code suivant et ses commentaire. Le test If n'est pas forcément obligatoire suivant le cas.

VB:
Sub TEST()

    Dim ws As Worksheet 'Objet worksheet


    For Each ws In Worksheets

        'on efface les données précedentes
        With ws
            If .Cells(1, 1).Value <> "" Then
                ' Pour supprimer toutes les données du tableau de A1
                ' Décommenter la ligne ci-dessous
                '.Cells(1, 1).CurrentRegion.ClearContents
                '
                ' valoriser les cellules d'entête par la ligne suivant :
                .Cells(1, 1).Resize(, 2).Value = Application.Transpose(Array("Code", "Libellé"))
                '
                ' Ou par les deux lignes suivantes
                '.Cells(1, 1).Value = "Code"
                '.Cells(1, 2).Value = "Libelle"
            End If
        End With
    Next
End Sub

Il vaut mieux déclarer vos variables objets par le type attendu, vous profiterez ainsi de l'intellisense dès que vous mettrez un point collé après.
Regarde la pièce jointe 1112792

Cordialement

[Edit] Oups ! à la bourre :) [/Edit]
Merci beaucoup Roblochon, la suppression marche très bien, mais j'obtiens le mot "Code" dans les cellules A1 et B1 avec Array.
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Bonjour,
Ws représente déjà ton onglet pas besoin de te compliquer la vie avec ws.name!
Code:
For Each ws In Worksheets  'ws représente succécivement les onglets !
'on efface les données précedentes
    If ws.Cells(1, 1).Value <> "" Then
        Ws.cells.ClearContents
    ws.Cells(1, 1).Value = "Code"
    ws.Cells(1, 2).Value = "Libelle"
    End If
Next
End sub
Si tu as 500 onglet, faut pas être épileptique Sheets(ws.Name).Select!
Merci beaucoup !
 

Discussions similaires