Macro création pdf en fonction paramètre

Bonjour,

j'expose mon soucis,
J'ai 10 matricules de cadre avec un nombre de lignes aléatoires par cadre ( en fonction des
salariés dirigés par ce cadre)

je souhaite créer une capture pdf par cadres mais je ne vois pas comment faire.

en gros
colonne A1et A2 : matricule 1 avec colonne B1 nom salarié 1 B2 nom salarié 2
colone A3; matricule 2 avec colonne B3 nom salarié 3...

sachant que c'est aléatoire puisque certains cadres ont 1 salariés et d'autres 50.

Est ce que quelqu' un aurait une piste de macro avec une boucle que je pourrais adapter.

Merci de votre aide

Anthony

Configuration: Windows / Chrome 62.0.3202.94

3 réponses

  1. Contributeur
    Bonjour,

    voici un exemple à adapter en vba:

    Sub Save_pdf()
    Dim nom As String
    Dim chemin As String
    Dim Plage As Range
    Set Plage = Application.InputBox("Sélectionnez plage cellules:", Type:=8)
    chemin = ActiveWorkbook.Path & "\" 'chemin du dossier destination à adapter
    nom = InputBox("Saisissez le nom du PDF : ", "NOM PDF", "essai")
    Plage.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
            chemin & nom & ".pdf", Quality:=xlQualityStandard, _
            IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
            False
    Set Plage = Nothing
            MsgBox "Enregistrer" 'on peut supprimer
    End Sub
    


    0
    1. Merci pour ton retour rapide,

      ton code demande la selection une par une des plages.

      J'ai 280 managers donc je voulais un code avec une boucle qui a chaque changement de manager me crée un pdf.

      est ce que l'on peut au niveau de set plage adapter cette boucle ?

      J'ai la même macro qui me colle la selection dans le mail mais je voudrais la même pour générer les pdf.

      Est ce que mettre le code de mon vba mail peut aider à voir ce que je cherche?

      Cdt
      0
      1. Contributeur
        Si tu as une macro qui colle la sélection on doit pouvoir l'adapter pour créer un PDF
        Il faut un pdf par sélection?
        Mets la donc je vois se que je peux faire
        0
      2. @cs_Le PivertBonjour,

        je t'ai pas répondu entièrement hier.

        c'est mon soucis, il me faut un pdf par sélection (sélection faite à chaque changement de manager).

        ma macro mail étant en format html je ne peux pas appliquer les mises en formes conditionnelles particulières.

        donc je souhaite passer par la génération d'un pdf puis par une macro d'envoi mail avec pièce jointe que j'ai déjà.

        mon seul soucis reste cette génération de pdf.

        Merci de ton retour.
        0
      3. Contributeur
        @ghosts11111Je ne pense pas que cela soit possible. Trop long 280 pdf à générer!

        Il te faut trouver une autre solution.

        Bon courage

        @+ Le Pivert
        0
    2. Les données sont prises dans un onglet excel classique,
      et à chaque changement de matricule, un mail est généré. ( dans ce mail ressorte autant de ligne correspondant aux managers)

      Sub CongésManagers()
      'Macro permettant d'envoyer les mails avec les données dans cellules personnalisées et par matricule

      Dim managers As String
      Dim nblignes_managers As Long
      Dim nb_lignes_fichier As Long
      Dim compteur As Long

      Application.ScreenUpdating = False
      'initialisation de la variable compteur à zéro
      compteur = 0
      'lignes pour balayer l'ensemble des managers
      nblignes_managers = Sheets("Managers").Range("b1").CurrentRegion.Rows.Count

      Sheets("Matricules").Select
      Range("a1").Select
      While ActiveCell.Row <> nblignes_managers - 1
      nom_Matricules = ActiveCell
      Sheets("Managers").Select
      Range("a2").Select
      While ActiveCell.Offset(0, 0)
      If ActiveCell = nom_Matricules Then
      compteur = 1
      tableur = tableur & créer_tableau_dynamique
      End If
      ActiveCell.Offset(1, 0).Select
      Wend
      If compteur = 0 Then
      Sheets("Matricules").Select
      ActiveCell.Offset(1, 0).Select
      End If
      If compteur >= 1 Then

      Dim appOutlook As Object 'As Outlook.Application
      Set appOutlook = CreateObject("Outlook.Application")
      Dim Message As Object 'As Outlook.MailItem
      Set Message = appOutlook.CreateItem(olMailItem)

      '*****************************************************************************
      '
      corps_mail = "<HTML><BODY>....</BODY></HTML>"

      '*********************************************************************************************

      Call Message.Display 'Force l'ajout de la signature par défaut
      With Message
      '.Display

      .To = nom_Matricules & "@C....fr"
      .Subject =
      .HTMLBody = corps_mail & "<br>" & .HTMLBody 'Insertion du texte plus haut
      '.Attachments.Add ("C:\Users\") & nom_Matricules & (".pdf")

      '.Send 'Envoi

      End With
      Set objMail = Nothing
      tableur = ""
      Sheets("Matricules").Select
      ActiveCell.Offset(1, 0).Select
      compteur = 0
      End If
      Wend

      Sheets("Managers").Activate
      Sheets("Managers").Range("a3").Select

      Application.ScreenUpdating = True
      End Sub

      ' fonction qui va rechercher les données à coller dans le corps de mail
      Function créer_tableau_dynamique()

      Dim nbl As Long
      Dim nbc As Byte
      Dim tableau As String
      Dim nb_lignes As Long

      nbl = 1
      nbc = 1
      For i = 1 To nbl
      tableau = tableau & "<TR align = center>"
      For j = 1 To nbc
      tableau = tableau & "<TD>" & ActiveCell.Offset(0, 4) & .....</TD>"
      Next j
      tableau = tableau & "</TR>"
      Next i

      créer_tableau_dynamique = tableau

      End Function
      0