Comment copier un onglet dans un autre classeur et le renommer en VBA

Bonjour

Nouveau sur le forum , donc j'ai besoin d aide pour trouver une solution a mon problème

Voila j'ai un fichier avec un onglet cumul et j'aimerais faire une copie de cet onglet , le renommer et ensuite l'enregistrer dans un autre classeur

A ce jour , je fais clic droit sur l'onglet , je fais création d une copie dans un autre classeur , ensuite je renomme l’onglet copie avec le numéro de dossier qui ce trouve en A2 je rajoute ensuite la date qui ce trouve en A3 et le nom qui ce trouve en A4 , ensuite j enregistre dans un autre fichier

Je pense qu'il existe plus simple et plus rapide a faire , mais moi je ne sais pas comment

Donc merci d avance a toutes et tous si quelqu'un peut m'aider sur ma demande ou me dire comment faire

Bonne journée

En attente de vous lire

JL

Bonjour,

Un exemple suivant votre demande. Il est également d'aller plus loin en enregistrant le classeur ci-besoin. Quand vous dites un autre classeur il s'agit d'un classeur existant ou un nouveau classeur ? Ici tout est copié, formules comprises.

Sub COPIE()
Worksheets("cumul").Copy
ActiveWorkbook.ActiveSheet.Name = [A2] & "_" & Replace([A3], "/", "_") & "_" & [A4]
End Sub

Si cela ne correspond pas merci de préciser avec le maximum de détail votre demande.

Cdlt,

49classeur1.xlsm (15.92 Ko)

Bonjour

Merci pour l aide

C'est presque cela , mais la macro fait bien un copie , et prend bien en compte cellules concernées , mais le résultat renomme bien la copie de l onglet créer mais ce que j'aimerais si cela est possible c'est que la copie soit aussi renommer comme l'onglet créer , comme cela je n'ai plus qu'a faire enregistrer dans un autre fichier pour garder historique

J’espère que t va pouvoir m'aider et que ma demande est assez explicite

Merci a toi

Bonne journée

jl

Bonjour,

Dans ce cas, comme expliqué, il faut pouvoir l'enregistrer avant de le renommer, le nom d'enregistrement peut être automatiquement proposé par VBA, tout comme le fichier d'enregistrement :

Sub COPIE()
Dim NOM As FileDialog
Worksheets("cumul").Copy
ActiveWorkbook.ActiveSheet.Name = [A2] & "_" & Replace([A3], "/", "_") & "_" & [A4]
With Application.FileDialog(msoFileDialogSaveAs)
    .InitialFileName = ActiveSheet.Name
    .Show
End With
End Sub

Cdlt,

29classeur1.xlsm (16.64 Ko)

Merci , quand je teste , cela crée bien une copie avec nom de l'onglet qui apparaît dans nouveau classeur ( voir print ecran dans fichier joint ) et quand j enregistre ce fichier dans dossier recap , je ne trouve rien

Tu sais pourquoi , ou je fais pas la bonne manip

19classeur1-2.xlsm (25.53 Ko)

En attente de tes commentaires

JL

Bonjour, le plus simple serait d'indiquer ou se trouve votre dossier Recap ? Un sous-dossier de l'endroit ou se trouve votre fichier contenant la macro ?

L'enregistrement de la copie serait alors automatisé dans la macro.

Bonjour

L'emplacement de mon dossier recap pour récupération est :

C:\Users\jl\Desktop\Recap

Je dois rajouter ou ce chemin dans la macro

Merci pour votre aide

JL

Bonjour,

Oups j'ai oublié une ligne pour récupérer le chemin d'enregistrement désolé :

Sub COPIE()
Dim NOM As FileDialog
Worksheets("cumul").Copy
ActiveWorkbook.ActiveSheet.Name = [A2] & "_" & Replace([A3], "/", "_") & "_" & [A4]
With Application.FileDialog(msoFileDialogSaveAs)
    .InitialFileName = ActiveSheet.Name
    If .Show = -1 Then ActiveWorkbook.SaveAs Filename:=.InitialFileName
End With
End Sub

Cdlt,

Bonjour, Ergotamine si le chemin d'enregistrement est connu ... du coup plus besoin de la boite de dialogue pour l'enregistrement ?

On enregistre et on ferme la copie.

Sub COPIE()
Dim NOM As FileDialog
Dim CHEMIN as string
CHEMIN="C:\Users\jl\Desktop\Recap\"
Worksheets("cumul").Copy
ActiveWorkbook.ActiveSheet.Name = [A2] & "_" & Replace([A3], "/", "_") & "_" & [A4]

ActiveWorkbook.SaveAs Filename:=CHEMIN & ActiveSheet.Name &".xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
ActiveWorkbook.Close

End Sub

Bonjour Xmenpl,

Oui si le chemin est figé tel quel ton code est bien plus adapté. Mais je me dis que si on créé des sous dossiers avec une logique particulière (numéro de dossier, mois, etc ...) il faudra re modifier le code.

Je sais pas pourquoi mais je suis fans des FileDialog car je trouve que cela apporte plus de flexibilité.

Mais c'est sûr que c'est beaucoup plus simple avec ton code merci pour l'alternative !

Cdlt,

SUPER, cela fonctionne

Le résultat du nom est le suivant : 5_21_04_2021_TEST

Je ne veux pas abuser , mais comment je peux rajouter dans la macro :

Rajout :

Dossier N° devant 5

Du devant la date 21_04-2021

ce qui donnerais comme résultat du nom

Dossier N° 5_du_21_04_2021_TEST

Merci encore de tous tes efforts

JL

Dans ce cas on ajoute la Variable NOMFICHIER pour personnaliser.

Sub COPIE()
Dim NOM As FileDialog
Dim CHEMIN as string
DIM NOMFICHIER as string
CHEMIN="C:\Users\jl\Desktop\Recap\"
Worksheets("cumul").Copy
ActiveWorkbook.ActiveSheet.Name = [A2] & "_" & Replace([A3], "/", "_") & "_" & [A4]

NOMFICHIER="N° " &[A2] & "_du_" & Replace([A3], "/", "_") & "_" & [A4]
ActiveWorkbook.SaveAs Filename:=CHEMIN & NOMFICHIER &".xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
ActiveWorkbook.Close

End Sub
Rechercher des sujets similaires à "comment copier onglet classeur renommer vba"