Boucle d'export PDF (avec données variable) en VBA
Bonjour,
Nous cherchons à réaliser une sorte du publipostage dans excel.
Nous avons un feuille excel (joliment mis en page qui va être la page a exporte en pdf). Les données de cette feuille changent en fonction d'un nombre tapé dans une case de cette même feuille (0 puis 1 puis 2 puis 3... de 0 à 26).
Je cherche donc à faire une boucle pour exporter toutes les variantes possibles de 0 à 26.
La VBA doit donc dans l'ordre :
- Remplacer la valeur de la cellule J3 par 0
- Définir des variables
- Exporter le document
- Remplacer la valeur de la cellule J3 par 1
- Définir des variables
- Exporter le document
- Remplacer la valeur de la cellule J3 par 2
- Définir des variables
- Exporter le document
(puis 3 puis 4 puis 5.... Jusqu'à 26)
La macro tourne en boucle jusqu'à avoir exporté les 26 documents. Attention, les variables doivent être redéfinies à chaque fois que la cellule J3 est modifiée .
Pourriez-vous m'aider ? Quelle serait la structure générale de la macro ?
Nous avons déjà écris les variables à définir, et le code d'exportation. La première étape est un simple "Cells(x, y0).Value = 0 (puis 1 puis 2 puis 3...) mais nous sommes copier /coller le code des variables et de l'export ce qui rends illisible notre macro...
Je ne peux pas joindre un document, car le fichier utilisé est très lourd, confidentiel et difficile à reproduire simplement, mais si vraiment, c'est indispensable à la compréhension, je m'y attellerais :p
Bonjour MalanZach,
En général et pour aider au mieux, nous demandons un fichier
Ceci dit, pour ce que vous souhaitez, le code peut être simple
1) Une boucle de 0 à 26
https://www.excel-pratique.com/fr/vba/boucles
2) Définir les variables : je ne sais pas ce que vous voulez dire
3) Exporter, le forum regorge de post où l'on parle de ça, il y ajuste à faire une recherche
A+
Bonjour BrunoM45,
Effectivement j'ai déjà regardé bcq de topics sur les sujets. J'ai déjà une macro d'export sauf que je n'arrive pas à la boucler pour exporter toutes mes factures. Je n'arrive pas non plus à conditionner l'export aux factures supérieur à 0€.
J'ai pris le temps de faire un fichier qui copie mon problème. En gros, c'est une sorte de publipostage directement dans Excel.
En espérant être clair et que quelqu'un pourra m'aider :)
Bonjour MalanZach,
Je pense que vous devriez commencer par apprendre les base de VBA et la programmation Objets
Sheets("BDD").Select
client = Range("A2").ValueIl n'y a pas besoin de sélectionner la feuille pour récupérer une valeur
Client = Sheets("BDD").Range("A2").ValueEnsuite, je ne vois aucune boucle dans votre fichier... alors forcément
Corrigez votre code, ajouter une boucle et revenez nous voir
A+
Sub Boucle_Export_CST()
Dim Lot, Art, Chemin_Comp, Client, Date_Info, Chemin
With Sheets("BDD")
Client = .Range("A2").Value
Date_Info = .Range("B2").Value
Chemin = .Range("C2").Value
End With
'If Application.UserName = "BSA" Then Chemin = ThisWorkbook.Path & "\" 'cette ligne est pour moi pour tester avec un autre chemin
With Sheets("FRAIS FINANCIERS")
For i = 1 To 26
.Range("J3").Value = i
Lot = .Range("D3").Value
Art = .Range("D4").Value
On Error Resume Next 'continuer en cas d'erreur
Chemin_Comp = "" 'RAZ
Chemin_Comp = Chemin & Date_Info & " " & Client & " - CST - " & Lot & " " & Art & ".pdf" 'en cas d'erreur cette ligne fera rien
On Error GoTo 0
If Len(Chemin_Comp) = 0 Then 'si le chemin est vide, c'est parce que il y avait un erreur
MsgBox "erreur avec Chemin_Comp" & vbLf & "i=" & i
Else
.Range(.PageSetup.PrintArea).ExportAsFixedFormat Type:=xlTypePDF, Filename:=Chemin_Comp, OpenAfterPublish:=True
End If
Next
.Range("J3").Value = 1
End With
End SubAttention avec la construction With ... End With le point avant "Range(...) indique qu'on doit regarder vers ce paramètre de "With"
C'est ce que j'essaye de faire en parrallèle de nombreuses autres choses BrunoM45 ;) Mais merci pour tes conseils.
Merci beaucoup BsAlv, c'est exactement ce que je n'arrivais pas réaliser. J'avais de la peine à appliquer les tuto et comprendre la logique des boucles ! Mais avec ton code appliqué à mon problème, je comprends mieux comment fonctionne les boucles !
J'ai rajouté un "If Prix >0 then" avant l'export et le tour est joué ! Merci :D