XL 2013 Copier une feuille et la ronnmer par rapport la dernière feuille ?

nunizgb

XLDnaute Junior
Bonjour,

Je souhaite créer un code vba qui vas créer une nouvelle feuille, copier une feuille modèle vers cette nouvelle feuille et la nommer par rapport la dernière feuille du classeur.

Donc j'ai une feuille modèle, base, 4 et 5

Sur la feuille base, j'ai mon bouton qui créer une nouvelle feuille on copient la feuille modèle et on peux la nommer mais comment la nommer automatiquement si la dernière feuille actuelle a pour nom 5 la nouvelle devra se nommer 6.

Puis comment interdire la mise en page de la feuille via vba par exemple la feuille 4 afin qu'on puisse juste entres des informations

Voici le code que j'utilise
Code:
Sub CopyRename()
    Dim sName As String
    Dim wks As Worksheet
    Worksheets("model").Copy after:=Sheets(Worksheets.Count)
    Set wks = ActiveSheet
    Do While sName <> wks.Name
        sName = Application.InputBox _
          (Prompt:="Enter new worksheet name")
        On Error Resume Next
        wks.Name = sName
        On Error GoTo 0
    Loop
    Set wks = Nothing
End Sub

Merci pour votre aide
 

Pièces jointes

  • testonglet.xlsm
    17.9 KB · Affichages: 24

Papou-net

XLDnaute Barbatruc
Re : Copier une feuille et la ronnmer par rapport la dernière feuille ?

Bonsoir nunizgb,

Au vu de ce que je pense avoir compris, ces quatre devraient suffire:

Code:
Sub CopyRename()
    Worksheets("modele").Copy after:=Sheets(Worksheets.Count)
    ActiveSheet.Name = Worksheets.Count + 1
End Sub
A +

Cordialement.
 

nunizgb

XLDnaute Junior
Re : Copier une feuille et la ronnmer par rapport la dernière feuille ?

Bonsoir nunizgb,

Au vu de ce que je pense avoir compris, ces quatre devraient suffire:

Code:
Sub CopyRename()
    Worksheets("modele").Copy after:=Sheets(Worksheets.Count)
    ActiveSheet.Name = Worksheets.Count + 1
End Sub
A +

Cordialement.

Merci pour le code et oui effectivement cela marche mais pas à 100 %.

Exemple : Actuellement la dernier feuille a pour nom 5, je clique sur le bouton et une nouvelle feuille est créer avec nom 6, je renomme cette feuille manuellement pour avoir le nom 100, puis je clique à nouveau sur bouton. Il vas me créer la nouvelle feuille mais elle vas avoir comme nom : 7 et non 101.
Vu que la dernière feuille est bien 100 et non 6
 

DoubleZero

XLDnaute Barbatruc
Re : Copier une feuille et la ronnmer par rapport la dernière feuille ?

Bonjour à toutes et à tous,

Une autre suggestion avec le code suivant :

Code:
Option Explicit
Sub Onglet_créer()
    Dim o As Object
    With Sheets("base")
        .Columns(1).Clear
        For Each o In Worksheets
            If o.Name <> "base" And o.Name <> "modele" Then .Range("a" & Rows.Count).End(xlUp)(2) = o.Name
        Next o
        .Range("a1") = "Onglets"
        .Range("a:a").Sort Range("a1"), xlAscending, Header:=xlYes
    End With
    Worksheets("modele").Copy after:=Sheets(Worksheets.Count)
    ActiveSheet.Name = Sheets("base").Range("a" & Rows.Count).End(xlUp)(1).Value + 1
    Sheets("base").Range("a" & Rows.Count).End(xlUp)(2) = ActiveSheet.Name
End Sub

Bises à Papou-net :D

A bientôt :)
 

nunizgb

XLDnaute Junior
Re : Copier une feuille et la ronnmer par rapport la dernière feuille ?

Bonjour à toutes et à tous,

Une autre suggestion avec le code suivant :

