Exporter vers pdf a chaque fois que le contenu change

Y compris Power BI, Power Query et toute autre question en lien avec Excel
b
belaziz10
Nouveau venu
Nouveau venu
Messages : 9
Inscrit le : 13 décembre 2019
Version d'Excel : 2016
Version de Sheets : FR

Message par belaziz10 » 13 décembre 2019, 14:48

salut tt le monde,
voila j'ai un prob de niveau basique enfin ce que je pense! je souhaiterais exporter en pdf une feuille excel qui change de contenu selon le contenu d'une cellule G4. j'ai beau essayer avec les boucles "for i to " et "while " mais malheureusement a chaque fois un résultat différent de ce que je veux. la valeur de "G4" varie entre 1 et 166 sachant que des valeurs sont inexistantes.
voici le code que j'utilise.
Sub export_pdf()
Dim number As String, name1 As String, name2 As String, i As Byte

number = Sheets("Avis").Range("G4")
name1 = Sheets("Avis").Range("E3")
name2 = Sheets("Avis").Range("G3")
    For i = 1 To 3
        Range("G4") = i
        While number <= 3
       ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "C:\Users\LENOVO\Desktop\AVIS\" & number & "_" & name1 & " " & name2 & ".pdf", Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        False
        number = number + 1
        Wend
    Next i
End Sub
merci de m'aider. bien à vous
Avatar du membre
GVIALLES
Membre dévoué
Membre dévoué
Messages : 816
Appréciations reçues : 73
Inscrit le : 28 novembre 2017
Version d'Excel : 2016, 360
Téléchargements : Mes applications

Message par GVIALLES » 19 décembre 2019, 11:15

Bonjour Balaziz10,

En examinant le code que tu fournis, je n'ai pas bien compris ton besoin :

- La valeur de la cellule "G4" évolue parce que tu la modifies dans ce code ou bien pour d'autres motifs?

- Veux-tu exporter 3 fois en PDF lorsque "G4" change ?

Peux-tu expliciter?
Cordialement,

Gérard
b
belaziz10
Nouveau venu
Nouveau venu
Messages : 9
Inscrit le : 13 décembre 2019
Version d'Excel : 2016
Version de Sheets : FR

Message par belaziz10 » 20 décembre 2019, 10:22

bonjour GVIALLES,
EN FAIT JE VEUX DIRE B2 AU LIEU DE G4
la valeur de B2 lorsqu'elle change elle change avec elle l'ensemble de la feuille et je veux à chaque fois exporter vers PDF la feuille.
le nombre d'exportation ici est 3 juste pour faciliter le code, sinon le nombre est égale au nombre de valeur de B2 (liste déroulante).
je ne sais pas si je suis clair ??
Sub export_1_pdf()
Dim number As String, name1 As String, name2 As String
Range("B2") = Range("B2") + 1

number = Sheets("Avis").Range("B2")
name1 = Sheets("Avis").Range("E5")
name2 = Sheets("Avis").Range("G5")

 ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "C:\Users\LENOVO\Desktop\AVIS\" & number & "-" & name1 & name2 & " .pdf", Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        False
End Sub

Sub export_all_pdf()
Dim compteur As Long
For compteur = 1 To 3 '243
Call export_1_pdf
Next compteur
End Sub
MERCI
Avatar du membre
GVIALLES
Membre dévoué
Membre dévoué
Messages : 816
Appréciations reçues : 73
Inscrit le : 28 novembre 2017
Version d'Excel : 2016, 360
Téléchargements : Mes applications

Message par GVIALLES » 20 décembre 2019, 14:48

Bonjour Belaziz10,

Si j'ai bien compris ton sujet, voici ce que te propose:

1. Tu modifies ta procédure :
Sub export_1_pdf()
Dim number As String, name1 As String, name2 As String
'Range("B2") = Range("B2") + 1

number = Sheets("Avis").Range("B2")
name1 = Sheets("Avis").Range("E5")
name2 = Sheets("Avis").Range("G5")

 ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "C:\Users\LENOVO\Desktop\AVIS\" & number & "-" & name1 & name2 & " .pdf", Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        False
End Sub
(tu mets simplement en commentaire ou supprimes la ligne "Range("B2") = Range("B2") + 1")

2. Tu te sers de l'évènement "Change" de la feuille "Avis" dans lequel tu introduits le code :
Private Sub Worksheet_Change(ByVal Target As Range)
    'On vérifie que c'est la cellule B2 qui a été modifiée
    Dim lNB As Long, i As Long
    If Target.Address = "$B$2" Then
        'on vérifie que la cellule "B2" contient une valeur numérique
        If IsNumeric(Target.Value) Then
            lNB = Target.Value
            'On boucle autant de fois que la valeur de "B2" sur l'impression du PDF
            For i = 1 To lNB
                export_1_pdf
            Next
        End If
    End If
    MsgBox Target.Address

End Sub
Cordialement,

Gérard
b
belaziz10
Nouveau venu
Nouveau venu
Messages : 9
Inscrit le : 13 décembre 2019
Version d'Excel : 2016
Version de Sheets : FR

Message par belaziz10 » 20 décembre 2019, 16:16

