Dupliquer une feuille excel par VBA

obelix77

XLDnaute Junior
Bonjour à tous,

J'ai beau chercher dans les forums, je ne trouve pas une macro qui correspond à ce que je cherche à faire : dupliquer un onglet "à l'identique" (mise en forme, formules, tableau dynamique, ...) dans un même fichier et que le nom du nouvel onglet soit le nom inscrit sur un bouton activX ou une forme qui va lancer la macro.

Ce qui me bloque : il faut que, dans le nouvel onglet, des colonnes soient vidées de tout leur contenu, excepté la tête de colonne.
Exemple dans le fichier joint : je souhaite dupliquer l'onglet "saisie" en onglet "tata_lucette" mais avec les colonnes B, E,de F à H et K vidées de leur contenu et ce jusqu'à la dernière cellule remplie d'une de ces 5 colonnes.
Le nombre de ligne du tableau est variable.

Si quelqu'un peut de donner un coup de main, étant nul en VBA ...

Part avance un grand merci et un très bon samedi aussi
 

Pièces jointes

  • essai_dupliquer_onglet.xlsm
    36.2 KB · Affichages: 77
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum

Un contrôle Bouton issu de la barre d'outils Formulaire
auquel j'ai affecté cette macro
VB:
Sub Bouton1_Cliquer()
Dim Nom$
Nom = ActiveSheet.Shapes(Application.Caller).Name
ActiveSheet.Copy Before:=Sheets(1)
ActiveSheet.Name = Nom
Sheets(Nom).DrawingObjects.Delete ' ici pour supprimer le bouton sur la feuille dupliquée
'mais problème si d'autres formes ou objets présents sur la feuille. Ils seront effacés aussi.
End Sub
Test OK sur mon PC

NB: Dans mon exemple, la copie de feuille dupliquée s’appellera Button 1 car c'est le nom du Bouton 1
 

Staple1600

XLDnaute Barbatruc
Re


Donc c'est plus prudent, comme ceci
(voir commentaires dans message précédent)
VB:
Sub Bouton1_Cliquer()
Dim Nom$
Nom = ActiveSheet.Shapes(Application.Caller).Name
ActiveSheet.Copy Before:=Sheets(1)
ActiveSheet.Name = Nom
Sheets(Nom).Shapes(Nom).Delete
End Sub
 

obelix77

XLDnaute Junior
Bonjour le fil, le forum

Un contrôle Bouton issu de la barre d'outils Formulaire
auquel j'ai affecté cette macro
VB:
Sub Bouton1_Cliquer()
Dim Nom$
Nom = ActiveSheet.Shapes(Application.Caller).Name
ActiveSheet.Copy Before:=Sheets(1)
ActiveSheet.Name = Nom
Sheets(Nom).DrawingObjects.Delete ' ici pour supprimer le bouton sur la feuille dupliquée
'mais problème si d'autres formes ou objets présents sur la feuille. Ils seront effacés aussi.
End Sub
Test OK sur mon PC

NB: Dans mon exemple, la copie de feuille dupliquée s’appellera Button 1 car c'est le nom du Bouton 1
Super, merci beaucoup.
1 problème : il existe d'autres boutons sur la feuille qui doivent être conservées

De plus, je dois également vider des colonnes et je n'y arrive pas non plus :(

Un grand merci pour ce qui a été fait. Je teste
 

Staple1600

XLDnaute Barbatruc
Re

1 problème : il existe d'autres boutons sur la feuille qui doivent être conservées
Voir le message#3

De plus, je dois également vider des colonnes et je n'y arrive pas non plus :(
Voir le message#1
ce que je cherche à faire : dupliquer un onglet "à l'identique" (mise en forme, formules, tableau dynamique, ...)
Faudrait savoir, camarade ;)
Si c'est identique, c'est identique (donc sans vidage de colonnes) ;)
 

Staple1600

XLDnaute Barbatruc
Re

Personne n'est nul, ici. ;)
Il y ceux qui débutent et les autres ;)

