Renommer feuilles export
Bonjour,
Depuis un logiciel comptable, j'exporte un classeur avec environ 25 onglets.
Chaque onglet a un nom, celui du médecin. Je dois enregistrer chaque onglet à part, dans un nouveau classeur.
Pour l'instant, je ne connais rien en VBA mais j'ai trouvé un bout de code qui permet de faire ça :
Sub SplitWorkbook()
'Updateby20140612
Dim FileExtStr As String
Dim FileFormatNum As Long
Dim xWs As Worksheet
Dim xWb As Workbook
Dim FolderName As String
Application.ScreenUpdating = False
Set xWb = Application.ThisWorkbook
DateString = Format(Now, "yyyy-mm-dd hh-mm-ss")
FolderName = xWb.Path & "\" & xWb.Name & " " & DateString
MkDir FolderName
For Each xWs In xWb.Worksheets
xWs.Copy
If Val(Application.Version) < 12 Then
FileExtStr = ".xls": FileFormatNum = -4143
Else
Select Case xWb.FileFormat
Case 51:
FileExtStr = ".xlsx": FileFormatNum = 51
Case 52:
If Application.ActiveWorkbook.HasVBProject Then
FileExtStr = ".xlsm": FileFormatNum = 52
Else
FileExtStr = ".xlsx": FileFormatNum = 51
End If
Case 56:
FileExtStr = ".xls": FileFormatNum = 56
Case Else:
FileExtStr = ".xlsb": FileFormatNum = 50
End Select
End If
xFile = FolderName & "\" & Application.ActiveWorkbook.Sheets(1).Name & FileExtStr
Application.ActiveWorkbook.SaveAs xFile, FileFormat:=FileFormatNum
Application.ActiveWorkbook.Close False
Next
MsgBox "You can find the files in " & FolderName
Application.ScreenUpdating = True
End Sub
Si le nom du médecin (et de l'onglet du coup) est "Dupont Jean", je souhaite qu'il me l'enregistre en tant que "dupont gardes09.2019", en sachant que chaque mois, le "09.2019" change. Il s'agit toujours du moins N-1. Il faudrait que cela soit une variable aussi je pense, qu'excel me demande d'entre la valeur à l'exécution du code.
Pouvez-vous me dire où je dois ajouter cette condition s'il vous plait ?
Merci d'avance pour votre aide.
Bonjour,
un essai :
tab_nom = Split(Application.ActiveWorkbook.Sheets(1).Name, " ")
xFile = FolderName & "\" & tab_nom(0) & " gardes " & Format(Month(Now) - 1, "00") & "." & Format(Year(Now),"YYYY") & FileExtStr
On "split" le nom de l'onglet grâce au caractère "espace", du coup dans le tableau de résultat de découpage, l'index 0 correspond au nom de la personne, si ce nom n'est pas composé, dans ce cas il faudrait mettre en place une structure de type "-" afin de lier les noms composés.
Ensuite on fait plusieurs "concatener" afin de coller les morceaux ensembles.
Format(Month(Now) - 1, "00") : permet de sortir sur 2 digits le numéro du mois qui précède celui en cours, mais il doit y avoir une erreur car si l'on est sur janvier, cela va créer 0 donc il faut certainement modifier ceci, mais l'idée est là...
Format(Year(Now),"YYYY") : permet de coder l'année en cours sur 4 digits, pareille ici si on est en janvier alors il y aura une erreur d'année pour la sauvegarde de décembre...
Voilà pour ma réponse qui je m'en rend compte n'est pas "optimum" !
@ bientôt
LouReeD