Microsoft 365 Comment enregistrer chaque onglet d'un fichier xls en pdf au nom de chaque onglet ?

Tchett

XLDnaute Nouveau
Bonjour à Tous,

Merci d'avance pour l'aide que vous pourrez m'apporter

J’ai un fichier XLS qui peux comporter un nombre d’onglets différents suivant les cas.
Le nom de chaque onglet se trouve dans une cellule définie (BC24) et qui est une copie de la cellule adjacente qui résulte d’une concaténation. (=BB10&" "&BB12&" _ Num Cadastal "&BB14)

En fin d’utilisation je souhaite créer un bouton qui me permettra d’enregistrer chaque onglet en PDF dans le même dossier que celui du fichier XLS et dont le nom des PDF sera celui indiqué dans la cellule BC24.

J’ai déjà fait une macro qui me permet d’enregistrer l’onglet en pdf qui fonctionne pour un onglet et que j’ai placé dans le code VBA du bouveau bouton mais ça ne fonctionne plus …

Un fois que j’ai cliqué sur le bouton, les onglets s’ouvrent un a un dans internet explorer (a priori en format PDF) mais le nom n’est plus correct et l’enregistrement ne se fait plus

Je ne suis pas un pro du VBA, je bidouille un peu mais là je suis bloqué.

Pouvez-vous m’aider sur ce coup-là ?



Merci d’avance !

Tchett



Voici une copie de mon code :

Private Sub CommandButton1_Click()

' Bouton "Enregistrement, 1 à 1, des onglets en PDF"

' Calcul le nombre d'onglet

' se positionne sur l'onglet 1, l'imprime en PDF en reprenant le nom de l'onglet

' passe à l'onglet suivant et ce jusqu'au dernier onglet

' Calcul du nombre d'onglet => OK

Nbfeuilles = ThisWorkbook.Sheets.Count

' Indique dans la cellule BD28 (=> BD=56eme colonne) le nombre d'onglet

Cells(28, 56) = Nbfeuilles

' Création d'une boucle

For i = 1 To Nbfeuilles

' Copie de la macro qui enregistre l'onglet en PDF dans le même répertoire que le fichier XLS et qui est affectée au premier bouton d'impression

' Changement d'onglet "en boucle" => OK fonctionne

Sheets(i).Select

' Impression de l'onglet en PDF => ne fonctionne pas correctement => NO OK

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=[BC24] & ".pdf" _

, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _

:=False, OpenAfterPublish:=True

Next



End Sub
 
Solution
Merci pour vos réponses Kiki et CP.
La réponse de CP est plus "clé sur porte" si je peux dire et s'adapte mieux à mon fichier.
Je viens de l'intégrer le code dans mon fichier et j'ai travaillé cet après midi.
Mais je viens constater que le nom de l'onglet ne peux pas comporter plus de 31 caractères je m'arrange donc pour raccourcir ce nom. par contre pour le nom du fichier là j'ai besoin d'un nom plus long. qui ce trouve dans la cellule BC24 (en fait c'est un nom de rue + le N° + le num cadastral)
CP, comment puis-je modifier ton code pour y arriver ?
Merci d'avance

Tchett
Bonjour Tchett,

En effet, on ne peut pas nommer un onglet avec plus de 31 caractères.
Ta question était d'enregistrer toutes les feuilles de ton Classeur en...

kiki29

XLDnaute Barbatruc
Salut, voir ici et adapter à ton contexte.

Avec la possibilité de fusion en 1 seul pdf de l'ensemble des feuilles, ou de génération des feuilles sélectionnées de façon séparée, de gestion des doublons via un indice, le tout dans un dossier créé automatiquement et nommé par défaut Dossier PDFs à la racine de l'application. L'ensemble des feuilles ( visibles ou pas ) est listé via le bouton Récap
 

cp4

XLDnaute Barbatruc
Bonjour Tchett:), kiki29;),

Une proposition créant un pdf pour chaque onglet dans le même répertoire courant du classeur.
VB:
Option Explicit

Sub OngletsEnPDF()
Dim Ws As Worksheet, Fichier As String
'Boucle sur toutes les feuille de calcul du classeur.
For Each Ws In ThisWorkbook.Worksheets
Fichier = ThisWorkbook.Path & "\" & Ws.Name & ".pdf"
    'Crée un pdf de chaque feuille
   Ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Ws.Name & ".pdf", _
      Quality:=xlQualityStandard, IncludeDocProperties:=True, _
      IgnorePrintAreas:=False, OpenAfterPublish:=True
Next Ws
End Sub
A+
 

Tchett

XLDnaute Nouveau
Merci pour vos réponses Kiki et CP.
La réponse de CP est plus "clé sur porte" si je peux dire et s'adapte mieux à mon fichier.
Je viens de l'intégrer le code dans mon fichier et j'ai travaillé cet après midi.
Mais je viens constater que le nom de l'onglet ne peux pas comporter plus de 31 caractères je m'arrange donc pour raccourcir ce nom. par contre pour le nom du fichier là j'ai besoin d'un nom plus long. qui ce trouve dans la cellule BC24 (en fait c'est un nom de rue + le N° + le num cadastral)
CP, comment puis-je modifier ton code pour y arriver ?
Merci d'avance

Tchett
 

cp4

XLDnaute Barbatruc
Merci pour vos réponses Kiki et CP.
La réponse de CP est plus "clé sur porte" si je peux dire et s'adapte mieux à mon fichier.
Je viens de l'intégrer le code dans mon fichier et j'ai travaillé cet après midi.
Mais je viens constater que le nom de l'onglet ne peux pas comporter plus de 31 caractères je m'arrange donc pour raccourcir ce nom. par contre pour le nom du fichier là j'ai besoin d'un nom plus long. qui ce trouve dans la cellule BC24 (en fait c'est un nom de rue + le N° + le num cadastral)
CP, comment puis-je modifier ton code pour y arriver ?
Merci d'avance

Tchett
Bonjour Tchett,

En effet, on ne peut pas nommer un onglet avec plus de 31 caractères.
Ta question était d'enregistrer toutes les feuilles de ton Classeur en fichier PDF, avec comme nom de fichier le nom de l'onglet.
Si, j'ai bien compris, tu veux récupérer le nom du fichier de la cellule BC24.
Remplace ceci --- > Filename:=Ws.Name
Par ceci ----------->Filename:=Ws.Range("BC24")
Faire Attention aux caractères spéciaux! Ils sont pas acceptés dans les noms de fichiers.

Edit: Attention! Il faut au préalable définir les zones d'impression. Sinon tu auras toutes les feuilles même vide jusqu'à la cellule BC24.
 
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof