Copier plage de donnée sur new tableur au nom relatif

Bonjour,

Alors je reviens vers ce forum et cette fois ci avec un sujet plus sérieux qu'à mon habitude, fichier joint et tout et tout! En espérant avoir de l'aide, c'est ma dernière taches sur VBA en tant que stagiaire.

Donc dans le fichier joint qui est un exemple du fichier en question, j'aimerai créer une macro reliée à un bouton pour copier automatiquement une plage de données (Ici C1:CJ87) et la coller dans un nouveau fichier qui se créée à chaque fois pour l'occasion.

Jusque là rien de compliqué. Je me débrouille en enregistrant une macro et retouchant petit à petit.

LA difficulté : Il faut que le titre du nouveau fichier soit "Fiche_RH" &D6.

La valeur de D6 change pour chaque nom de salarié, et il faut que le nom du fichier change de corrélation avec la valeur de D6

Je me suis débrouillé avec

Nom_Sal = Range("D6").Value

Dim Nom_FicheRH

Nom_FicheRH = "c:Fiche_RH-" & Nom_Sal & ".xlsx"

    Workbooks.Add
    ActiveWorkbook.SaveAs Filename:= _
        "c:Fiche_RH-" & Nom_Sal & ".xlsx", FileFormat:= _
        xlOpenXMLWorkbook, CreateBackup:=False

    Windows("Administration du personnel Maj4macro.xlsm").Activate
    Range("C1:CJ87").Select
    Selection.Copy

Or le soucis que je n'explique pas, pour revenir sur le nouveau classeur créé au dessus et copier la selection, j'ai saisi :

Windows(Nom_FicheRH).Activate
    Range("C1").Select
    ActiveSheet.Paste

    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

Et rien ne va plus. Je ne comprends pas pourquoi?

Merci à ceux qui prendrons le temps de m'aider!

Ci joint, le tableur type avec la plage de donnée à extraire.

Bonjour,

"c:Fiche_RH-"

1) Ceci n'est pas un nom de fichier valide.

Si donc tu peux toujours créer un classeur, tu n'as pas pu l'enregistrer sous ce nom.

2) Ton code n'est pas dans ton classeur. Tu ne l'as donc pas testé !

3) Tu ne donnes que des fragments de code et non une procédure que tu pourrais exécuter...

Il convient donc de tout reprendre au départ : tu places ton code dans ton classeur, tu testes, tu constates qu'il ne fonctionne pas, tu reviens avec le classeur que tu as testé (contenant le code) en précisant ce que tu as fait, les résultats obtenus et ce que tu voulais faire.

De cette façon on pourra avancer pas à pas...

Cordialement.

bonjour,

Contrairement au 1), j'ai pu enregistrer le fichier au nom souhaité.

2) Le code est dans le classeur, mais dans le classeur professionnel que je n'ai pas le droit de joindre...

3) je joins la procédure

Sub Test1()
'
' Test1 Macro
'

'
Nom_Sal = Range("D6").Value

Dim Nom_FicheRH

Nom_FicheRH = "Fiche_RH-" & Nom_Sal

    Workbooks.Add
    ActiveWorkbook.SaveAs Filename:= _
        "c:Fiche_RH-" & Nom_Sal, FileFormat:= _
        xlOpenXMLWorkbook, CreateBackup:=False

    Windows("Administration du personnel Maj4macro.xlsm").Activate
    Range("C1:F51").Select
    Selection.Copy

    Windows(Nom_FicheRH).Activate
    Range("C1").Select
    ActiveSheet.Paste

    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    ActiveWindow.SmallScroll Down:=-18
    Range("S6").Select
    Columns("C:C").EntireColumn.AutoFit
    Columns("D:D").ColumnWidth = 18.29
    Columns("E:E").ColumnWidth = 18.71
    Columns("F:F").ColumnWidth = 23.14
    Columns("H:O").Select
    Selection.EntireColumn.Hidden = True
    Columns("D:D").ColumnWidth = 24.29
    ActiveWindow.SmallScroll Down:=12
    Columns("E:E").ColumnWidth = 27.71
    Columns("D:D").ColumnWidth = 28.14
    ActiveWindow.SmallScroll Down:=-33

    ActiveSheet.Shapes.Range(Array("Button 18")).Select
    Application.CutCopyMode = False
    Selection.Delete
    Selection.Cut
    ActiveWindow.SmallScroll Down:=9
    ActiveSheet.Shapes.Range(Array("Button 20")).Select
    Selection.Delete
    Selection.Cut
    ActiveWindow.SmallScroll Down:=0
    ActiveSheet.Shapes.Range(Array("Button 19")).Select
    Selection.Delete
    Selection.Cut
    ActiveWindow.SmallScroll Down:=-27
    Range("C4").Select
    ActiveCell.FormulaR1C1 = _
        "MERCI DE METTRE A JOUR ET DE RENVOYER PAR MAIL SUR SEBASTIEN@a.com"
    Range("C4").Select
    Selection.Font.Bold = True
    With Selection.Font
        .Color = -16776961
        .TintAndShade = 0
    End With
    Selection.Font.Size = 12
    Range("C4:F4").Select
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent4
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent4
        .TintAndShade = 0.599993896298105
        .PatternTintAndShade = 0
    End With
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent4
        .TintAndShade = 0.399975585192419
        .PatternTintAndShade = 0
    End With
    Range("B10").Select
    ActiveWorkbook.Save
    ActiveWindow.Close
    ActiveWindow.ScrollColumn = 22
    ActiveWindow.ScrollColumn = 1

    ActiveWindow.Close

