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
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
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
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
Merci beaucoup Staple1600
Par contre, étant vraiment nul, je n'arrive pas à l'intégrer à mon fichier.
Pourrais-tu, s'il te plaît, l'intégrer à mon fichier? Je sais, j'abuse ...
Merci beaucoup en tous les cas,
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é.
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
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
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.
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
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 :
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
Ç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
SI si j'utilise bien le dernier code
Juste je retire le u de "bouton" et j'obtiens le message suivant :
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