Code:
Option Explicit
Sub Onglet_créer()
    Dim o As Object
    With Sheets("base")
        .Columns(1).Clear
        For Each o In Worksheets
            If o.Name <> "base" And o.Name <> "modele" Then .Range("a" & Rows.Count).End(xlUp)(2) = o.Name
        Next o
        .Range("a1") = "Onglets"
        .Range("a:a").Sort Range("a1"), xlAscending, Header:=xlYes
    End With
    Worksheets("modele").Copy after:=Sheets(Worksheets.Count)
    ActiveSheet.Name = Sheets("base").Range("a" & Rows.Count).End(xlUp)(1).Value + 1
    Sheets("base").Range("a" & Rows.Count).End(xlUp)(2) = ActiveSheet.Name
End Sub

Bises à Papou-net :D

A bientôt :)

Merci à Papou-net et à DoubleZero,

Le code marche à merveille par contre je vient de me rendre le compte si la feuille Modele est masque via vba avec le code
Code:
Worksheets("Modele").Visible = xlSheetVeryHidden

J'ai ceci comme erreur
Code:
Worksheets("modele").Copy after:=Sheets(Worksheets.Count)
en clair le code vba ne peut pas copier une feuille qui est hyper masquer. Donc si je ne me trompe pas je doit d'abord affichier cette feuille puis une fois copier la masquer à nouveau ?

Puis comment je puisse mettre un usf qui demande un mot de passe qui n'est pas afficher en clair. Si mot de passe OK alors exécution de la macro si FAUX alors msgbox qui dit Mot de passe faux by by. Si on rentre 3 fois mauvaise mot de passe le fichier se ferme automatiquement.

Merci encre pour votre aide car je ne suis encore novice en code vba et avec votre aide au lieu de mettre 1 semaine pour faire ce code, c'est bcp plus rapide avec votre aide et en plus on apprend
 

nunizgb

XLDnaute Junior
Re : Copier une feuille et la ronnmer par rapport la dernière feuille ?

rebonjour,
voila j'ai bien afficher la feuille dans le code avant de la copier puis la cacher à nouveau, le code s’exécute. Par contre je viens de voir un bug ou non. En clair je cliquer sur le bouton alors que la dernier feuille actuelle est 69, le code creer une nouvelle feuille 70, puis je la nomme en 89, j’exécute à nouveau le code et j'ai bien la nouvelle feuille 90. Par contre si je déplace cette feuille et donc c'est une autre feuille par exemple 100 qui est actuellement la dernière. La nouvelle feuille à pour nom 91 et non 101.

Donc est-ce qu'on peux corriger cela ou on dit interdire déplacement de feuille via code mais comment ?

Merci
 

nunizgb

XLDnaute Junior
Re : Copier une feuille et la ronnmer par rapport la dernière feuille ?

Re-bonjour,



:confused:

Tester le fichier joint.

A bientôt :)

Merci mais il n'y a pas de fichier joint, par contre je vais faire un fichier exemple avec mon classeur qui pose le problème de copie de la feuille car ma feuille model a bcp de fonction et nom de cellule. Donc elle n'arrive pas à copier. Puis j'ai essayer de ne pas avoir la copie des onglets sur la feuille base.
 

nunizgb

XLDnaute Junior
Re : Copier une feuille et la ronnmer par rapport la dernière feuille ?

Re-bonjour,

Toutes mes excuses :eek: : le voici.

A bientôt :)

Merci Voila dans la feuille Base il y a ceci :

Onglets

100
101
102
103

Mais si je nomme onglet 103 pour avoir 90, j'ai toujours ceci :

Onglets

90
100
101
102


et non
Onglets

100
101
102
90

d'où coup la prochaine feuille sera 104 et non 91arce que dans la feuille base colonne A est trier ?
 
Dernière modification par un modérateur:

Papou-net

XLDnaute Barbatruc
Re : Copier une feuille et la ronnmer par rapport la dernière feuille ?

Bonjour nunizgb, DoubleZero (+ bises),

Pour reprendre le fil, voici une solution qui me semble convenir. A une nuance près toutefois: il faut que le nom des onglets se termine toujours par des caractères numériques, sans quoi sanction par un message d'erreur.

Code:
Sub CopyRename()
Dim nomOnglet As String, i

nomOnglet = Sheets(Sheets.Count).Name
If IsNumeric(nomOnglet) Then
  nomOnglet = nomOnglet + 1
  Else
  For i = Len(nomOnglet) To 1 Step -1
    If Not IsNumeric(Mid(nomOnglet, i, 1)) Then Exit For
  Next
  nomOnglet = Left(nomOnglet, i) & Mid(nomOnglet, i + 1) + 1
End If
Worksheets("modele").Copy after:=Sheets(Worksheets.Count)
ActiveSheet.Name = nomOnglet
End Sub
Bonne journée.

Cordialement.

PS: as-tu remarqué, chère petite ânesse, que nous avons le même nombre de messages (4448)?
 
Dernière édition:

nunizgb

XLDnaute Junior
Re : Copier une feuille et la ronnmer par rapport la dernière feuille ?

Re-Bonjour

Code:
Sub Onglet_créer()
    Dim o As Object
    With Sheets("base")
        .Columns(1).Clear
        For Each o In Worksheets
            If o.Name <> "base" And o.Name <> "modele" Then .Range("a" & Rows.Count).End(xlUp)(2) = o.Name
        Next o
        .Range("a1") = "Onglets"
        .Range("a:a").Sort Range("a1"), Header:=xlYes
    End With
    With Worksheets("modele"): .Visible = -1: .Copy after:=Sheets(Worksheets.Count): .Visible = 2: End With
    ActiveSheet.Name = Sheets("base").Range("a" & Rows.Count).End(xlUp)(1).Value + 1
    Sheets("base").Range("a" & Rows.Count).End(xlUp)(2) = ActiveSheet.Name
    Sheets("base").Range("a:a").ClearContents
End Sub

Si je supprime le tri alors cela marche par contre comment faire pour efface les donnes onglets qui sont affiche sur la feuille base et que cela marche aussi. Car ce code efface bien mais si je renommer la dernier feuille il ne marche pas cad qui créer la nouvelle feuille comme valeur initiale de la dernier feuille créer.
 

nunizgb

XLDnaute Junior
Re : Copier une feuille et la ronnmer par rapport la dernière feuille ?

Bonjour nunizgb, DoubleZero (+ bises),

Pour reprendre le fil, voici une solution qui me semble convenir. A une nuance près toutefois: il faut que le nom des onglets se termine toujours par des caractères numériques, sans quoi sanction par un message d'erreur.

Code:
Sub CopyRename()
Dim nomOnglet As String, i

nomOnglet = Sheets(Sheets.Count).Name
If IsNumeric(nomOnglet) Then
  nomOnglet = nomOnglet + 1
  Else
  For i = Len(nomOnglet) To 1 Step -1
    If Not IsNumeric(Mid(nomOnglet, i, 1)) Then Exit For
  Next
  nomOnglet = Left(nomOnglet, i) & Mid(nomOnglet, i + 1) + 1
End If
Worksheets("modele").Copy after:=Sheets(Worksheets.Count)
ActiveSheet.Name = nomOnglet
End Sub
Bonne journée.

Cordialement.

PS: as-tu remarqué, chère petite ânesse, que nous avons le même nombre de messages (4448)?

Merci Papou-Net le code marche par contre comme on peut faire la protection par mot de passe exécution de ce code ?
 

nunizgb

XLDnaute Junior
Re : Copier une feuille et la ronnmer par rapport la dernière feuille ?

Re - Bonjour Papou-Net et DoubleZero

Le code de Papou-Net marche comme il faut par contre quand je l'avait mis dans mon fichier de travail et non de test, quand le code copie la feuille model j'ai ceci comme erreur

erreur.jpg

Le Nom de la cellule existe déjà :

En fait dans ma feuille model il y a bcp de cellule qui ont un nom donc comme faire pour qu'excel ne demande pas si on veux copier les nom de cellule.

Car quand je fait manuellement la création d'une feuille puis je fait copier la feuille model et je fait un collage spécial il ne me demande pas.
 

Pièces jointes

  • erreur.jpg
    erreur.jpg
    12.3 KB · Affichages: 24

Discussions similaires

Réponses
7
Affichages
410

Statistiques des forums

Discussions
312 502
Messages
2 089 042
Membres
104 010
dernier inscrit
Freba