Bug avec un code pourtant simple

Bonjour Forum,

Dans une macro, je tente de supprimer les lignes 4 à 200 de plusieurs feuillets (tous les feuillets sauf le premier) puis, de copier la ligne 3 restante à nouveau aux lignes 4 à 200. Ceci a pour but, d'effacer des résultats sur les lignes supprimées et de conserver l'arrière-plan non touché à la ligne 3.

Voici le code:

Sub Rafraichir()
'
For i = 2 To Sheets.Count
    With Sheets(i)
    Rows("4:200").Delete
    Rows("3:3").Select
    Selection.Copy
    Rows("4:200").Select
    Sheets(i).Paste
    End With
Next

End Sub

Cependant 2 bugs surgissent: 1. la macro ne s'effectue pas nécessairement sur les feuillets souhaités. 2. Une erreur apparait à la ligne Sheet(i).Paste

Je vous fournit le fichier. Les 2 feuillets que je cherche à rafraichir sont CM et MT. En réalité, je cherche à rafraichir une douzaine de feuillets dans une boucle.

Quelqu'un peut m'indiquer mes erreurs!

Merci d'avance

Émil

Salut le Forum

Code corrigée

Sub Rafraichir()
Dim I As Byte

    For I = 2 To Sheets.Count
        With Sheets(I)
            .Rows("4:200").Delete
            .Rows("3:3").Copy .Rows("4:200")
        End With
    Next I

End Sub

Mytå

Bonjour,

Option Explicit
Public Sub Rafraichir()
Dim i As Byte

    Application.ScreenUpdating = False

    For i = 2 To Worksheets.Count
        With Worksheets(i)
            .Rows("4:200").Delete
            .Rows("3:3").Copy Destination:=.Rows("4:200")
        End With
    Next

    Application.CutCopyMode = False

End Sub

Bonjour,

tu peux te passer du .delete puisque 4:200 sera de toute façon écrasé par le collé.

eric

Bonjour

Pour supprimer et conserver la mise en forme.

suffit d'utiliser clearcontents au lieu de delete.

Public Sub Rafraichir()
    Dim sh As Worksheet
    Application.ScreenUpdating = False
    For Each sh In ThisWorkbook.Worksheets: sh.Rows("4:200").ClearContents: Next sh
    Application.ScreenUpdating = True
End Sub

Re,

Une autre possibilité :

Option Explicit
Public Sub Rafraichir()
Dim i As Byte
    Application.ScreenUpdating = False
    For i = 2 To Worksheets.Count
        Worksheets(i).Rows("3:200").FillDown
    Next
End Sub

Bonjour,

j'ai appliqué les différentes solutions proposées par Mytå et Eric et tout fonctionne parfaitement. J'aurais dû préciser dans ma question initiale que le but de mon code était de tout supprimer: le contenu et la mise en forme des cellules. À ce propos, la suggestion de Habitude ne convenait pas tout à fait.

Merci pour vos réponses... on apprend sans cesse grâce à vous.

Émil

Rechercher des sujets similaires à "bug code pourtant simple"