End Sub

navré de ne pouvoir joindre le classeur en question, en espérant que la procédure complète suffise ...

cordialemejnt,

Rakean

t5mcmsf

Et si tu pouvais éviter de balancer du code enregistré on ne s'en porterait que mieux !

Désolé je ne peux pas joindre le document source... j'imagine que je vais me débrouiller

On peut toujours joindre un fichier, il suffit de le fabriquer...

Tant que tu continues à prétendre que ton code fonctionne pour enregistrer un fichier avec un nom comportant des caractères interdits, la discussion ne peut aller plus loin.

Pour le reste, lorsqu'on enregistre du code et qu'on le laisse en l'état, cela signifie simplement qu'on ne comprend pas ce que l'on écrit. Un minimum d'effort serait nécessaire pour réécrire en VBA (si j'ose dire, car c'est écrit en "enregistreur") et par la suite se passer définitivement de l'enregistreur, sauf comme outil de recherche ponctuel.

Bonjour,

J'ai re écrit le code avec un nouveau fichier qui contient seulement une valeur en D6, on choisit la valeur dans une liste

Ensuite, la macro que je cherche à faire consister à copier une plage de données, la coller dans un nouveau fichier qui sera enregistré au nom de "Fiche RH-"D6""

Je n'arrive toujours pas à coder par la suite, comment faire appel à ce fichier au nom variable pour coller la selection.

Sub Macro1()
'
' Macro1 Macro
'

Nom_Sal = Range("D6").Value

Dim Nom_FicheRH

Nom_FicheRH = "Fiche RH-" & Nom_Sal

    Workbooks.Add
    ActiveWorkbook.SaveAs Filename:="Fiche RH-" & Nom_Sal

    Windows("Classeur1").Activate
    Range("D4:G15").Select
    Selection.Copy

    Windows(Nom_FicheRH).Activate

    Range("D4").Select
    ActiveSheet.Paste
    Windows("Classeur1").Activate
End Sub
l

En vous remerciant !

La ligne qui bug Windows(Nom_FicheRH).Activate

12classeur1.xlsm (14.57 Ko)

Bonjour,

Ta macro réécrite en VBA normal.

Si tu n'as pas fait d'erreur dans la définition des éléments de ta procédure, elle fonctionnera.

Sub Macro1()
    Dim Nom_Sal As String, Nom_FicheRH As String
    Nom_Sal = ThisWorkbook.Worksheets(1).Range("D6").Value
    Nom_FicheRH = "Fiche RH-" & Nom_Sal & ".xlsx"
    Workbooks.Add
    ActiveWorkbook.SaveAs Nom_FicheRH
    ThisWorkbook.Worksheets(1).Range("D4:G15").Copy Workbooks(Nom_FicheRH).Worksheets(1).Range("D4")
End Sub

On peut faire mieux comme code, avec d'autres variables et en changeant de méthode. Mais pour commencer par le commencement, il est déjà utile d'apprendre à écrire les procédures manuelles en VBA en bannissant tous les tours et détours de l'enregistreur...

Je te signale toutefois que tu n'as pas indiqué de chemin pour enregistrer le classeur, il ira donc dans le dossier actif pour l'application au moment de l'enregistrement, quel que soit ce dossier.

Cordialement.

Rechercher des sujets similaires à "copier plage donnee new tableur nom relatif"