Et non, je n'intégrerai rien à ton fichier ;)
(ni à aucun autre, sur aucun fil, c'est ma philosophie;)
Je suis pour l'implication du demandeur dans la résolution de sa question)

Tu vas donc mouiller la chemise, camarade ;)
(c'est un bon moyen pour apprendre, non?)

Alors, déjà tu sais comment insérer un bouton, non ?
Et puis tu sais y affecter une macro?

PS: Au fait, relire mon précédent message, j'ai ajouté des choses quand je l'ai édité.
 

Staple1600

XLDnaute Barbatruc
Re

Suite.
Pour avoir une base d'un code VBA réalisant ceci:
mais avec les colonnes B, E,de F à H et K vidées de leur contenu et ce jusqu'à la dernière cellule remplie d'une de ces 5 colonnes.
Il te suffit de le faire manuellement tout en laissant tourner l'enregistreur de macros.

EDITION: C'est ce que je viens de faire, et j'ai ajouté la ligne suivante dans la macro initiale
VB:
Sub Bouton1_Cliquer()
Dim Nom$
Nom = ActiveSheet.Shapes(Application.Caller).Name
ActiveSheet.Copy Before:=Sheets(1)
ActiveSheet.Name = Nom
Sheets(Nom).Shapes(Nom).Delete
Sheets(Nom).Range("B:B,E:H,K:K").ClearContents
End Sub
 
Dernière édition:

obelix77

XLDnaute Junior
Re

Suite.
Pour avoir une base d'un code VBA réalisant ceci:

Il te suffit de le faire manuellement tout en laissant tourner l'enregistreur de macros.

Ca, je sais le faire :). Mais la plage est fixe. Ce que je ne sais pas faire, c'est aller jusqu'à la dernière cellule remplie d'une des colonnes.

Concernant ta philosophie, elle me va bien. ;)
J'ai donc intégré le code à mon fichier sur un bouton d'action.
La duplication se fait bien mais j'ai un message que je ne comprends pas :
Sheets(Nom).Shapes(Nom).Delete
Et le nom de l'onglet est toujours "Button 2", même si je modifie le nom du bouton.

Mais on est pas loin du résultat; en tous les cas j'avance, donc c'est top. Merci
 

Staple1600

XLDnaute Barbatruc
Re

Relire le message#8

J'ai testé en renommant le bouton TOTO
(rappel: issu de la barre Formulaire et non pas un CommandButton ActiveX)
Et la feuille dupliquée prend bien le nom TOTO
Je n'ai pas de message d'erreur et les colonnes bien sont vidées de leur contenu.
 

Staple1600

XLDnaute Barbatruc
Re

Ajout qui permet un "overwrite"" de la feuille dupliquée
(sans affichage de message d'erreur)
VB:
Sub Bouton1_Cliquer()
Dim Nom$
Nom = ActiveSheet.Shapes(Application.Caller).Name
Application.DisplayAlerts = False
On Error Resume Next
Worksheets(Nom).Delete
On Error GoTo 0
ActiveSheet.Copy Before:=Sheets(1): ActiveSheet.Name = Nom
    With Sheets(Nom)
        .Shapes(Nom).Delete: .Range("B:B,E:H,K:K").ClearContents
    End With
End Sub
 

obelix77

XLDnaute Junior
Re

Relire le message#8

J'ai testé en renommant le bouton TOTO
(rappel: issu de la barre Formulaire et non pas un CommandButton ActiveX)
Et la feuille dupliquée prend bien le nom TOTO
Je n'ai pas de message d'erreur et les colonnes bien sont vidées de leur contenu.

Je viens de repartir du fichier d'origine.
J'ai intégré un bouton de contrôle formulaire
J'y est intégré le code que tu a envoyé sans aucune modif.
J'ai lancé et :
upload_2018-1-27_13-23-48.png

upload_2018-1-27_13-24-52.png

L'effacement des données se faisant après, l'onglet se duplique bien mais les colonnes ne se vident forcement pas.
Désolé mais j'avais prévenu : pas trop balaise
 

obelix77

XLDnaute Junior
Ça y est je suis au top.
Il ne me reste qu'un problème sur le nom du bouton, donc le nom de l'onglet. Je dois faire une erreur quelque part en renommant car dès que je renomme, ça plante.
Je vais chercher; je devrais finir par trouver
merci pour tout en tous les cas
 

obelix77

XLDnaute Junior
SI si j'utilise bien le dernier code
Juste je retire le u de "bouton" et j'obtiens le message suivant :
upload_2018-1-27_13-43-48.png

Je dois merder dans le renommage du bouton mais je ne vois pas où je peux merder.
Donc je teste et je re teste mais le même message revient.
Le code que j'utilise est le suivant :

Sub Boton1_Cliquer()
Dim Nom$
Nom = ActiveSheet.Shapes(Application.Caller).Name
Application.DisplayAlerts = False
On Error Resume Next
Worksheets(Nom).Delete
On Error GoTo 0
ActiveSheet.Copy Before:=Sheets(1): ActiveSheet.Name = Nom
With Sheets(Nom)
.Shapes(Nom).Delete: .Range("B:B,E:H,K:K").ClearContents
End With
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
315 094
Messages
2 116 157
Membres
112 672
dernier inscrit
djudju