Copier un onglet et incrémenter son nom

Salut!

Petite présentation: Nicolas 23 ans, débutant sur VBA et les macros (utilisation peu intensive).

J'aurais besoin d'aide s'il vous plaît pour finaliser une macro qui sert à créer une nouvelle fiche recette. Le fonctionnement est simple:

- Copier un onglet fiche recette vierge (V X)

- Le coller juste avant cet onglet vierge

- Changer sa couleur

- Renommer l'onglet collé en l'onglet précédent en incrémentant sa valeur: V20 BIO -> V21 BIO

Le code ressemble à ça

Sub NouvRecette2()
'
' NouvRecette2 Macro

    Sheets("V X").Select
    Sheets("V X").Copy Before:=Sheets("V X")
    Sheets("V X (2)").Name = "V BIO"
    Sheets("V BIO").Select
    With ActiveWorkbook.Sheets("V BIO").Tab
        .ThemeColor = xlThemeColorAccent3
        .TintAndShade = 0.399975585192419
    End With
    Sheets("V BIO").Select
End Sub
image

Je bloque au moment de renommer l'onglet en incrémentant. Auriez vous une solution s'il vous plaît?

Merci d'avance et bonne journée

Bonjour,

Voici un essai :

Sub NouvRecette2()
with NewSheet("V X")
    .Name = "V" & iif(.index = 1, 0, Nval(.previous.name)) + 1 & " BIO"
    with .Tab
        .ThemeColor = iif(.index = 1, xlThemeColorAccent3, .parent.previous.tab.themecolor)
        .TintAndShade = iif(.index = 1, 0.399975585192419, .parent.previous.tab.tintandshade)
    End With
end with
End Sub

Function NVal(chaine$) As String 'fonction qui récupère les chiffres d'une chaine
For i = 1 To Len(chaine)
    If Not Mid(chaine, i, 1) Like "#" Then Mid(chaine, i, 1) = " "
Next i
NVal = Replace(chaine, " ", "")
End Function

function NewSheet(NomModele$) as worksheet 'fonction qui récupère la feuille créée par copie
Sheets(NomModele).copy before:=Sheets(NomModele)
set NewSheet = activesheet
end function

Cdlt,

Bonjour,

Ton code actuel peut également être écrit ainsi :

Sub NouvRecette2()
'
' NouvRecette2 Macro

Sheets("V X").Copy Before:=Sheets("V X")
    With ActiveSheet
        .Name = "V BIO"
        .Tab.ThemeColor = xlThemeColorAccent3
        .Tab.TintAndShade = 0.399975585192419
    End With
End Sub

Pour ce qui est de la totale, j'imagine un truc comme ça :

Sub NouvRecette2()
'
' NouvRecette2 Macro

Dim Ws As Worksheet, nb As Integer

nb = 1 'variable qui nous servira à numéroter la version
For Each Ws In ThisWorkbook.Worksheets 'on boucle sur tous les onglets du fichier
    If Ws.Name Like "*BIO" Then nb = nb + 1 'si le nom de l'onglet contient le mot BIO, alors on rajoute 1 à la variable
Next

'on a ainsi une variable nb, égale au nombre de fois qu'on trouve BIO dans tes onglets, +1
Sheets("V X").Copy Before:=Sheets("V X")
    With ActiveSheet
        .Name = "V" & nb & " BIO" 'on nomme la feuille en intégrant le numéro que l'on a calculé au préalable
        .Tab.ThemeColor = xlThemeColorAccent3
        .Tab.TintAndShade = 0.399975585192419
    End With
End Sub

Edit : Hello 3GB, mince, je n'avais pas rafraichi la page pendant un moment et n'avais pas vu ta réponse !

Bonjour à tous, sans le fichier je n'ai pas l'info du nombre d'onglet qui ne s'appel pas "V..BIO"

Il faut donc remplacer la valeur -1 par le nombre d'onglet différents de V..BIO

Sub Macro1()
'
Dim nbfeuilles As Long
nbfeuilles = ThisWorkbook.Sheets.Count + 1 - 1 ' REMPLACER -1 PAR LE NOMBRE DE FEUILLE QUI NE S'APPEL PAS "V..BIO"

Sheets("V X").Copy Before:=Sheets("V X")
ActiveSheet.Name = "V" & nbfeuilles & " BIO"
With ActiveSheet.Tab
.ThemeColor = xlThemeColorAccent3
.TintAndShade = 0.399975585192419
End With

End Sub

Merci pour vos 3 propositions! ça a totalement résolu mon problème. Je n'ai pas tout saisi en détail, mais vais me pencher plus sur le code pour en comprendre le fonctionnement. Bon après midi à vous!

Pas de souci.
J'ai édité mon post en commentant les lignes pour que tu voies mieux à quoi ça correspond.

Re, Salut JoyeuxNoel, Salut Xmenpl,

J'ai également édité mon code afin de gérer le cas de la création d'une première feuille Vxx BIO (supposée être la première du fichier).

Cdlt,

Re je n'ai pas édité mon post car à part la ligne de calcul du nombre de feuille le reste du code est celui de nicolas

Re, Salut JoyeuxNoel, Salut Xmenpl,

J'ai également édité mon code afin de gérer le cas de la création d'une première feuille Vxx BIO (supposée être la première du fichier).

Cdlt,

C'est pour ça que j'initialise la variable à 1 :)
Mais en vrai, je suis jaloux. J'aimerais bien faire plein de sous-sub comme ça

Oui, justement, c'est en voyant ton code que je me suis dit "Hum, ça pourrait être pas mal de faire comme JoyeuxNoel et de prévoir un début à tout ça".

Ne sois pas jaloux, il suffit juste de rentrer les éléments en dur en paramètres ! C'est pas tout le temps utile mais parfois très pratique.

Rechercher des sujets similaires à "copier onglet incrementer nom"