Remplacer nom des onglets automatiquement

Bonjour,

J'ai plusieurs classeurs dont les onglets sont chacun fait de la sorte "mois + 2020". Et je souhaiterais les transformer en "mois + 2021" sans tout faire à la main.
J'ai regardé du coté de la fonction

.Name

Mais je ne vois pas comment adapter ma boucle comme par exemple :

For Each Sheet In ActiveWorkbook.Sheets

       If Sheet(c'est la ou je bloque).Name =  

Next Sheet

Merci d'avance

Bonjour,

1- éviter les noms réservé VBA comme noms de variable. Donc, remplacez Sheet par Sh par exemple.

2- suffit de changer le dernier caractère du nom de la feuille si les 4 derniers sont 2020.

For Each Sheet In ActiveWorkbook.Sheets

       If Right$(Sh.Name, 4) = "2020" Then Sh.Name = Left$(Sh.Name, Len(Sh.Name) - 1) & "1"

Next Sheet

A cela, pour être "confort", il faudrait ajouter un test pour le cas ou la feuille "Mars 2021" par exemple, existe déjà...

C'est parfait ! Je vous remercie infiniment !!

Bonjour Tortank, bonjour le forum,

Essaie cette macro pour chaque fichier :

Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)

For Each O In Worksheets 'boucle sur tous les onglets O
    'Si le nom de l'onglet contient "2020", remplace "2020" par "2021"
    If InStr(1, O.Name, "2020", vbTextCompare) <> 0 Then O.Name = Replace(O.Name, "2020", "2021", 1)
Next O 'prochain onglet de la boucle
End Sub

[Édition]

Bonjour Pijaku, nos posts se sont croisés...

Les deux fonctionnent, merci à vous et bonne journée !

Rebonjour,

Je me pose une question, j'ai essayé d'appliquer cette méthode non pas à un onglet mais à mon classeur tout entier. Exemple je souhaiterais modifier tous les 2020 de mon classeur peu importe l'endroit et le remplacer par 2021. J'ai essayé avec votre méthode de cette manière :

Sub Macro1()
Dim O As Worksheet 'd?clare la variable O (Onglet)
For Each O In ThisWorkbook.Worksheets 'boucle sur tous le classeur
    'Si le nom de l'onglet contient "2020", remplace "2020" par "2021"
    If InStr(1, O.Name, "2020", vbTextCompare) <> 0 Then O.Name = Replace(O.Name, "2020", "2021", 1)

Next O 'prochain onglet de la boucle
End Sub

Mais je ne comprends pas trop par quoi remplacer O.Name pour reussir à l'appliquer sur tout mon classeur.

Auriez-vous une idée ?

Bonjour le fil, le forum

Peut-être comme ça :

Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim CEL As Range 'déclare la variable CEL (CELlule)

For Each O In Worksheets 'boucle 1 : sur tous les onglets du classeur
    'Si le nom de l'onglet contient "2020", remplace "2020" par "2021"
    If InStr(1, O.Name, "2020", vbTextCompare) <> 0 Then O.Name = Replace(O.Name, "2020", "2021", 1)
    For Each CEL In O.UsedRange 'boucle 2 : sur toutes les cellules de la plage éditée de l'onglet O
        'Si la cellule contient "2020", remplace "2020" par "2021"
        If InStr(1, CEL.Value, "2020", vbTextCompare) <> 0 Then CEL.Value = Replace(CEL.Value, "2020", "2021", 1)
    Next CEL 'prochaine cellule de la boucle 2
Next O 'prochain onglet de la boucle 1
End Sub

Merci pour ta réponse ThauThème.

Cela me renvoie l'erreur "incompatibilité de type" pour cette ligne :

If InStr(1, CEL.Value, "2020", vbTextCompare) <> 0 Then

Dû à

CEL.value 

j'imagine.

Re,

Pas d'erreur chez moi sur un petit test... Si tu daignais fournir un fichier on pourrait peut-être approfondir...

Malheureusement mon fichier est bien trop lourd pour que je puisse le poster…

C'est de ma faute, je l'ai mal implémenté au reste de mon code.

Merci encore pour ton aide !

Rechercher des sujets similaires à "remplacer nom onglets automatiquement"