Impression un pdf par onglet via macro VBA Excel

Bonjour à toutes et à tous,

Je suis nouvelle sur le forum et également dans le monde du VBA. J'ai utilisé excel pendant mon parcours en Recherche pour des analyses statistiques et publis scientifiques. Mon métier actuel m'amène à utiliser excel pour gérer mes "travailleurs" en milieu hospitalier. Le nombre est conséquent et les macros pourraient me permettre de gagner du temps.

J'ai créé un fichier excel (en PJ) avec plusieurs onglets. Le premier correspond à mes listes de choix. Mon second à mes travailleurs (que j'ai limité à 10 pour gérer plus facilement). Dans cet onglet j'y colle les infos administratives de mes travailleurs (extrait AMELI) puis je sélectionne dans les listes les infos pour chaque poste. Chaque ligne de cet onglet va compléter un onglet suivant. J'ai donc au total : 1 onglet "listes", 1 onglet "à remplir", puis un onglet par travailleur.

J'ai réussi en cherchant un peu sur le net et en essayant de comprendre la langue "vba" (pour moi c'est comme une nouvelle langue inconnue^^) à faire une macro (module 1) pour que chaque onglet se nomme avec les infos des cases Nom et Prénom de chaque fiche individuelle.

J'ai également créé une seconde macro (module 2) pour que lorsque je suis sur l'onglet correspondant à la fiche d'un travailleur, cela génère un fichier pdf dans un dossier que j'ai choisi (j'ai masqué mon nom en XXX) et que le pdf se nomme avec le nom de l'onglet. Cette macro est un dépannage en attendant de réussir à faire la 3ème qui est celle qui me bloque.

Ma 3ème macro (module 3) est celle qui me pose problème. Je voudrais cette fois-ci que chaque onglet correspondant donc à une fiche travailleur génère un fichier pdf qui se nomme avec le nom de l'onglet (et donc du travailleur). La macro que j'utilise (trouvée sur le net et un peu modifié) fonctionne mais me génère un pdf avec tous mes onglets à la suite. Pour moi le problème vient de deux points :

- je ne sais pas comment "expliquer" que les onglets à générer en pdf sont seulement les N°3 à 12. Je ne peux pas utiliser ActiveWorkbook.Sheets(array("...")).Select car je ne peux taper le nom des onglets qui vont changer à chaque fois que je vais changer les noms des travailleurs.

- je ne sais pas comment demander un onglet = 1 seul fichier pdf et non une fusion en un seul

Sub SaveAllAsPDF() 

Dim filename As String 

 filename = "C:\Users\XXX\Downloads\FICHES EXPO\" & Range("D7") & Range("D8").Value 

choix = MsgBox("Imprimer tout ?", vbQuestion + vbYesNoCancel) 

If choix = vbCancel Then Exit Sub 

If choix = vbNo Then 

' imprimer feuille 

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, filename:= _ filename, Quality:=xlQualityStandard, IncludeDocProperties _ :=True, IgnorePrintAreas:=False, openafterpublish:=False Else 

' imprimer tout ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, filename:= _ filename, Quality:=xlQualityStandard, IncludeDocProperties _ :=True, IgnorePrintAreas:=False, openafterpublish:=False 

End If ActiveSheet.PageSetup.PrintArea = "" 

End Sub

Désolée si la présentation était un peu longue, mais je préfère essayer de donner toutes les données du problème pour que la solution soit plus explicite.

Merci d'avance pour votre aide.

Bonjour Jessica et bienvenue sur ce forum

Pour commencer, pense à mettre le code que tu donnes entre balises, avec le bouton < />

Sinon voici un code qui devrait te convenir

Sub SaveAllAsPDF()
  Dim Sht As Worksheet
  Dim Chemin As String, NomFic As String
  Dim Choix As Long
  ' Initialiser les variables
  Chemin = "C:\Users\jpereira\Downloads\FICHES EXPO\"
  ' Demander ce que l'utilisateur veut imprimer
  Choix = MsgBox("Imprimer tout ?", vbQuestion + vbYesNoCancel)
  ' Erreur, l'utilisateur à annulé
  If Choix = vbCancel Then Exit Sub
  ' L'utilisateur à répondu NON, on imprime seulement la feuille actuelle, ce qui oblige à mettre un bouton dans chaque feuille !?
  If Choix = vbNo Then
    NomFic = ActiveSheet.Name & ".pdf"
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:=Chemin & NomFic, _
      Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, openafterpublish:=False
    ' Puis on sort
    Exit Sub
  End If
  ' Si on veut tout imprimer !
  ' Pour chaque feuille du classeur
  For Each Sht In ThisWorkbook.Sheets
    ' Si la feuille ne fait pas parti des 2 définies
    If InStr(1, "listes,à remplir", Sht.Name) = 0 Then
      NomFic = Sht.Name & ".pdf"
      Sht.ExportAsFixedFormat Type:=xlTypePDF, FileName:=Chemin & NomFic, _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, openafterpublish:=False
    End If
  Next Sht
End Sub

A+

Bonjour,

Merci pour le retour. J'avais bien cliqué sur l'icône </> qui a fait apparaître une case verte dans laquelle j'ai collé mon code. Je n'aurais peut-être pas dû le mettre en forme ensuite c'est pour cela qu'il apparaît bizarrement je pense.

Ton code fait exactement ce que je veut. un grand merci.

Juste pour bien comprendre (mon passé recherche en sciences ^^).

dans la partie finale du code, tu as "dit en gros à excel imprime tout sauf les deux premiers onglets" ? Je n'avais pas pensé à réfléchir dans le sens de l'exclusion. Par contre je n'arrive pas à discerner dans le code la partie qui "dit un onglet = 1 fichier unique pdf".

Tu peux m'éclairer ?

Cordialement,

Bonjour Damonaxi et le forum
Pour ma part, j'ai supprimé chaque fiche individuelle et fait une FICHE TYPE avec en cellule Q1 une liste déroulante avec les valeurs de la colonne A de la feuille "à remplir". En saisissant une des valeurs dans cette cellule, les informations relatives à ce N° s'affichent avec la formule RECHERCHEV.
On pourra facilement imprimer les fiches soit individuellement ou toutes avec la procédure que je n'ai pas encore écrite.
Comme le nombre de collaborateurs semble être conséquent, seule la feuille "à remplir" sera à initialiser, et le fichier moins lourd.
Pour l'instant voici le fichier sans la macro pour imprimer en PDF. Si cela convient, je passe à la suite.
Cdt,

Papy Henri

Bonjour Damonaxi
Voici le fichier avec la macro proposée par JExceL2fr (que je salue) adaptée à la Fiche Type. Bouton pour la macro dans la Fiche Type.
Pour des raisons pratiques de remplissage de la feuille "à remplir" je l'ai transformée en Tableau structuré. Au fur et à mesure de son remplissage, le TS s'adaptera.
Cdt,
Papy Henri

Bonjour AFEH,

Merci beaucoup pour ta solution qui correspond à mon idée de départ mais que je pensais impossible.

Mon travail m'amène à collaborer avec des sociétés externes qui réalisent des mesures de contrôles. J'ai vu sur leur PC des tableaux excel avec des cases à remplir et qui généraient de supers rapports pdf. Je voulais la même chose mais eux sont dans le privé donc leurs services informatiques développent et adaptent des solutions. Je suis dans le public, on n'a pas l'argent ni les compétences en interne pour cela.

Encore un grand merci à toi et à JExcel2Fr pour votre aide. Vous ne pouvez pas savoir à quel point cela va faciliter mon travail.

Cordialement,

Merci pour ce retour.
Papy Henri

Bonjour,
Une autre approche pour faciliter la gestion.
Cdt
Papy Henri

Rechercher des sujets similaires à "impression pdf onglet via macro vba"