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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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.
 
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:
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]
 
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.
 
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 !
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
478
Réponses
10
Affichages
414
Réponses
2
Affichages
427
  • Question Question
Microsoft 365 Excel VBA
Réponses
5
Affichages
464
Réponses
1
Affichages
265
Réponses
10
Affichages
533
Retour