Utiliser une macro sur des fichiers différents
Bonjour, je découvre le potentiel des macros mais étant débutant, je me suis rapidement trouvé bloqué.
J'ai créé ma première macro personnelle sur un fichier généré par un autre logiciel en csv.
Mais lorsque j'essaye de l'appliquer sur un qui ne porte pas le même nom, cela ne marche pas.
En effet, dans la macro il y a nom du fichier d'origine!
De plus, je n'arrive pas à insérer un formule qui récupère les données du nom du fichier dans le code de la macro.
Et pour terminer, la fonction "mettre sous forme de tableau" se fait sur une plage de cellules alors que la dimension de celui ci varie en fonction de la quantité de données.
Voici le liste des instructions:
Suppression de la colonne A
Trier par localisation puis GMV
Changer l'intitulé de la colonne A en Loc.
Supprimer la colonne unité de gestion
Mettre le code GEF en seconde colonne
Largeur de colonnes : A à 7, C à 30, D à 40 et E à 7
Renvoyer à la ligne automatiquement tout le tableau
Aligner tout le tableau au centre
Mettre sous forme de tableau clair 1 avec entête
Mettre en page avec marge haut, droite et gauche: 0.5; bas 1.5 et pied de page à 0.5
Pied de page: Page 1 de ?
Insérer une ligne au dessus du tableau et fusionner les 5 premières cellules
Mettre dans cette cellule la formule suivante pour récupérer les données du nom de fichier:
="Quantitées cumulées pour le service " & DROITE(GAUCHE(CELLULE("filename");NBCAR(CELLULE("filename"))-43);NBCAR(GAUCHE(CELLULE("filename");NBCAR(CELLULE("filename"))-43)))-(TROUVE("_";GAUCHE(CELLULE("filename");NBCAR(CELLULE("filename"))-43)))-5) & " du " & TEXTE(DATE(GAUCHE(GAUCHE(DROITE(CELLULE("filename");42);8);4);STXT(GAUCHE(DROITE(CELLULE("filename");42);8);5;2);DROITE(GAUCHE(DROITE(CELLULE("filename");42);8);2));"JJ/MM/AA") & " à " & TEXTE(GAUCHE(DROITE(CELLULE("filename");34);4);"00\:00") &" au " & TEXTE(DATE(GAUCHE(GAUCHE(DROITE(CELLULE("filename");29);8);4);STXT(GAUCHE(DROITE(CELLULE("filename");29);8);5;2);DROITE(GAUCHE(DROITE(CELLULE("filename");29);8);2));"JJ/MM/AA") & " à " & TEXTE(GAUCHE(DROITE(CELLULE("filename");21);4);"00\:00") & CAR(10)&" (calculé le " & TEXTE(DATE(GAUCHE(GAUCHE(DROITE(CELLULE("filename");16);8);4);STXT(GAUCHE(DROITE(CELLULE("filename");16);8);5;2);DROITE(GAUCHE(DROITE(CELLULE("filename");16);8);2));"JJ/MM/AA") & " à " & TEXTE(GAUCHE(DROITE(CELLULE("filename");8);4);"00\:00")&")"
Mettre le texte de cette cellule en gras et taille 14
Mettre la hauteur de cette ligne à 50
Je pense que l'enregistrement automatique a toute ses limites!
Un grand merci pour votre aide
Bonjour
Avec le fichier de votre macro personnelle on y verrait un peu plus clair. Cela vous donnerait plus de chance d'avoir une réponse.
Cordialement
Oups, je n'ai pas mis la bonne formule dans mon message:
="Quantitées cumulées pour le service " & DROITE(GAUCHE(CELLULE("filename");NBCAR(CELLULE("filename"))-43);NBCAR(GAUCHE(CELLULE("filename");NBCAR(CELLULE("filename"))-43)))-(TROUVE("_";GAUCHE(CELLULE("filename");NBCAR(CELLULE("filename"))-43)))-5) & " du " & TEXTE(DATE(GAUCHE(GAUCHE(DROITE(CELLULE("filename");42);8);4);STXT(GAUCHE(DROITE(CELLULE("filename");42);8);5;2);DROITE(GAUCHE(DROITE(CELLULE("filename");42);8);2));"JJ/MM/AA") & " à " & TEXTE(GAUCHE(DROITE(CELLULE("filename");34);4);"00\:00") &" au " & TEXTE(DATE(GAUCHE(GAUCHE(DROITE(CELLULE("filename");29);8);4);STXT(GAUCHE(DROITE(CELLULE("filename");29);8);5;2);DROITE(GAUCHE(DROITE(CELLULE("filename");29);8);2));"JJ/MM/AA") & " à " & TEXTE(GAUCHE(DROITE(CELLULE("filename");21);4);"00\:00") & CAR(10)&" (calculé le " & TEXTE(DATE(GAUCHE(GAUCHE(DROITE(CELLULE("filename");16);8);4);STXT(GAUCHE(DROITE(CELLULE("filename");16);8);5;2);DROITE(GAUCHE(DROITE(CELLULE("filename");16);8);2));"JJ/MM/AA") & " à " & TEXTE(GAUCHE(DROITE(CELLULE("filename");8);4);"00\:00")&")"
Voila ce que çà me donne en enregistrement auto:
Sub Essais5()
'
' Essais5 Macro
'
'
Columns("A:A").Select
Selection.Delete Shift:=xlToLeft
ActiveWorkbook.Worksheets("CumulC_9193_C3mat_202110270000_").Sort.SortFields. _
Clear
ActiveWorkbook.Worksheets("CumulC_9193_C3mat_202110270000_").Sort.SortFields. _
Add Key:=Range("A2:A76"), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("CumulC_9193_C3mat_202110270000_").Sort.SortFields. _
Add Key:=Range("C2:C76"), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("CumulC_9193_C3mat_202110270000_").Sort
.SetRange Range("A1:F76")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("A1").Select
ActiveCell.FormulaR1C1 = "Loc."
Columns("E:E").Select
Selection.Delete Shift:=xlToLeft
Selection.Cut
Columns("B:B").Select
Selection.Insert Shift:=xlToRight
Columns("A:A").Select
Selection.ColumnWidth = 7
Columns("C:C").Select
Selection.ColumnWidth = 30
Columns("D:D").Select
Selection.ColumnWidth = 40
Columns("E:E").Select
Selection.ColumnWidth = 7
Cells.Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Application.WindowState = xlNormal
Range("A1").Select
ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$E$76"), , xlYes).Name = _
"Tableau1"
Range("Tableau1[#All]").Select
ActiveSheet.ListObjects("Tableau1").TableStyle = "TableStyleLight1"
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.PrintTitleRows = ""
.PrintTitleColumns = ""
End With
Application.PrintCommunication = True
ActiveSheet.PageSetup.PrintArea = ""
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = "Page &P de &N"
.RightFooter = ""
.LeftMargin = Application.InchesToPoints(0.196850393700787)
.RightMargin = Application.InchesToPoints(0.196850393700787)
.TopMargin = Application.InchesToPoints(0.196850393700787)
.BottomMargin = Application.InchesToPoints(0.590551181102362)
.HeaderMargin = Application.InchesToPoints(0.31496062992126)
.FooterMargin = Application.InchesToPoints(0.196850393700787)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.PrintQuality = -3
.CenterHorizontally = False
.CenterVertically = False
.Orientation = xlPortrait
.Draft = False
.PaperSize = xlPaperA4
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = 100
.PrintErrors = xlPrintErrorsDisplayed
.OddAndEvenPagesHeaderFooter = False
.DifferentFirstPageHeaderFooter = False
.ScaleWithDocHeaderFooter = True
.AlignMarginsHeaderFooter = True
.EvenPage.LeftHeader.Text = ""
.EvenPage.CenterHeader.Text = ""
.EvenPage.RightHeader.Text = ""
.EvenPage.LeftFooter.Text = ""
.EvenPage.CenterFooter.Text = ""
.EvenPage.RightFooter.Text = ""
.FirstPage.LeftHeader.Text = ""
.FirstPage.CenterHeader.Text = ""
.FirstPage.RightHeader.Text = ""
.FirstPage.LeftFooter.Text = ""
.FirstPage.CenterFooter.Text = ""
.FirstPage.RightFooter.Text = ""
End With
Application.PrintCommunication = True
Rows("1:1").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range("A1:E1").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Merge
With Selection.Font
.Name = "Calibri"
.Size = 14
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ThemeColor = xlThemeColorLight1
.TintAndShade = 0
.ThemeFont = xlThemeFontMinor
End With
Selection.Font.Bold = True
Application.WindowState = xlNormal
Rows("1:1").Select
Selection.RowHeight = 50
Range("A1:E1").Select
ActiveCell.FormulaR1C1 = _
"=""Quantitées cumulées pour le service "" & RIGHT(LEFT(CELL(""filename""),LEN(CELL(""filename""))-43),(LEN(LEFT(CELL(""filename""),LEN(CELL(""filename""))-43)))-(FIND(""_"",LEFT(CELL(""filename""),LEN(CELL(""filename""))-43)))-5) & "" du "" & TEXT(DATE(LEFT(LEFT(RIGHT(CELL(""filename""),42),8),4),MID(LEFT(RIGHT(CELL(""filename""),42),8),5,2),RIGHT(LEFT(RIGHT(CELL(""" & _
"""),42),8),2)),""JJ/MM/AA"") & "" à "" & TEXT(LEFT(RIGHT(CELL(""filename""),34),4),""00\:00"") &"" au "" & TEXT(DATE(LEFT(LEFT(RIGHT(CELL(""filename""),29),8),4),MID(LEFT(RIGHT(CELL(""filename""),29),8),5,2),RIGHT(LEFT(RIGHT(CELL(""filename""),29),8),2)),""JJ/MM/AA"") & "" à "" & TEXT(LEFT(RIGHT(CELL(""filename""),21),4),""00\:00"") & CHAR(10)&"" (calculé le "" & T" & _
"LEFT(LEFT(RIGHT(CELL(""filename""),16),8),4),MID(LEFT(RIGHT(CELL(""filename""),16),8),5,2),RIGHT(LEFT(RIGHT(CELL(""filename""),16),8),2)),""JJ/MM/AA"") & "" à "" & TEXT(LEFT(RIGHT(CELL(""filename""),8),4),""00\:00"")&"")"""
Range("Tableau1[[#Headers],[Loc.]]").Select
End SubMais cela ne fonctionne pas sur la ligne 1
Votre fichier .xlsm serait plus utile
Ma macro a pour but de mettre en page automatiquement un fichier csv généré par une autre logiciel qu'excel pour l'imprimer.
Il n'y a donc pas de xlsm
j'ai trouvé une première réponse à mes problèmes.
En fait, la macro fait référence au nom de la feuille: CumulC_9193_C3mat_202110270000_
J'ai modifié partout en laissant que CumulC et j'ai ajouté ActiveSheet.Name = "CumulC" au début de ma macro
Et en effet, j'arrive à la faire tourner sur des fichier de noms diférents.
reste à régler le problème de la formule et la fonction "mettre en forme de tableau".