Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
Re

NB: Il ne peut y avoir deux macros avec le même nom

Il faut donc juste supprimer les lignes entre Sub Bouton1_Cliquer() et End Sub
pour les remplacer par les lignes de ma dernière macro.

Nulle part, j'ai écris qu'il fallait renommer la macro affectée au Buoton...

Je te laisse continuer tes investigations et essais
(avec ma copie d'écran et mes commentaires tu as désormais la preuve que ma macro fonctionne)

Donc yapluka

PS: Ta copie d'écran du message monte au contraire que tu n'utilisais pas la dernière macro!
(en tout cas, quand tu as fait ta copie d'écran)
Va falloir se concentrer un chouia, camarade
 

Staple1600

XLDnaute Barbatruc
Re

On ne le clôture pas
(C'est mon autre philosophie, pour moi un sujet n'est jamais clos, car d'autres membres peuvent proposer d'autres voies, d'autres code pour résoudre une question)

J'en déduis que désormais cela fonctionne chez toi aussi, alors?

Pour ma gouverne, quelle était l'erreur que tu faisais?

PS: Relire le PS de mon précédent message.
 

obelix77

XLDnaute Junior
Désolé de ne pas avoir répondu plus vite mais je me suis absenté.

J'ai donc tout repris, tout relu et en me concentrant au max de mes possibilités
Et j'arrive à faire fonctionner la macro mais le nom du nouvel onglet reste toujours "Button 1", quel que soit le nom que je donne au bouton.
Je te joins le fichier; si tu veux voir

J'ai vu un autre problème que je n'avais pas vu précédemment : les contenus complets des colonnes B, E, F, G, H et K sont effacés, dont les têtes de colonnes; donc ça ne colle donc pas. Il faudrait que l'effacement commence à la ligne 5.
De plus et sauf erreur, la macro va checker la totalité des colonnes B, E, F, G, H et K alors qu'il aurait fallu que l'effacement s’arrête à la dernière cellule rempli d'une des colonnes.

Mais je ne voudrais pas être lourd non plus
 

Pièces jointes

  • essai_dupliquer_onglet.xlsm
    30.4 KB · Affichages: 53

obelix77

XLDnaute Junior
Bon bin je viens d'apprendre qu'un bouton devait être renommé dans la "zone nom"; un peu comme une plage. Un grand merci à toi
Mais, à part dans la "zone nom", tu sais où on peut gérer ces noms?

Pour mon problème d'effacement des données qui doit commencer à la ligne 5 et qui doit s’arrêter à la dernière cellule remplie d'une des colonnes, tu peux faire quelque chose?

Penses tu que la reprise du bouton, et d'autres boutons (dont contrôle ActivX) qui sont déjà sur la feuille d'origine soit possible?
 

Staple1600

XLDnaute Barbatruc
Re

Code corrigé pour le "vidage des colonnes"
VB:
Sub Bouton1_Cliquer()
Dim Nom$, L&
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
        L = .Cells(Rows.Count, "B").End(3).Row
        Union(.Range("B5:B" & L), .Range("E5:H" & L)).ClearContents
    End With
End Sub

NB: Pour info, tu n'as pas renommé le bouton, mais la caption du bouton, ce qui n'est pas la même chose.
Pour renommer un bouton (ou une shape), voir les nombreux tutos sur le net, accessibles avec le premier de moteur de recherche venu
 

Staple1600

XLDnaute Barbatruc
Re

Tout est possible en VBA*

(*sauf mon entière et totale adhésion à la mise en branle de mon pouce gauche pour la rédaction d'un code VBA qui ira s'immiscer dans un classeur tendance "usine à gaz" )

PS: Tu as tester mon dernier code VBA?
 

obelix77

XLDnaute Junior
Oui j'ai testé ton dernier code et ça marche nickel. Un énorme merci

C'est donc compliqué la reprise de ce bouton et d'un ActivX déjà présent, à ce que je comprends
Je laisse tombé définitivement à ton avis?
C'est pourtant un réel besoin
 

Staple1600

XLDnaute Barbatruc
Re

Allongez-vous et détaillez précisément votre besoin réel, svp !

Qui dit duplication de feuille avec Shapes auxquelles sont affectées des macros, dit:
Doit-on aussi dupliquer ces macros?
Or ces macros sont liées à la feuille source au départ...
 

obelix77

XLDnaute Junior
Je vais tenter d'être clair et synthétique :
Je souhaite générer par des macros des nouveaux onglets.
Je souhaite avoir, dans ces nouveaux onglets, des macros qui se lancent par bouton
Il est clair que les macros du 1er onglet seront différentes des macros du 2ème onglet qui seront encore différentes des macros du 3ème onglet.
Ne maîtrisant pas ce qui est possible, j'imaginais mettre tous mes boutons dans le 1er onglet.
J'ai été clair? (bien que pas allongé )
 

Staple1600

XLDnaute Barbatruc
Re

Fais ce simple test (en modifiant la macro du bouton de la première feuille, comme ci-dessous)
VB:
Sub Bouton1_Cliquer()
Dim Nom$, L&
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
        L = .Cells(Rows.Count, "B").End(3).Row
        Union(.Range("B5:B" & L), .Range("E5:H" & L)).ClearContents
    End With
End Sub
Tu cliques sur le bouton (la feuille active est dupliquée et nommé TOTO)
Sur la feuille TOTO, fais des modifs (par exemple mets des couleurs dans des cellules)
puis clique sur le bouton qu'il y a sur la feuille TOTO

Que constates-tu?
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…