bonjour GVIALLES;
peut être je n'arrive pas à décrire ce que je veux clairement!!
je synthétise : j'ai un classeur qui contient une feuille de Base de donnée nommée "BD" et une autre comme formulaire par personne nommé "Avis" dont la cellule B2 est une liste déroulante lié à la feuille "BD".
je veux un bouton lié à une Macro qui fait le travail d'exportation vers PDF de tout les formulaires qui vont être générer d'une seul fois. (d'ou : Range("B2") = Range("B2") + 1)
Je ne veux pas que lorsque je change B2 une exportation vers PDF est faite seulement. mais plusieurs exportations au nombre des éléments que contient B2. (les éléments de B2 sont au nombre de 234 éléments c'est fatiguant de les exporter tous)

NB: les éléments de B2 ne sont pas forcément une suite (1;2;3;4;7;9;......234)

merci c'est vraiment gentil de votre part
Avatar du membre
GVIALLES
Membre dévoué
Membre dévoué
Messages : 816
Appréciations reçues : 73
Inscrit le : 28 novembre 2017
Version d'Excel : 2016, 360
Téléchargements : Mes applications

Message par GVIALLES » 20 décembre 2019, 17:54

Belaziz,

Peut-être le plus simple pour que comprenne serait de fournir un classeur type me permettant de visualiser ce que tu veux.
Cordialement,

Gérard
b
belaziz10
Nouveau venu
Nouveau venu
Messages : 9
Inscrit le : 13 décembre 2019
Version d'Excel : 2016
Version de Sheets : FR

Message par belaziz10 » 21 décembre 2019, 07:49

DÉSOLÉ JE CROYAIS DÉJÀ L AVOIR PARTAGE.
LE VOILA MERCI ENCORE UNE FOIS POUR VOTRE RÉPONSES ET LE TEMPS FOURNIS A MON SUJET.
Book1e.xlsm
(43.76 Kio) Téléchargé 3 fois
Avatar du membre
GVIALLES
Membre dévoué
Membre dévoué
Messages : 816
Appréciations reçues : 73
Inscrit le : 28 novembre 2017
Version d'Excel : 2016, 360
Téléchargements : Mes applications

Message par GVIALLES » 23 décembre 2019, 11:20

Bonjour Belaziz10,

Avec ton EXCEL j'ai mieux compris le problème. Je te propose le nouveau code suivant à inclure en dans module VBA:
Option Explicit
Sub export_1_pdf(zPath As String)
    Dim number As String, name1 As String, name2 As String
    Dim oSheet As Worksheet
    Dim sFilename As String
    
    'On affecte la feuille "AVIS"
    Set oSheet = ThisWorkbook.Worksheets("AVIS")
    'On récupère le "N"
    number = oSheet.Range("B2")
    'On récupère le Nom
    name1 = oSheet.Range("E5")
    'On récupère le prénom
    name2 = oSheet.Range("G5")
    'On compose le nom du fichier PDF
    sFilename = number & "-" & name1 & name2 & " .pdf"
    'On affiche le message dans la barre d'état
    Application.StatusBar = "Génération du PDF : " & sFilename & " en cours..."
    ThisWorkbook.Activate
    
    'On exporte en PDF
    oSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sFilename _
        , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
        
    'On fait le ménage
    Set oSheet = Nothing
End Sub
Sub export_all_pdf()
    Const cPath = "C:\Users\LENOVO\Desktop\"
    Dim oRange As Range, oCell As Range, oCellB2 As Range
    Dim oSheet As Worksheet
    Dim lLastRow As Long
    Dim oFS As Object
    
    'On affecte la feuille "BD"
    Set oSheet = ThisWorkbook.Worksheets("BD")
    'On recherhe la dernière ligne renseignée de la feuille "BD
    lLastRow = oSheet.Cells(Rows.Count, 1).End(xlUp).Row
    'On affecte la plage des "N"
    Set oRange = oSheet.Range(oSheet.Cells(2, 1), oSheet.Cells(lLastRow, 1))
    'On affecte la cellule "B2" de la feuille "AVIS"
    Set oCellB2 = ThisWorkbook.Worksheets("AVIS").Range("$B$2")
    'On vérifie que le dossier de destination des PDF existe
    Set oFS = CreateObject("Scripting.FileSystemObject")
    If oFS.FolderExists(cPath) Then
        'On affiche la barre d'état
        Application.DisplayStatusBar = True
        'On boucle sur toutes les cellules de la plage des 'N'
        For Each oCell In oRange.Cells
            'On affecte la valeur de la cellule B2
            oCellB2.Value = oCell.Value
            'On rafraîchit la feuille "AVIS"
            oSheet.Calculate
            'On exporte en PDF
            export_1_pdf cPath
        Next
        'On indique la fin de traitement dans la barre d'état
        Application.StatusBar = "FIN DE LA GENERATION DES PDF"
    Else
        'On met fin au traitement
        MsgBox "Le dossier '" & cPath & "' n'existe pas." & vbCrLf & "Export PDF impossible!", vbExclamation, "PDF NON GENERE"
    End If
End Sub
Je joins mon classeur de test.
Book1e_GVS.xlsm
(47.18 Kio) Téléchargé 1 fois
Cordialement,

Gérard
b
belaziz10
Nouveau venu
Nouveau venu
Messages : 9
Inscrit le : 13 décembre 2019
Version d'Excel : 2016
Version de Sheets : FR

Message par belaziz10 » 23 décembre 2019, 16:56

bonjour,
Merci infiniment GVIALLES, je suis vraiment reconnaissant pour votre collaboration, il fonctionne parfaitement.
en examinant ce code je devrais apprendre le VBA, il est vraiment utile et amusant.
:btres:
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message