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.CopyOr 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:=FalseEt 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 Subnavré de ne pouvoir joindre le classeur en question, en espérant que la procédure complète suffise ...
cordialemejnt,
Rakean
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
lEn vous remerciant !
La ligne qui bug Windows(Nom_FicheRH).Activate
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 SubOn 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.
