Comment modifier la destination d'un classeur créé par macro
Bonjour,
J'ai besoin d'aide car j'ai une macro qui me génère un classeur et l'enregistre automatiquement.
J'aimerais en fait que le dossier soit enregistré dans mon répertoire C:/documents/"cellule B1 de la feuille Prestation"/
Et petite difficulté si le dossier "cellule B1 de la feuille Prestation" n'existe pas, le créer automatiquement mais je ne sais pas si c'est faisable.
Pour info, je ne suis pas le créateur de la macro alors difficile pour moi de le faire moi même.
Voici la macro:
Sub Enreg_classeur()
On Error GoTo ErrSelect
Dim Fichier As String, Feuille As String, dlig As Long
Fichier = [B5] & ".xlsx": Feuille = [B6]
If Dir(Fichier) = "" Then
Workbooks.Add -4167: ActiveWorkbook.Author = ""
Else
Workbooks.Open Fichier: Worksheets(Feuille).Select
End If
dlig = [A1].CurrentRegion.Rows.Count
If dlig > 1 Then Range("A1:F" & dlig).ClearContents
With Workbooks("Données")
With .Worksheets("Liste")
.[A1].CurrentRegion.SpecialCells(xlCellTypeVisible).Copy [A1]
Columns("A:F").AutoFit
End With
With .Worksheets("Prestation")
ActiveSheet.Name = .[B6]
End With
End With
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Fichier
Application.DisplayAlerts = True
Exit Sub
ErrSelect:
Worksheets.Add , Worksheets(Worksheets.Count)
Resume Next
End Sub
Merci pour votre aide.
Bonjour,
Une piste probablement à adapter. Quand on crée un code il est bon de ne pas mettre en place un gestionnaire d'erreur dès le début afin de voir où elles peuvent se produire et c'est seulement après avoir apporté les modifications pour qu'elles ne se produisent plus qu'on peut mettre en place ce gestionnaire pour gérer les erreurs inattendues qui peuvent survenir dans des cas qu'il est difficile de prévoir. Autre chose, quand on crée un classeur, il est fortement recommandé d'utiliser une variable (initialisée avec Set) afin de savoir à quel objet on fait référence, surtout quand on manipule plusieurs classeurs, dans ton cas, 3. Le classeur où se trouve la procédure et où celle-ci récupère les valeurs telles que le nom du fichier à ouvrir et le nom de la feuille, le classeur (Données) où sont récupéré les valeurs et le classeur qui est créé :
Sub Enreg_classeur()
Dim Cls As Workbook
Dim Fichier As String
'Dim Feuille As String <-- pas utilisée car on n'est pas sûr du nom de la feuille !
Dim dlig As Long
'classeur où se trouve cette procédure ! A adpater...
With ThisWorkbook.Worksheets("Prestation")
Fichier = "C:/documents/" & .Range(B1).Value & ".xlsx"
dlig = .Range("A1").CurrentRegion.Rows.Count
If dlig > 1 Then Range("A1:F" & dlig).ClearContents
End With
If Dir(Fichier) = "" Then
'création d'un classeur avec une seule feuille
Set Cls = Workbooks.Add - 4167: ActiveWorkbook.Author = ""
Else
Set Cls = Workbooks.Open(Fichier)
End If
'classeur ("Données") et feuille ("Liste") où sont récupérées les valeurs
With Workbooks("Données")
With .Worksheets("Liste")
'copiées dans le nouveau classeur à partir de A1
.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy Cls.Worksheets(1).Range("A1")
Cls.Worksheets(1).Columns("A:F").AutoFit
End With
'renomme la feuille
Cls.Worksheets(1).Name = ThisWorkbook.Worksheets("Prestation").Range("B6").Value
End With
'enregistre
Application.DisplayAlerts = False
Cls.SaveAs Fichier
Application.DisplayAlerts = True
End Sub
Bonsoir,
Merci pour la réponse j'essaie de suite.
Cdt.