Fermer un fichier dont le nom varie
Bonjour à tous,
Je construis une macro qui ouvre un classeur avec un nom qui varie en fonction des données d'une cellule, copie/colle des infos dans le classeur de la macro, un peu de mise en page et qui doit fermer le fichier.
Avec l'aide de l'enregistreur, voici mon code :
Sub automatisationMAJ()
' SA38
' Ouverture de l'extract SA38 du jour
Dim MonApplication As Object
Dim MonFichier As String
Set MonApplication = CreateObject("Shell.Application")
MonFichier = range("D1") & ".xlsx"
Workbooks.Open Filename:="\\chemin\chemin\" & MonFichier
Set MonApplication = Nothing
' Copier/coller les donner de l'extraction SA38 du jour
' Selectionner les colonnes A à AH de l'onglet SA38 et les supprimer
Windows("Dashboard_V2.xlsm").Activate
Sheets("SA38").Select
range("A:AH").Select
range("A:AH").Delete
' Aller copier/coller les valeurs de l'extract sur l'onglet SA38 du DB
[Surligner]'Windows("SA38_1311.xlsx").Activate
[/Surligner]
Windows(MonFichier & ".xlsx").Activate
Sheets("Feuil1").Select
range("A2").Select
Selection.CurrentRegion.Select
Selection.Copy
Windows("Dashboard_V2.xlsm").Activate
Sheets("SA38").Select
range("Tableau4[[#Headers],[Selection.CurrentRegion.Select]]").Select
ActiveSheet.Paste
range("B:B,H:H").Select
range("Tableau4[[#Headers],[Dél Exp]]").Activate
Selection.NumberFormat = "m/d/yyyy"
' Tri par ref du plus gd au plus petit et par Del exp du plus ancien au plus récent
ActiveWorkbook.Worksheets("SA38").ListObjects("Tableau4").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("SA38").ListObjects("Tableau4").Sort.SortFields.Add _
Key:=range("Tableau4[Ref SAP]"), SortOn:=xlSortOnValues, Order:= _
xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("SA38").ListObjects("Tableau4").Sort.SortFields.Add _
Key:=range("Tableau4[Dél Exp]"), SortOn:=xlSortOnValues, Order:= _
xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("SA38").ListObjects("Tableau4").Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
' Copier/coller les formules en orange + étendre la sélection jusqu'en bas
Sheets("Procédure").Select
range("O2:U2").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("SA38").Select
range("AI2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.AutoFill Destination:=range( _
"Tableau4[[Stock + WIP - Expé]:[En stock]]")
range("Tableau4[[Stock + WIP - Expé]:[En stock]]").Select
'Copier/coller ses cellules pour ne garder que les valeurs et non les formules
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
' MAJ des formules de AP à AV
range("AP2:AV2").Select
Selection.AutoFill Destination:=range( _
"Tableau4[[Commande&poste&éché]:[Color]]")
range("Tableau4[[Commande&poste&éché]:[Color]]").Select
' Fermer le fichier de l'extraction SA38
[Surligner]Windows("SA38_1311.xlsx").Activate
Windows("SA38_1311.xlsx").Close[/Surligner]
End Sub
Initialement ça a fonctionné (code en commentaire, gras, italique, souligné) mais je me suis rendu compte que la macro n'utilisait plus la variable "MonFichier" pour l'activer puis pour le fermer ensuite. donc logiquement quand les jours vont passé et que mon fichier d'extraction deviendra par exemple SA38_2212, la macro ouvrira le fichier mais ne pourra par effectuer le reste des actions.
Ma question :
Comment faire pour que le nom du fichier reste variable et que la macro puisse éxecuter les différentes actions ?
Merci,
PS : comme vous le verrez dans la macro j'ai testé
Windows(MonFichier & ".xlsx").Activate
à la place de
Windows("SA38_1311.xlsx").Activate
Mais ça n'a pas marché.
Bonjour,
essai avec,
WorkBooks(MonFichier & ".xlsx").Activate
Hello !
Bien vu ça fonctionne !
Merci