Exporter vers pdf a chaque fois que le contenu change
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
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?
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
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
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
Belaziz,
Peut-être le plus simple pour que comprenne serait de fournir un classeur type me permettant de visualiser ce que tu veux.
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.
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.
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.