Macro création pdf en fonction paramètre

ghosts11111 Messages postés 7 Statut Membre -  
cs_Le Pivert Messages postés 8437 Statut Contributeur -
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. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
  2. ghosts11111 Messages postés 7 Statut Membre
     
    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. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      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
      1. ghosts11111 Messages postés 7 Statut Membre > cs_Le Pivert Messages postés 8437 Statut Contributeur
         
        Bonjour,

        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
      2. cs_Le Pivert Messages postés 8437 Statut Contributeur 730 > ghosts11111 Messages postés 7 Statut Membre
         
        Je 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
  3. ghosts11111 Messages postés 7 Statut Membre
     
    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