Incrémenter nom onglet

Salut à tous,

Dans le code suivant :

Sub CopiePB()
Dim strNewName As String
Dim i As Integer
strNewName = "Pense bete"

For i = 2 To 15
If Feuil_Exist(ThisWorkbook.Name, strNewName) = True Then
strNewName = "Pense bete N°" & i
End If
Next

ActiveSheet.Copy Before:=Worksheets("Pense bete") ' copie feuille en cours avant la feuille en cours
ActiveSheet.Name = strNewName
ActiveSheet.Shapes("CommandButton1").Select
Selection.Cut
Sheets("Pense bete").Select
Range("C3").Select

End Sub

J'ai une feuille nommée "Pense bete", j'ai créer un bouton copie.

Celui copie la feuille "Pense bete" et la colle avant cette feuille en la renommant puis en supprimant le bouton.

L'idée c'est que c'est la feuille "Pense bete" qui soit utilisée, la copie, c'est qu'une trace.

J'ai utilisé "For et Next" pour ce qui se passera entre une 2ième copie jusqu'à une 15ième copie (jamais + de 15 copie) pour renommer les copies suivantes en récupérant ma variable.

Tout marche, le seul soucis c'est que l'ordre me plaît pas.

On colle toujours la nouvelle feuille derrière le "Pense bete", du coup je me retrouve avec :

Pense bête N°2, Pense bête N°3, Pense bête N°4, Pense bête.

Hors, j'aimerais l'odre inverse, 4, 3, 2 et Pense bête.

Je n'arrive pas à jouer sur le

ActiveSheet.Copy Before:=Worksheets("Pense bete")

Cordialement

Bonsoir,

en somme si pense bête est la deuxième feuille de votre classeur les copies doivent alors être copie en position 2

Du coup votre code serait :

ActiveSheet.Copy Before:=Worksheets(2)

@ bientôt

LouReeD

Salut, j'aurais du être plus précis car cette méthode ne fonctionne pas dans mon cas.

Le nombre de feuille varie, ce n'est donc jamais fixe.

Ce qui veut dire que j'ai par exemple :

Feuil1, Feuil2, Pense bete

Parfois,

Feuil1, Feuil2, Feuil3, Pense bete

Cordialement

En effet je n'avais pas compris

Essayez ceci :

Sub CopiePB()
Dim strNewName As String
Dim i As Integer
strNewName = "Pense bete"

For i = 2 To 15
If Feuil_Exist(ThisWorkbook.Name, strNewName) = True Then
    strNewName = "Pense bete N°" & i
Else ' si pense bete 3 n'existe pas alors on coie avant "pense bete 2"
    ActiveSheet.Copy Before:=Worksheets(Worksheets("Pense bete" & i - 1).Index) ' copie feuille en cours avant la feuille en cours
End If
Next

ActiveSheet.Name = strNewName
ActiveSheet.Shapes("CommandButton1").Select
Selection.Cut
Sheets("Pense bete").Select
Range("C3").Select

End Sub

@ bientôt

LouReeD

Salut à toi,

Il semblerait y avoir un problème sur la ligne :

 ActiveSheet.Copy Before:=Worksheets(Worksheets("Pense bete" & i - 1).Index) ' copie feuille en cours avant la feuille en cours

"L'indice n'appartient pas à la sélection"

Cordialement

Essayez ceci alors :

Sub CopiePB()
Dim strNewName As String
Dim i As Integer
strNewName = "Pense bete"
On Error Resume Next
For i = 2 To 15
    Sheets(strNewName & i).Activate
    If Err > 1 Then
        If i = 2 Then
            ActiveSheet.Copy Before:=Worksheets(Worksheets("Pense bete").Index)
            strNewName = strNewName & "2"
        Else
            ActiveSheet.Copy Before:=Worksheets(Worksheets("Pense bete" & i - 1).Index)
            strNewName = strNewName & i
        End If
        ActiveSheet.Name = strNewName
        ActiveSheet.Shapes("CommandButton1").Select
        Selection.Cut
        Sheets("Pense bete").Select
        Range("C3").Select
        Exit For
    End If
Next i
End Sub

Je n'utilise plus votre fonction "existe" mais une gestion d'erreur...

@ bientôt

LouReeD

Bonsoir, Salut LouReed !

Un premier truc me chiffonne ! (parce qu'il y en a plusieurs, mais commençons par le premier).

Si la feuille que tu copies se nomme "Pense bete", Excel va automatiquement nommer la copie "Pense bete (2)".

Si tu veux la renommer "Pense bete", Excel va te dite STOP parce que le nom existe déjà. Tu ne peux donc le faire sans déclencher d'erreur.

...
strNewName = "Pense bete"
...
ActiveSheet.Name = strNewName
...

Ce point est à éclaircir en priorité. Si tu dis n'avoir pas d'erreur, c'est que tu n'as pas fourni le bon code... !

Bonsoir Maréchal

En fait dans sa boucle il est dit :

si strNewName existe alors strNewName = strNewName & "N°" & i; ou plus court : strNewName = "Pense bete N°" & i

For i = 2 To 15
If Feuil_Exist(ThisWorkbook.Name, strNewName) = True Then
    strNewName = "Pense bete N°" & i
Else ' si pense bete 3 n'existe pas alors on coie avant "pense bete 2"
    ActiveSheet.Copy Before:=Worksheets(Worksheets("Pense bete" & i - 1).Index) ' copie feuille en cours avant la feuille en cours
End If
Next

Il n'y a donc pas de STOP...

@ bientôt

LouReeD

Salut LouReed !

Mais c'est que tu as raison ! La méthode est toutefois curieuse, on cherche le rang de l'original à partir de 2 et on le retient comme numéro de Pense-bête. Mais si au départ l'original se trouve en 1 et qu'il n'y a pas eu de copie numérotée ? Et on n'aura jamais de copie n° 1 ?

Ce qui voudrait dire :

  • qu'il doit y avoir 2 feuilles au départ avec l'original Pense-bête en 2,
  • qu'il veut des Pense-bête, successivement créés par copie, placés avant l'original, le copies étant numérotées de 2 à x, en partant de l'original vers la premère feuille ?
  • la dernière copie créée aurait donc toujours le n° 2 ?
  • ce qui veut dire qu'il faut incrémenter toutes les autres à chaque création,
  • donc renommer les copies après création, en partant de l'original, à chaque fois !

Quelque chose comme ça alors :

Sub CopiePB()
    Dim strNewName$, i%, n%
    strNewName = "Pense bete N°"
    Worksheets("Pense bete").Copy Before:=Worksheets("Pense bete")
    With ActiveSheet
        .Name = strNewName & 1
        .Shapes("CommandButton1").Delete
    End With
    For i = 1 To Worksheets.Count
        If Worksheets(i).Name Like strNewName & "*" Then
            n = Val(Replace(Worksheets(i).Name, strNewName, "")) + 1
            Worksheets(i).Name = strNewName & n
        End If
    Next i
End Sub

Le dernier code fonctionne, merci !

Cordialement

Maréchal,

Mais c'est que tu as raison !

Quand même depuis qu'on "se connaît" vous devriez le savoir, non ?

et de mon coté en lisant ceci :

Hors, j'aimerais l'ordre inverse, 4, 3, 2 et Pense bête.

j'ai supposé que le "1" était l'original...

Et mon code fonctionne très bien qu'avec l'original existant dans le classeur, non ?

@ DRB_Fred : de quel code parlez vous ?

@ bientôt

LouReeD

Rechercher des sujets similaires à "incrementer nom onglet"