Macro Boucle Cells Range

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 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

Résumé de la discussion

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.

Bobot (l’IA à votre service)
  1. 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 ?
    0
    1. 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
      1
      1. 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
        0
        1. 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 pdf

          Sub 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
          1
          1. 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
            0
            1. 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.
              0
              1. 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
                0
                1. 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"
                  0
                  1. 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
                    0
                    1. 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
                      0
                      1. 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
                        0
                        1. 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
                          0
                          1. ç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
                            0
                            1. 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.
                              0
                              1. 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
                                0
                                1. 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 ...?
                                  0
                                  1. 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
                                    0
                                    1. 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...
                                      0
                                      1. 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
                                        0
                                        1. 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
                                          0
                                          • 1
                                          • 2
                                          • 3