Action répétitive sur plusieurs feuilles de calcul

Résolu
sab -  
Theo.R Messages postés 585 Statut Membre -
Bonjour,

J'ai fais la macro ci-dessous pour une action que je veux répétitive sur toutes les feuilles de mon classeur sauf que la macro ne va pas sur la feuille 2 et les suivantes donc le for next ne marche pas.

Sub essai()
Dim k As Integer
Dim i As Integer
Sheets("Recap").Select
k = Sheets.Count
For i = 1 To k
Range("a3").Select
Columns("a:I").Select
Selection.FormatConditions.Delete
Columns("O:U").Select
Range("O2").Activate
Selection.Copy
Columns("A:A").Select
Range("A2").Activate
ActiveSheet.Paste
Columns("O:U").Select
Range("O2").Activate
Application.CutCopyMode = False
Selection.ClearContents
Range("A1:G2").Select
Selection.Copy
Range("O1:U1").Select
ActiveSheet.Paste
Range("I1:M2").Select
Application.CutCopyMode = False
Selection.Copy
Range("V3").Select
ActiveSheet.Paste
Columns("I:M").Select
Range("I2").Activate
Application.CutCopyMode = False
Selection.ClearContents
Range("V3:Z4").Select
Selection.Copy
Range("I1:M1").Select
ActiveSheet.Paste
Range("V3:Z4").Select
Application.CutCopyMode = False
Selection.Clear
Next
End Sub

2 réponses

  1. Theo.R Messages postés 585 Statut Membre 31
     
    En soi il suffit d'ajouter juste en dessous du for... :
    Sheets(i).Select

    De plus précisez bien "Next i" et pas juste "Next" en fin de boucle.
    Après votre code est très lourd et pourrait être optimisé !
    0
  2. sab
     
    Bonjour,

    Merci pour ton aide mais j'avais trouvé entre temps.
    En effet mon code est lourd, je vais essayer d'optimiser mais je commence
    seulement une auto formation en vba donc c'est un peu difficile.
    si tu peux me donner une idée de départ ça m'aiderait.
    Cdlt
    0
    1. Theo.R Messages postés 585 Statut Membre 31
       
      pas de souci j'ai commencé pour ma part VBA seul il y a 1 an donc je comprends ^^

      Conseils :
      1) supprimez tous les .Select possibles ! ça commence par les .Select inutiles comme la 1er dans les 2 suivant :
      Range("a3").Select
      Columns("a:I").Select


      2) Pour les copier-coller, au lieu de :
      Range("O2").Activate
      Selection.Copy
      Columns("A:A").Select
      Range("A2").Activate
      ActiveSheet.Paste

      Essayez :
      Range("A2").value = Range("O2").value

      PS: ça contribuera au 1) ;)

      ça me semble déjà un bon début pour épurer votre code et gagner en performance. Pour la suite, on verra si des boucles ou autre peuvent être mises en place pour des actions répétitives car je vois bcp de copier-coller..
      0
      1. sab > Theo.R Messages postés 585 Statut Membre
         
        ok je vais voir ce que je peux faire dès que possible et te redis.

        Merci bonne journée
        0
      2. sabw > Theo.R Messages postés 585 Statut Membre
         
        Bonjour, me revoilà j'ai réussi à optimiser du coup la macro ressemble à ça et le mieux ça fonctionne bien, merci pour les tuyaux ça m'a bien aidé.
        Sub dailyjour()

        Dim K As Integer
        Dim I As Integer
        K = Sheets.Count

        For I = 1 To K
        Sheets(I).Activate
        Range("a3").Select
        Columns("A:G").Value = Columns("O:U").Value
        Columns("O:U").Select
        Selection.ClearContents
        Range("O1:U2").Value = Range("A1:G2").Value
        Range("V3:Z2").Value = Range("I1:M2").Value
        Columns("I:M").Select
        Selection.ClearContents
        Range("I1:M2").Value = Range("V3:Z2").Value
        Range("V3:Z2").Select
        Selection.ClearContents
        Range("A3").Select
        Next I
        Sheets(1).Select
        Range("A3").Select

        End Sub
        0
      3. Theo.R Messages postés 585 Statut Membre 31 > sabw
         
        Encore un conseil :

        Au lieu de
        Columns("O:U").Select
        Selection.ClearContents


        Essayez :
        Columns("O:U").ClearContents


        bonne continuation ;)
        0