Macro Boucle Cells Range
J'utilise Excel 2007, VB editor 6.5.
Je souhaite créer une commande macro qui puisse me permettre de créer une version PDF de mon fichier Excel.
Mon fichier excel comprend plusieurs feuilles à imprimer puis une feuille comprenant la Cells Range utilisée en Data Validation dans la zone non imprimable de chaque feuille dont la zone d'impression est importante à imprimer.
Je voudrai créer chaque pdf de ce fichier correspondant à chaque valeur de la Cells Range intitulée "Transportai". Il y a un tarif de transport qui part de 0 jusqu'à 3000 EUR et qui change tous les 25 EUR.
A chaque valeur de transport, je veux créer une version pdf de mon fichier,
en créant sur le desktop un nouveau répertoir "Offres",
comprenant un lui même un sous répertoire intitulé "valeur du transport" (par exemple 0, puis un autre 25, un autre 50 etc... jusqu'à 3000).
Chacun de ces répertoires comprendra une version PDF de mon fichier excel.
J'ai testé une macro ainsi :
Sub test()
'
' test Macro
'
'
For Each L18 In Selection
If L18.Value Like "Transportai" Then
ChDir "C:\Documents and Settings\Admin\Desktop\OFFRE"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\Documents and Settings\Admin\Desktop\PASIULYMAI\2009_10_06_Pasiulymas_padeklams.pdf" _
, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=False
End If
Next
End Sub
Je ne vois pas d'où vient le problème, mais il n'y a aucun effet.
Ca ne crée aucun répertoire sur le desktop, d'une part.
D'autre part, j'aimerai que pour chacune du transport, la macro me créée un répertoire intitulé par la valeur du transport donnée et y inclue une copie PDF de mon fichier.
Merci de bien vouloir m'aider.
Configuration: Windows XP Firefox 3.5.3
44 réponses
Un utilisateur Excel 2007 cherche à automatiser l’export PDF d’un classeur, pour chaque valeur de la plage Transportai, en créant sur le bureau un dossier Offres et un sous-dossier par valeur. La solution proposée utilise ExportAsFixedFormat et ChDir, mais ne crée pas les répertoires demandés et s'appuie sur des chemins Windows XP, ce qui empêche le résultat. Plusieurs conseils suggèrent d’employer une imprimante PDF (par ex. PDF995) pour générer les fichiers, ou d’adapter le code et les chemins, tout en évoquant la gestion multi-langues et la volumétrie. D’autres approches soulignent la complexité des langues et proposent d’initialiser le choix linguistique, puis de créer des dossiers de référence et des sous-dossiers transport 0-3000.
-
Bidouilleu_R,
rebonjour,
j'ai d'ores et déjà appliqué le résultat "Résolu" à tes postes.
Cependant, il existe bel et bien, le logiciel Primo pdf que nous utilisons pour les anciennes versions de MS Office afin de pouvoir créer les pdf de nos feuilles excel ou word 2000/2003.
Dans ce cas, quelle serait la possibilité afin de pouvoir faire en sorte que cette macro du poste 42, soit valable pour la version 2007, et si la version est antérieure à 2007, ben que ça puisse passer par l'imprimante tampon de primo pdf ? -
Bonjour,
face à ce nouveau problème, je n'ai pas de réponse.
Office 2007 exporte en format pdf, Office 2003 ne le fait pas.
Est-ce possible? Sans doute, mais je ne l'ai jamais fait.
Une solution simple serai imprimer le fichier en installant un module comme
PDF995 ou un autre ce petit soft (gratuit) se comporte comme une imprimante et crée
des document PDF au lieu de les diriger vers l'imprimante.
Il serait possible de faire un ".print..." classique en prenant en compte cette imprimante génératrice de PDF
Faire ce choix ne m'appartient pas.
Je te rappelle que tu es sur un forum d'entraide.
On peut conseiller mais pas décider pour les autres.
Je te souhaite une bonne journée.
Et si tu penses que c'est ok .... passe le premier post en résolu.
Merci
R -
Je te remercie pour ce nouveau code qui marche normalement, sous MS OFFICE 2007.
Cependant, j'ai une question.
J'ai encore une question par rapport aux versions différentes de MS Office parmi tous mes collègues.
En effet, j'ai des collègues qui possèdent encore la version MS OFFICE 2003.
Et j'ai pu tester avec deux ordis dont les excels tournent sous cette version, la zone
sh.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
ne fonctionne pas.
Je ne sais pas, mais je pense que la version 2003 n'accepte pas le SAVE AS *.pdf autrement dit, xlTypePDF en VB.
Pourrait-on vraiment sauvegarder cette offre en format PDF sous MS Office 2003 ???
Ou faudra-t-il inclure des lignes dans le code, afin que la macro puisse vérifier la version de Excel utilisée,
et appliquer si c'est 2007, le code actuel, si c'était 2003, un autre code adapté ?
Merci encore pour ce dernier problème.
HYNERYL -
j' ai modifié le fichier pour intégrer le thisworkbook.path
on fait donc thisworkbook.path ( endroit ou est enregistré le fichier)
..\PASIULYMAI\0\2 fichier pdfSub test3() ' ' test3 Macro ' ' Dim MyPath As String ' le chemin Dim LgInit As Integer ' la longueur du chemin MyPath Dim MyName As String ' l'entrée du repertoire ou le fichier Dim DossierTransport As String ' le numero pour créer le dossier Dim LaDate As Date ' la date du jour Dim ChaineDate As String 'contient la date en chaine Dim TempMois As String Dim TempJour As String Dim Utilisateur As String ' contient le nom pour créer le PDF Dim Langue As String ' contient la langue (2 lettres) Dim NomFichier As String ' le nomdéfinitif du fichier Dim NomFichier2 As String ' le nom du fichier pdf Sand à exporter Dim FeuilleSand As String ' le nom d'onglet --feuille Sand Dim I As Integer ' compteur Dim TabLangue(6) As String TabLangue(0) = "EN" TabLangue(1) = "FR" TabLangue(2) = "IT" TabLangue(3) = "DE" TabLangue(4) = "ESP" TabLangue(5) = "LT" While Langue = "" Langue = InputBox("choisissez la langue..." & Chr(10) & Chr(10) & "Click sur annuler " & Chr(10) & "pour changer de langue " & Chr(10) & Chr(10) & "....> suivant ", "choix de la langue", TabLangue(I)) I = I + 1 If I > UBound(TabLangue) Then Exit Sub Wend LaDate = Format(Date, "yyyy/mm/dd") TempMois = CStr(Month(LaDate)) If Len(TempMois) < 2 Then TempMois = "0" & TempMois TempJour = CStr(Day(LaDate)) If Len(TempJour) < 2 Then TempJour = "0" & TempJour ChaineDate = CStr(Year(LaDate)) + TempMois + TempJour '*********************************************** Utilisateur = "_pasiulymas_ramundas_" '*********************************************** ' la langue sera gérée dans la boucle MyPath = ThisWorkbook.Path MyPath = MyPath + "\PASIULYMAI" MyName = Dir(MyPath, vbDirectory) If MyName = "" Then MkDir MyPath End If ChDir MyPath Sheets(Langue).Select ' on sélectionne la feuille de la langue 'celle-ci sera exportée 80 fois ou plus Application.ScreenUpdating = False For I = 0 To 2000 Step 25 Sheets(Langue).Range("L18").Value = I 'on place la valeur du transport 'le nom du fichier en sortie devient NomFichier = ChaineDate + "_Promotion_Rasmundas_" + Langue NomFichier2 = ChaineDate + "_Sand_" + Langue 'je vérifie l'existance du sousrépertoire 'et s'il n'existe pas il y a création 'création des 80 ou plus DossierTransport = Sheets(Langue).Range("L18").Value ' ou i MyPath = MyPath & "\" & DossierTransport MyName = Dir(MyPath, vbDirectory) If MyName = "" Then MkDir MyPath End If ChDir MyPath ' on se positionne au bon endroit 'if range("L17").value like.... ' note L17 doit être entre crochets If Sheets(Langue).Range("L17").Value Like "Transport :" Then 'en mettant Sh.name le fichier Pdf portera le nom de la feuille Sheets(Langue).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ MyPath & "\" & NomFichier, Quality:= _ xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _ OpenAfterPublish:=False FeuilleSand = Langue + "_Sand" Sheets(FeuilleSand).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ MyPath & "\" & NomFichier2, Quality:= _ xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _ OpenAfterPublish:=False End If MyPath = Mid(MyPath, 1, Len(MyPath) - Len(DossierTransport) - 1) LgInit = Len(MyPath) 'On ajoute le répertoire SANDELYJE MyPath = MyPath & "\SANDELYJE" MyName = Dir(MyPath, vbDirectory) If MyName = "" Then MkDir MyPath End If ChDir MyPath ' on se positionne au bon endroit 'On ajoute le répertoire SANDELYJE\0 ...2000 MyPath = MyPath & "\" & I MyName = Dir(MyPath, vbDirectory) If MyName = "" Then MkDir MyPath End If ChDir MyPath ' on se positionne au bon endroit 'on peut ajouter une feuille Ici Sheets(Langue).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ MyPath & "\" & NomFichier, Quality:= _ xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _ OpenAfterPublish:=False Sheets(FeuilleSand).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ MyPath & "\" & NomFichier2, Quality:= _ xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _ OpenAfterPublish:=False 'on revient à la racine MyPath = Left(MyPath, LgInit) ChDir (MyPath) Next Application.ScreenUpdating = True Sheets(Langue).Select End Sub -
Shell ("explorer.exe " & ThisWorkbook.Path & TextBox2), 1
J'ai pensé à ce code, ça pourrait répondre à mon attente de pouvoir réaliser une commande macro unique, sans que le systeme d'operation ne soit un probleme je pense.
Dans ce cas, il faudrait remanier le code de ta macro dans le passage MyPath en mettant :
MyPath = ThisWorkbook.Path & PASIULYMAI
ou bien
MyPath = ThisWorkbook.Path & "\" & PASIULYMAI
je ne sais pas soit l'un soit l'autre car apres dans la ligne ChDir MyPath, ça me met du coup, 2antislashes au lieu d'un si je mets ThisWorkbook.Path & "\" & PASIULYMAI et ça me bloque ensuite au passage ci :
Sheets(Langue).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
MyPath & "\" & NomFichier, Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=False
(ça me met toujours MyPath équivalent au chemin d'accès suivi de \\ et du titre du sous-rep 0 par exemple car c'est le premier sous-repertoire que la macro va créer).
Je te joinds le code que jai tente de realiser
j'y ai ajoute une ouverture du dossier PASIULYMAI a la fin de lexecution de la macro, mais jy ai pour le moment une erreur dans le passage cidessus.
Sub test3()
'
' test3 Macro
'
'
Dim MyPath As String ' le chemin
Dim MyName As String ' l'entrée du repertoire ou le fichier
Dim DossierTransport As String ' le numero pour créer le dossier
Dim LaDate As Date ' la date du jour
Dim ChaineDate As String 'contient la date en chaine
Dim TempMois As String
Dim TempJour As String
Dim Utilisateur As String ' contient le nom pour créer le PDF
Dim Langue As String ' contient la langue (2 lettres)
Dim NomFichier As String ' le nomdéfinitif du fichier
Dim I As Integer ' compteur
Dim TabLangue(6) As String
TabLangue(0) = "EN"
TabLangue(1) = "FR"
TabLangue(2) = "IT"
TabLangue(3) = "DE"
TabLangue(4) = "ESP"
TabLangue(5) = "LT"
' ici la boucle pour le choix des langue
While Langue = ""
Langue = InputBox("choisissez la langue..." & Chr(10) & Chr(10) & "Click sur annuler " & Chr(10) & "pour changer de langue " & Chr(10) & Chr(10) & "....> suivant ", "choix de la langue", TabLangue(I))
I = I + 1
If I > UBound(TabLangue) Then Exit Sub
Wend
LaDate = Format(Date, "yyyy/mm/dd")
TempMois = CStr(Month(LaDate))
If Len(TempMois) < 2 Then TempMois = "0" & TempMois
TempJour = CStr(Day(LaDate))
If Len(TempJour) < 2 Then TempJour = "0" & TempJour
ChaineDate = CStr(Year(LaDate)) + TempMois + TempJour
'***********************************************
Utilisateur = "_pasiulymas_padeklu_ramundas_"
'***********************************************
' la langue sera gérée dans la boucle
MyPath = ThisWorkbook.Path & PASIULYMAI
MyName = Dir(MyPath, vbDirectory)
If MyName = "" Then
MkDir MyPath
End If
ChDir MyPath
'ChDir ThisWorkbook.Path & PASIULYMAI
Sheets(Langue).Select ' on sélectionne la feuille de la langue
'celle-ci sera exportée 80 fois ou plus
Application.ScreenUpdating = False
For I = 0 To 2000 Step 25
Sheets(Langue).Range("L18").Value = I 'on place la valeur du transport
'le nom du fichier en sortie devient
NomFichier = ChaineDate + Utilisateur + Langue
'je vérifie l'existance du sousrépertoire
'et s'il n'existe pas il y a création
'création des 80 ou plus
DossierTransport = Sheets(Langue).Range("L18").Value ' ou i
MyPath = MyPath & DossierTransport
'MyPath = ThisWorkbook.Path & PASIULYMAI
MyName = Dir(MyPath, vbDirectory)
If MyName = "" Then
MkDir MyPath
End If
ChDir MyPath ' on se positionne au bon endroit
'if range("L17").value like.... ' note L17 doit e^tre entre crochets
If Sheets(Langue).Range("L17").Value Like "Transport :" Then
'en mettant Sh.name le fichier Pdf portera le nom de la feuille
Sheets(Langue).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
MyPath & "\" & NomFichier, Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=False
End If
MyPath = Mid(MyPath, 1, Len(MyPath) - Len(DossierTransport) - 1)
Next
Application.ScreenUpdating = True
Sheets(Langue).Select
Shell ("explorer.exe " & ThisWorkbook.Path & "\" & PASIULYMAI & TextBox2), 1
End Sub -
j'ai noté tes remarques,
si j'ai le temps je travaille dessus
pour la feuille sand et le dossier c'est facile
pour le Path le c:\PASIULYMAI" ou le d:\... sera le mieux
pour vista le chemin sera en effet différent
même si on peux accéder directement à desktop (bureau) tout le monde accède à son bureau.
mais je pense que le c:\... reste le plus simple.
pour le moment je suis pris sur un autre truc. -
Bien que j'ai pu dire de modifier les intitulés des pdfs des feuilles LANGUE_SAND tout à l'heure, je vais confirmer tout de meme ceci.
Par contre, pour plus de lisibilité crois-tu que les commerciaux puissent mieux comprendre en retrouvant les offres differentes dans des repertoires identiques ?
Ou plutot est-ce que tu ne penses pas que ce soit mieux si on pouvait realiser un repertoire LANGUE (soit EN, soit FR, soit DE, IT, LT ou ESP), et un autre repertoire dans PASIULYMAI, intitulé quant-à lui "SANDELYJE", dans lesquels on pourra mettre les sous-répertoire de transport 0 à 2000
?
De plus, je voulais élucider un léger problème mais de taille tout de même.
Les ordis des commerciaux sont reliés en réseau. Sauf que chacun des ordis n'utilisent pas le meme OS
(certains dont moi, utilisent XP, d'autres Vista malheureusement).
Que ce soit pour l'un ou pour l'autre des OS, le code de la macro doit donner un chemin d'acces identique pour tous les ordinateurs. Jusqu'ici sur cette question, je ne dis pas de conneries j'espère ;) !
Donc, ne crois-tu pas qu'il vaudrait mieux modifier le chemin d'accès ci après :
MyPath = "C:\Documents and Settings\Admin\Desktop\PASIULYMAI"
en
MyPath = "C:\Documents and Settings\All Users\Desktop\PASIULYMAI"
car tous les ordinateurs n'ont pas le meme nom d'utilisateurs.
Cependant, est-ce que ce chemin d'accès pourrait correspondre à une arborescence VISTA ?
Sinon, autant réduire le chemin d'accès au minimum,
peut-etre mettre un chemin d'accès du genre :
MyPath = "C:\PASIULYMAI"
ou alors
MyPath = "D:\PASIULYMAI"
Merci encore,
Hyneryl -
Oui, la version PDF de la feuille LANGUE_Sand,
devra etre placée dans les memes sous-rep réalisés grace à la macro que tu viens de m'offrir et qui marche.
Encore merci pour tes efforts et ton génie dans les macros.
Cependant, il faudra modifier le titre des pdf en mettant "YYYYMMDD_promotions_ramundas_LANGUE.pdf" -
la feuille Langue_Sand doit-elle être placée dans chaque dossier .. 0 25 50 ... 2000 ou non ?
je te rajouterai un bout de code...
si besoin -
Pour récompenser ta patience : - )
ça devrait le faire...Sub test3() ' ' test3 Macro ' ' Dim MyPath As String ' le chemin Dim MyName As String ' l'entrée du repertoire ou le fichier Dim DossierTransport As String ' le numero pour créer le dossier Dim LaDate As Date ' la date du jour Dim ChaineDate As String 'contient la date en chaine Dim TempMois As String Dim TempJour As String Dim Utilisateur As String ' contient le nom pour créer le PDF Dim Langue As String ' contient la langue (2 lettres) Dim NomFichier As String ' le nomdéfinitif du fichier Dim I As Integer ' compteur Dim TabLangue(6) As String TabLangue(0) = "EN" TabLangue(1) = "FR" TabLangue(2) = "IT" TabLangue(3) = "DE" TabLangue(4) = "ESP" TabLangue(5) = "LT" ' ici la boucle pour le choix des langue While Langue = "" Langue = InputBox("choisissez la langue..." & Chr(10) & Chr(10) & "Click sur annuler " & Chr(10) & "pour changer de langue " & Chr(10) & Chr(10) & "....> suivant ", "choix de la langue", TabLangue(I)) I = I + 1 If I > UBound(TabLangue) Then Exit Sub Wend LaDate = Format(Date, "yyyy/mm/dd") TempMois = CStr(Month(LaDate)) If Len(TempMois) < 2 Then TempMois = "0" & TempMois TempJour = CStr(Day(LaDate)) If Len(TempJour) < 2 Then TempJour = "0" & TempJour ChaineDate = CStr(Year(LaDate)) + TempMois + TempJour '*********************************************** Utilisateur = "_pasiulymas_ramundas_" '*********************************************** ' la langue sera gérée dans la boucle MyPath = "C:\Documents and Settings\Admin\Desktop\PASIULYMAI" MyName = Dir(MyPath, vbDirectory) If MyName = "" Then MkDir MyPath End If ChDir MyPath 'ChDir "C:\Documents and Settings\Admin\Desktop\PASIULYMAI" Sheets(Langue).Select ' on sélectionne la feuille de la langue 'celle-ci sera exportée 80 fois ou plus Application.ScreenUpdating = False For I = 0 To 2000 Step 25 Sheets(Langue).Range("L18").Value = I 'on place la valeur du transport 'le nom du fichier en sortie devient NomFichier = ChaineDate + Utilisateur + Langue 'je vérifie l'existance du sousrépertoire 'et s'il n'existe pas il y a création 'création des 80 ou plus DossierTransport = Sheets(Langue).Range("L18").Value ' ou i MyPath = MyPath & "\" & DossierTransport 'MyPath = "C:\Documents and Settings\Admin\Desktop\PASIULYMAI" MyName = Dir(MyPath, vbDirectory) If MyName = "" Then MkDir MyPath End If ChDir MyPath ' on se positionne au bon endroit 'if range("L17").value like.... ' note L17 doit être entre crochets If Sheets(Langue).Range("L17").Value Like "Transport :" Then 'en mettant Sh.name le fichier Pdf portera le nom de la feuille Sheets(Langue).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ MyPath & "\" & NomFichier, Quality:= _ xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _ OpenAfterPublish:=False End If MyPath = Mid(MyPath, 1, Len(MyPath) - Len(DossierTransport) - 1) Next Application.ScreenUpdating = True Sheets(Langue).Select End Sub -
Pourquoi le répertoire 0 est nécessaire, c'est parce que nous en tant que commerciaux, nous devons pouvoir proposer les offres EX-Works (EXW = incoterme donnant le prix sans transport, sorti d'usine).
Dès qu'il y a un transport, nous proposons les tarifs DDU (Delivery Duty Unpaid, ou Rendu Droits dus en français).
Pourquoi 3000EUR n'est plus important ? ben tu le comprends par toi-meme, il ne vaut mieux pas lancer des offres ou le transport représenterait les 3/4 du prix de vente du produit sorti d'usine.
Autant partir de l'usine (soit répertoire zero "0"), et aller jusqu'au transport de 2000EUR "2000".
HYNERYL -
EUREKA !
C'est bien cela oui, tu as compris c'est bien cela que je voudrais obtenir.
Sauf que c'est bien à partir de la valeur 0 (pour le transport) mais pas à partir de 25 qu'il me faudrait les pdfs,
desktop\offres\0\20091009_user_FR.pdf
desktop\offres\25\20091009_user_FR.pdf
\50\20091009_user_FR.pdf
\100\20091009_user_FR.pdf
etc... jusqu'a 2000.
Avant je travaillais, mais je suis completement pommé dans ces boucles et dans l'univers du VB code que je dois reconnaitre que je t'ai laissé l'initiative :).
Merci encore.
HYNERYL -
ça y est j'ai compris !
les feuilles n'existe pas il faut ( il y en a seulement une FR par exemple)
et dans cette feuille il faut faire varier de 25 à 2000 au pas de 25
créer le répertoire et y mettre la feuille ainsi modifiée.
desktop\offres\25\20091009_user_FR.pdf
\50\20091009_user_FR.pdf
\100\20091009_user_FR.pdf
etc...
Tu dis avant que je travaille -
EXTRAIT du premier message :
"Macro Boucle Cells Range
Dernière réponse le 9 oct 2009 à 14:04:10 Hyneryl, le 7 oct 2009 à 14:39:10
Signaler ce message aux modérateurs Ajouter à mes alertes (mes interventions)
Statut: Non résolu Résolu
Bonjour,
J'utilise Excel 2007, VB editor 6.5.
Je souhaite créer une commande macro qui puisse me permettre de créer une version PDF de mon fichier Excel.
Mon fichier excel comprend plusieurs feuilles à imprimer puis une feuille comprenant la Cells Range utilisée en Data Validation dans la zone non imprimable de chaque feuille dont la zone d'impression est importante à imprimer.
Je voudrai créer chaque pdf de ce fichier correspondant à chaque valeur de la Cells Range intitulée "Transportai". Il y a un tarif de transport qui part de 0 jusqu'à 3000 EUR et qui change tous les 25 EUR.
A chaque valeur de transport, je veux créer une version pdf de mon fichier,
en créant sur le desktop un nouveau répertoir "Offres",
comprenant un lui même un sous répertoire intitulé "valeur du transport" (par exemple 0, puis un autre 25, un autre 50 etc... jusqu'à 3000).
Chacun de ces répertoires comprendra une version PDF de mon fichier excel. "
J'ai peut-etre fait une erreur en m'exprimant ainsi "fichier excel" plutôt qu'en disant de ma feuille à partir de laquelle l'utilisateur clique sur le bouton de la macro. -
Salut Bidouilleur_R,
Je vois que tu ne t'aperçois seulement que maintenant, que ça n'était pas totalement comme ça que je l'avais demandé dès le départ. Mais je veux bien croire, que vue la complexité de la réflexion de ces macros, j'ai du surement mal m'exprimer dès le départ aussi, et donc, il a pu y avoir cet amalgame.
Alors, je voudrais juste essayer de préciser ma penser sur l'utilisation de cette macro.
L'utilisateur ne va devoir réaliser les versions PDF que de la feuille EN, ou FR ou DE, ou ESP, ou IT ou LT.
Car chaque utilisateur ne travaille pas forcément avec des clients de ces langues là.
Donc oui, il doit à mon avis aussi, un choix de la langue dès le départ.
Ensuite, j'ai encore revu par rapport au transport on peut déjà faire de 0 à 2000 EUR au lieu de faire à l'origine de 0 à 3000. Ca nous remet à 80 versions différentes de l'offre en pdf au lieu de 120.
On peut dire que la feuille FR donnera 80 versions pdf différentes selon le transport.
Si mon collegue commercial taffe plutôt avec une clientèle anglophone, il devra cliquer sur le bouton de la macro en K18 sur la page EN et celle-ci lui créerai donc 80 version pdf de la feuille EN.
Ainsi de suite si les clients de mes collegues sont italophones, germanophones, ispanophones ou lituanophones.
Donc oui, on saisit la langue, mais je pense que la macro n'a rien a voir dans le choix de la langue, c'est plutot la macro qui doit réaliser des actions sur la page d'où est lancée la macro.
Ensuite, on crée un dossier de référence PASIULYMAI qui contiendra les sous dossier transport 0-2000
Par contre, avec chaque feuilles je fais quoi ...?
Et bien, il n'y a pas à appliquer cette macro à chaque feuille justement, mais juste à la feuille à partir de laquelle est demandée (appliquée ou cliquée) la macro grâce au bouton.
C'est ça que je n'arrivais pas à te faire comprendre depuis quelques messages déjà.
Donc, je récapitule, une page est à l'origine de la demande de la macro.
Celle-ci réalisera les sous-repertoires dans le dossier PASIULYMAI,
et réalisera donc les 80versions différentes pdf dans chacun des sous-rép de Pasiulymai.
Je veux bien t'aider plus.
Merci encore pour ton concours dans ma requête.
Hyneryl -
bon je reprend ton explication et j'essaye de comprendre...
Cependant, ça crée encore et toujours le pdf de chacune des pages selon la valeur déjà présente dans la cellule L18 de chacune des pages.
ben! oui puisque je récupère cette valeur pour former le nom du dossier... et quand le dossier change
la feuille se place dans le nouveau dossier.
Or je voudrais que pour une seule page, par exemple, la page FR, on puisse créer les 120 pdf différents
correspondants à chaque valeur du transport ( de 0 à 3000EUR). Je comptais plutôt mettre une macro par page ou bien par langue donc, mais est-ce que c'est bon ?
dans ce cas il vaudrais mieux choisir la langue dès le départ
Est-ce que les 18 feuilles que je vois correspondent à tes 120 feuilles....
Ou alors, plutot réaliser les 120 pdf différents pour les pages EN, FR, IT, DE, ESP et LT uniquement.
En plus, j'aurai besoin de réaliser les 120 pdf différents pour les pages SAND aussi.
Mais bon, le probleme est que l'utilisateur (le commercial), ne va vouloir réaliser que les 120 pdf de la langue qu'il utilise auprès des clients, et pas les 120 x 6langues, tu vois ce que je veux dire.
Cela me parait logique : le reste ne l'intéresse pas
Comment faire pour que l'utilisateur, appuyant sur un bouton en page FR, puisse réaliser les 120 pdf différents, uniquement pour la page FR, mais en plusieurs versions différentes dépendant de la valeur du transport en L18, qui peut etre de 0 à 3000 chaque 25 EUR.
là je suis pas sur d'avoir compris...
en Fr je vois 3 feuilles... il y a 6 langues.
pas la peine d'aller plus loin.
moi je ne vois que 6 langues x 3feuilles = 18 feuilles
le traitement se fait comme ça
1 )prend la date actuelle met la en yyyymmdd
ajoute _utilisateur_
ajoute la langue
tu as le nom du fichier
2) construit le dossier
regarde s'il existe sinon il faut le créer
3) pour chaque feuille ( sh) dans le classeur
sélectionne la feuille
récupère la lange ( on en a besoin pour le fichier exporter)
si il y a transport en l17 on export sinon on fait rien
4) réinitialiser la variable du chemin
mais ce que tu demandes maintenant ne corrspond pas à ce que tu demandais avant.
on peut faire un choix de la langue dès le départ ... mais là il faut que tu m'aides...
dans l'ordre
on saisit la langue
on crée un dossier de référence PASIULYMAI qui contiendra les sous dossier transport 0-3000
avec chaque feuilles je fais quoi ...? -
Deja merci encore pour la correction pour les noms des pdf.
C'est exactement les noms de pdf que je cherchais à obtenir au final.
Cependant, ça crée encore et toujours le pdf de chacune des pages selon la valeur déjà présente dans la cellule L18 de chacune des pages.
Or je voudrais que pour une seule page, par exemple, la page FR, on puisse créer les 120 pdf différents
correspondants à chaque valeur du transport ( de 0 à 3000EUR). Je comptais plutôt mettre une macro par page ou bien par langue donc, mais est-ce que c'est bon ?
Ou alors, plutot réaliser les 120 pdf différents pour les pages EN, FR, IT, DE, ESP et LT uniquement.
En plus, j'aurai besoin de réaliser les 120 pdf différents pour les pages SAND aussi.
Mais bon, le probleme est que l'utilisateur (le commercial), ne va vouloir réaliser que les 120 pdf de la langue qu'il utilise auprès des clients, et pas les 120 x 6langues, tu vois ce que je veux dire.
Comment faire pour que l'utilisateur, appuyant sur un bouton en page FR, puisse réaliser les 120 pdf différents, uniquement pour la page FR, mais en plusieurs versions différentes dépendant de la valeur du transport en L18, qui peut etre de 0 à 3000 chaque 25 EUR.
De meme pour l'utilisateur de la page EN, ou IT, ou DE, ou ESP, ou LT, il y aurait comme en FR K18 un bouton intitulé PDF qui ferait marcher la macro, qui devrait dépendre de la page où l'utilisateur se trouve lorsqu'il appuie sur le bouton pour realiser les 120 versions des pdf dans les sous-repertoires du repertoire PASIULYMAI.
Tu comprends ?
Merci d'avance,
HYNERYL -
Sub test3() ' ' test3 Macro ' ' Dim sh As Variant Dim MyPath As String ' le chemin Dim MyName As String ' l'entrée du repertoire ou le fichier Dim DossierTransport As String ' le numero pour créer le dossier Dim LaDate As Date ' la date du jour Dim ChaineDate As String 'contient la date en chaine Dim TempMois As String Dim TempJour As String Dim Utilisateur As String ' contient le nom pour créer le PDF Dim Langue As String ' contient la langue (2 lettres) Dim NomFichier As String ' le nomdéfinitif du fichier LaDate = Format(Date, "yyyy/mm/dd") TempMois = CStr(Month(LaDate)) If Len(TempMois) < 2 Then TempMois = "0" & TempMois TempJour = CStr(Day(LaDate)) If Len(TempJour) < 2 Then TempJour = "0" & TempJour ChaineDate = CStr(Year(LaDate)) + TempMois + TempJour '*********************************************** Utilisateur = "_pasiulymas_ramundas_" '*********************************************** ' la langue sera gérée dans la boucle MyPath = "C:\Documents and Settings\Admin\Desktop\PASIULYMAI" MyName = Dir(MyPath, vbDirectory) If MyName = "" Then MkDir MyPath End If ChDir MyPath 'ChDir "C:\Documents and Settings\Admin\Desktop\PASIULYMAI" For Each sh In Worksheets sh.Select 'le nom du fichier en sortie devient Langue = Left(sh.Name, 2) ' 2 charactères pour la langue NomFichier = ChaineDate + Utilisateur + Langue 'je vérifie l'existance du sousrépertoire 'et s'il n'existe pas il y a création DossierTransport = sh.Range("L18").Value MyPath = MyPath & "\" & DossierTransport 'MyPath = "C:\Documents and Settings\Admin\Desktop\PASIULYMAI" MyName = Dir(MyPath, vbDirectory) If MyName = "" Then MkDir MyPath End If ChDir MyPath ' on se positionne au bon endroit If sh.Range("L17").Value Like "Transport :" Then 'en mettant Sh.name le fichier Pdf portera le nom de la feuille sh.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ MyPath & "\" & NomFichier, Quality:= _ xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _ OpenAfterPublish:=False End If MyPath = Mid(MyPath, 1, Len(MyPath) - Len(DossierTransport) - 1) Next Sheets(4).Select End Sub
Normalement ça marche chez moi... -
Bon ben désormais, ça marche pour creer des repertoires tous placés dans la racine du meme repertoire.
Par contre, pour changer le nom des fichiers PDF, de la forme suivante :
YYYYMMDD_pasiulymas_ramundas_(LANGUE).PDF
En effet, je voudrais revoir le code de façon à ce que
la macro ne fasse pas pour toutes les pages la version pdf en fonction du prix qui se trouve déjà dans la case L18,
mais plutôt que à ce qu'elle fasse pour la page où l'utilisateur clique sur le bouton de la macro,
la meme et unique page, en version PDF, mais à chaque valeur du transport.
Pourrais-tu tenter de revoir ton code s'il te plait ?
Merci d'avance.
HYNERYL -
voilà j'avais oublié un "\" les fichiers étaient créés au même endroit
c'était du au fait que je dois changer le nom du chemin
erreur 76 chemin d'accès introuvable.
Teste et dis moi si c'est ok!Sub test3() ' ' test3 Macro ' ' Dim sh As Variant Dim MyPath As String ' le chemin Dim MyName As String ' l'entrée du repertoire ou le fichier Dim DossierTransport As String ' le numero pour créer le dossier MyPath = "C:\Documents and Settings\Admin\Desktop\PASIULYMAI" MyName = Dir(MyPath, vbDirectory) If MyName = "" Then MkDir MyPath End If ChDir MyPath For Each sh In Worksheets sh.Select 'je vérifie l'existance du sousrépertoire 'et s'il n'existe pas il y a création DossierTransport = sh.Range("L18").Value MyPath = MyPath & "\" & DossierTransport MyName = Dir(MyPath, vbDirectory) If MyName = "" Then MkDir MyPath End If ChDir MyPath ' on se positionne au bon endroit 'if range("L17").value like.... ' note L17 doit être entre crochets If sh.Range("L17").Value Like "Transport :" Then 'en mettant Sh.name le fichier Pdf portera le nom de la feuille sh.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ MyPath & "\" & sh.Name, Quality:= _ xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _ OpenAfterPublish:=False End If MyPath = Mid(MyPath, 1, Len(MyPath) - Len(DossierTransport) - 1) Next End Sub
- 1
- 2
- 3