Création d'un new workbook à partir de sheets dans un ancien + pdf
Bien le bonjour à tous,
Etant début dans la programmation j'aurai besoin de votre aide pour développer cette macro qui a pour objectif de créer d'une part un nouveau classeur excel sous format basic "xlsx" et du même nouveau fichier xlsx que je nommerai il créera un document pdf.
Ainsi mon classeur source dispose d'un certain nombre de feuilles parmi lesquelles je souhaite faire mon extraction en pdf et la création de ce nouveau classeur xlsx. cette extraction se fait à partir d'une condition à vérifier d'après la valeur d'une variable à laquelle nous avons attribué la valeur d'une cellule
ci-bas mon code :
Application.DisplayAlerts = False
'Déclaration des variables utilisés & affectations des valeurs
Dim equipe As String
Dim pieds as string
Dim men As String
Dim Pieds as String
Pieds = Sheets("PARAMETRES").Range("D1").Value
equipe = Worksheets("PARAMETRES").Range("B1").Value
men = Year(Worksheets("PARAMETRES").Range("C4").Value)
Name = "nom" & men & " " & equipe
'Enregistrement du nouveau xlsx
If Pieds = "S" Then
ThisWorkbook.Sheets(Array("PAGE DE GARDE", "CFSS", "RESULTAT", "CONCLUSION").Copy
ActiveWorkbook.SaveAs Filename:="C:\" & "Communication " & Name, FileFormat:=xlWorkbookDefault, CreateBackup:=False
ActiveWorkbook.Close
ElseIf Pieds = "P" Then
ThisWorkbook.Sheets(Array("PAGE DE GARDE", "CDC", "CART", "RESULTAT", "CONCLUSION")).copy
ActiveWorkbook.SaveAs Filename:="C:\" & "Communication " & Name, FileFormat:=xlWorkbookDefault, CreateBackup:=False
'ActiveWorkbook.Close
ElseIf Risque = "PS" Then
ThisWorkbook.Sheets(Array("PAGE DE GARDE", "CDC", "CART", "CFSS","RESULTAT", "CONCLUSION")).Copy
ActiveWorkbook.SaveAs Filename:="C:\" & "Communication " & Name , FileFormat:=xlWorkbookDefault, CreateBackup:=False
' ActiveWorkbook.Close
ElseIf Pieds <> "PS" Or Pieds <> "S" Or Pieds <> "P" Then
MsgBox("Aucun résultat à afficher")
End If
'Réinitialisation des paramètres VBA par défaut
Application.DisplayAlerts = True
'Enregistrer en PDF
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Fname & "pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
From:=1, To:=Sheets.Count, OpenAfterPublish:=TrueQuand j'utilise active sheet je fais référence au nouveau xlsx que j'ai crée et que je veux mettre en pdf.
De plus quand je fais du pas à pas une fois que je rentre dans la boucle après .copy j'ai un message d'erreur 1004 plusieurs raisons Nom fichier ou chemin n'existe pas, Fichier utilisé par un autre programme, classeur porteur du même nom.... (cela a été vérifié et il me semble qu'aucune des trois ne soit la cause)
Je vous remercie par avance pour nos futurs échanges à ce sujet !
Bonne journée
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonsoir,
De plus quand je fais du pas à pas une fois que je rentre dans la boucle
De quelle boucle, s'agit-il ?
Quand j'utilise active sheet je fais référence au nouveau xlsx
ActiveSheet représente une feuille et non un classeur ???
Vous feriez mieux de communiquer la procédure complète ou un fichier exemple car on ne voit pas où est créé le nouveau classeur "xlsx".
Bonjour Thev merci pour ton retour,
Petites corrections * :
1. BOUCLE (erreur) : Quand je rentre dans la condition If Pieds = .... => c'est là que j'utilise thisworkbook.sheets(array.....)).copy : C'est ainsi que je crée un nouveau classeur des feuilles que j'extrait à chaque fois.
2. ACTIVESHEET (erreur) : Quand j'utilise activeworkbook.Save AS ... FileFormat := XlworkbookDefaut : c'est ainsi que mon " Activeworkbook" créé à partir de ma sélection précédante dans la condition s'enregistre sous XLSX avec un nom de fichier.
C'est le moyen que j'ai trouver pour créer une copie selon certaines conditions d'un nouveau classeur sous format XLSX à partir des feuilles d'un ancien classeur xlsm.
Maintenant le soucis que je rencontre une fois que je crée mon xslx c'est le création du pdf : je peux créer un pdf à partir de :
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\....... .pdf" , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=TrueMais parfois j'ai des pages vides qui s'affichent au milieu du pdf.
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
BOUCLE (erreur)
Il ne s'agit pas d'une boucle, mais d'une condition d'exécution. D'ailleurs une instruction "Select Case" serait plus appropriée.
ACTIVESHEET (erreur)
Ce n'est pas "ActiveSheet" qu'il faut employer, mais "ActiveWorkBook"
De plus quand je fais du pas à pas une fois que je rentre dans la boucle après .copy j'ai un message d'erreur 1004 plusieurs raisons Nom fichier ou chemin n'existe pas,
Ce n'est pas la raison, mais un problème de droit. Vous ne pouvez pas utiliser un emplacement sur le lecteur C si vous n'êtes pas en exécution Administrateur. La bonne solution est d'utiliser l'emplacement "Mes Documents".
ci-dessous votre code corrigé :
Application.DisplayAlerts = False
'Déclaration des variables utilisés & affectations des valeurs
Dim equipe As String
Dim Pieds As String
Dim men As String
Pieds = Sheets("PARAMETRES").Range("D1").Value
equipe = Worksheets("PARAMETRES").Range("B1").Value
men = Year(Worksheets("PARAMETRES").Range("C4").Value)
Name = "nom" & men & " " & equipe
'Enregistrement du nouveau xlsx
Select Case Pieds
Case "S"
ThisWorkbook.Sheets(Array("PAGE DE GARDE", "CFSS", "RESULTAT", "CONCLUSION")).Copy
ActiveWorkbook.SaveAs Filename:=CreateObject("WScript.Shell").SpecialFolders("MyDocuments") & "\" & Name, FileFormat:=xlWorkbookDefault, CreateBackup:=False
Case "P"
ThisWorkbook.Sheets(Array("PAGE DE GARDE", "CDC", "CART", "RESULTAT", "CONCLUSION")).Copy
ActiveWorkbook.SaveAs Filename:=CreateObject("WScript.Shell").SpecialFolders("MyDocuments") & "\" & Name, FileFormat:=xlWorkbookDefault, CreateBackup:=False
Case "PS"
ThisWorkbook.Sheets(Array("PAGE DE GARDE", "CDC", "CART", "CFSS", "RESULTAT", "CONCLUSION")).Copy
ActiveWorkbook.SaveAs Filename:=CreateObject("WScript.Shell").SpecialFolders("MyDocuments") & "\" & Name, FileFormat:=xlWorkbookDefault, CreateBackup:=False
Case Else
MsgBox ("Aucun résultat à afficher")
End Select
'Réinitialisation des paramètres VBA par défaut
Application.DisplayAlerts = True
'Enregistrer en PDF
ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Fname & "pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
From:=1, To:=Sheets.Count, OpenAfterPublish:=True
ActiveWorkbook.Close