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

XL 2021 Exécuter une macro sur plusieurs feuilles

micie1509

XLDnaute Junior
Bonsoir,

Je viens vers vous car je n'arrive pas à trouver la solution : J'ai un fichier qui a presque 100 feuilles. En début d'année, il faut copier la cellule F61 et coller la valeur de celle-ci dans la cellule F8. Ensuite, je dois supprimer toutes les données de B9 à D61 sur chacune des feuilles (SAUF celles dont le nom commence par 1-).

J'ai cette macro qui fonctionne sur la page en cours, mais pas sur les autres. Naturellement elle ne tient pas compte des feuilles dont le nom débute par 1- puisque je n'ai aucune idée si c'est possible.
En fait la macro fonctionne en elle-même, mais j'ai rajouté :For Each sh In ThisWorkbook.Sheets en croyant que cela pourrait fonctionné, mais non...

VB:
Sub Solde()

For Each sh In ThisWorkbook.Sheets
 
    Range("F61").Select
    Selection.Copy
    Range("F8").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        Range("B9:D61").Select
    Application.CutCopyMode = False
    Selection.ClearContents
    Range("A4").Select
Next sh
End Sub

Je vous remercie d'avance de votre aide.
 

Pièces jointes

  • 2024-1a.xlsm
    98.1 KB · Affichages: 3
Solution
Bonsoir.
Essayez comme ça :
VB:
Option Explicit
Sub Solde()
   Dim Wsh As Worksheet
   For Each Wsh In ThisWorkbook.Worksheets
      If Not Wsh.Name Like "1-*" Then
         Wsh.[F8].Value = Wsh.[F61].Value
         Wsh.[B9:D61].ClearContents
         End If
      Next Wsh
   End Sub

Gégé-45550

XLDnaute Accro
Bonsoir,
à tester :
VB:
Sub Solde()
Dim sh As Worksheet
    For Each sh In ThisWorkbook.Sheets
        If Left(sh.Name, 2) <> "1-" Then
            sh.Range("F61").Select
            Selection.Copy
            sh.Range("F8").Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                :=False, Transpose:=False
                sh.Range("B9:D61").ClearContents
            sh.Range("A4").Select
        End If
    Next sh
End Sub
Cordialement,
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
Essayez comme ça :
VB:
Option Explicit
Sub Solde()
   Dim Wsh As Worksheet
   For Each Wsh In ThisWorkbook.Worksheets
      If Not Wsh.Name Like "1-*" Then
         Wsh.[F8].Value = Wsh.[F61].Value
         Wsh.[B9:D61].ClearContents
         End If
      Next Wsh
   End Sub
 

micie1509

XLDnaute Junior
Bonjour à tous

@micie1509

Je te propose une autre façon de faire

Merci de ton retour
Bonjour Phil69970, merci beaucoup pour le temps que tu m'as consacré. Ta solution fonctionne en partie chez-moi. Elle copie bien le solde (cellule F61 copiée en F8) mais elle ne supprime pas les données de B9 à D61 de chacune des feuilles. Je ne comprends pas pourquoi d'ailleurs... Par contre j'ai adoré l'idée de la Message Box à la fin de la macro. Je vais l'utiliser avec la solution Dranreb. Un gros merci de ton temps !
 

micie1509

XLDnaute Junior
Et moi je sens le mazout, sûrement !
Oh comme je suis désolée! je viens juste de voir votre solution. Je me demandais pourquoi vous sentiez le mazout. Je ne sais pas pourquoi, mais je ne vous voyais pas hier. Je suis tombée directement sur Dranreb. C'est moi qui n'a pas bien regardé sûrement. Si vous saviez combien je me sens mal en ce moment. Vraiment désolée et MERCI BEAUCOUP du temps que vous m'avez donné !
 

Discussions similaires

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