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. 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. chdir te permets de te placer dans le dossier chdir "C:\LeChemin"
      Mkdir "C:\LeChemin" te permets de créée le dossier !!!
      For Each L18 In Selection ça s'est faux !!! ou ne sert à rien

      L18 est cellule selection ne peut-être que des cellules de la même feuille

      dans cette boucle L18 est controlée n fois (n= nbre cellule de la selection)

      comme tu as plusieurs feuilles je pense que tu veux contrôler L18 dans chaque feuille et créer ton pdf si la condition est remplie.

      tu devrais écrire

      ..........

      Dim sh As Variant
      sheets(sh).activate ' tu vois ce qui se passe la feuille est sélectionnée

      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

      ...........
      0
      1. chdir te permets de te placer dans le dossier chdir "C:\LeChemin"
        Mkdir "C:\LeChemin" te permets de créée le dossier !!!
        For Each L18 In Selection ça s'est faux !!! ou ne sert à rien

        L18 est cellule selection ne peut-être que des cellules de la même feuille

        dans cette boucle L18 est controlée n fois (n= nbre cellule de la selection)

        comme tu as plusieurs feuilles je pense que tu veux contrôler L18 dans chaque feuille et créer ton pdf si la condition est remplie.

        tu devrais écrire

        ..........

        Dim sh As Variant
        sheets(sh).activate ' tu vois ce qui se passe la feuille est sélectionnée

        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

        ...........
        0
        1. Bonjour Bidouilleu_R,
          merci pour ton aide,

          Cependant, après la variante, Dim sh As Variant
          j'ai une erreur à la ligne suivante :
          sheets(sh).activate

          Je voulais demander s'il ne fallait pas modifier la ligne selon le nom des feuilles dans ce cas là ?
          Ou bien pour quelle raison, on me met le commentaire suivant "sh est vide".
          Que me faudrait-il mettre pour corriger cette erreur ?

          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
          (ici, ça me met, que le NEXT n'est pas la bonne forme à utiliser ici, car il doit terminer un FOR, et qu'il n'y a plus de FOR après ta correction, je l'ai enlevé donc).

          Merci pour ton aide complémentaire.

          Cordialement,
          HYNERYL
          0
      2. je ne sais pas de quelle forme est ton fichier
        le nombre d'onglets... les feuilles sont elles identiques.
        ce que tu veux exporter est-il toujours sous la même forme?

        sheets(sh).select ' tu vois ce qui se passe la feuille est sélectionnée
        répond aux questions s'il te plait.
        je regarde en faisant un test identique à ce que tu veux (du moins à ce que je comprends)
        0
        1. Je ne sais pas de quelle forme est ton fichier

          J'ai un fichier excel format 97-2003 (réalisé sous excel 2007).
          J'ai une offre commerciale dans une page.
          Cette page comprend une zone d'impression de haut en bas dans les premières colonnes sur 4pages.
          Cependant, dans les colonnes supplémentaires (celles qui suivent la zone d'impression), il ya des formules, des datavalidation avec des dropdown listes que les utilisateurs(commerciaux) peuvent modifier.

          Le mieux serait que je puisse t'envoyer ce fichier sur email, ou bien te le mettre en ligne pour que tu puisses le voir.
          Je peux si tu as une email gmail, te faire partager le fichier.

          le nombre d'onglets... les feuilles sont elles identiques.
          J'ai 18 pages réparties dans 6 langues différentes.
          Chacune des 3 pages de chaque langue est différentes l'une des autres. (3types différents de pages à chaque langue). Cependant, les 3 pages se retrouvent de manière identiques dans chaque version linguistique.

          De plus, en plus des 18pages, j'ai une page Listes, j'ai une page Voc, une page Contact, et une page de tarifs.

          ce que tu veux exporter est-il toujours sous la même forme?
          J'ai un fichier pdf qui doit etre dans la meme forme à chaque valeur du tarif (0,25,...125...275...3000EUR.)
          Il n'y a juste qu'à modifier les coordonnées de la personne ainsi que les quelques dropdown listes avant d'appuyer sur le bouton de la macro.

          Cependant, je voulais peut-etre créer une macro pour un type de pages, une macro commande.

          De plus, comment faire pour que les répertoires de destination de chacun des 122 fichiers pdf se retrouvent à chacun dans un sous-répertoire intitulé par la valeur du transport.

          Je voulais par la suite, à l'autre type de page, réaliser une autre macro légèrement différente où je pourrais juste placer les pdfs cette fois-ci toujours dans ces sous-répertoires correspondant aux transports différents, mais avec une appellation differentes de ceux découlant de la 1ere macro.

          De meme pour la 3eme macro pour le troisième type de pages.

          Cordialement,
          HYNERYL
          0
          1. Sub test2()

            Dim sh As Variant

            ChDir "C:\Documents and Settings\Admin\Desktop\OFFRE"
            For Each sh In Worksheets
            sh.Select

            'if range("L18").value like.... ' note L18 doit être entre crochets
            If sh.Range("L18").Value Like "Transportai" Then

            sh.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 complète plus tard après toute la lecture
            0
            1. pour l'envoi tu peux le faire avec www.ci-joint.fr et tu postes le lien
              ne met pas de données confidentielles tu peux épurer le fichier
              si c'est impossible écris-moi en mp
              click sur mon pseudo et je te répond dans l'après midi.

              normalement le code que je t'ai donné devrais t'aider
              0
              1. Ok, désormais, j'ai un code correct, sans erreur,

                Sauf que désormais, je n'ai aucun effet (aucun pdf de créé au résultat).
                Ni aucun répertoire de créé non plus, j'aimerai un sous-repertoire 0, un autre 25, un autre 50, etc... un sous-repertoire tous les 25.
                A chacun de ces sous-repertoire, devront.

                Je vais crééer une version allégée de l'offre et la placerai en ligne.
                http://www.cijoint.fr/cjlink.php?file=cj200910/cijurUHD8j.xls

                Elle ne comporte ainsi que des données pas trop confidentielles

                J'ai banalysé des tarifs, en les modifiants tous à une valeur unique.
                Vu que j'habite la Lituanie, la feuille Genadijus est entierement en Lituanien, mais bon, j'ai la feuille Voc pour traduire.

                Tu peux voir à améliorer le Module 5 (Sub () Test 2)

                ok ?
                Merci.
                0
                1. j'ai trouvé 2 erreurs
                  la référence à L18 il faut mettre L17

                  ensuite

                  If sh.Range("L17").Value Like "Transportai" Then

                  je ne trouve nul part ce mot, je pense qu'il s'agit d'une faute

                  et que tu recherches "Transport :"
                  dans ce cas la condition deviendrait

                  If sh.Range("L17").Value Like "Transport :" Then
                  ...
                  ...
                  end if
                  0
                  1. Et bien, en fait, non, justement,

                    L18 possede des valeurs grace a une dropdow liste qui reprendra la datavalidation intitulée "Transportai".

                    Je voudrai donc creer une version PDF pour chaque valeur comprise dans la cells Range "Transportai", dont les données se trouvent dans la cellule L18 de chaque feuille d'offre commerciale.

                    Donc non ca n'est pas une erreur selon moi.
                    0
                    1. et si je mets une valeur dans la ligne :

                      If sh.Range("L18").Value Like "0-3000" Then

                      ce serait bon ?
                      0
                      1. L'effet que j'obtiens avec le code suivant est le suivant :

                        Dim sh As Variant

                        ChDir "C:\Documents and Settings\Admin\Desktop\PASIULYMAI"
                        For Each sh In Worksheets
                        sh.Select

                        'if range("L18").value like.... ' note L18 doit être entre crochets
                        If sh.Range("L17").Value Like "Transport" Then

                        sh.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 n'ai qu'une succession des feuilles après vérification de chacune des cellules L18 de chacune.
                        Et le défilet des feuilles s'arrête à la dernière Genadijaus.

                        Mais en résultat je n'ai aucune création de pdf dans le rép. de destination définis.

                        De plus, je voudrai à chaque valeur du transport creer un rép. différent, intitulé justement par la valeur du transport. Et je n'ai rien.
                        0
                        1. j'ai fais le test complet

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


                          End Sub

                          chez moi ce code marche
                          0
                          1. Ben l'erreur que j'obtiens est à la ligne 75,

                            c'est la ligne suivante :

                            MkDir MyPath

                            elle est soulignée en jaune.
                            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
                              
                              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
                              
                              '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
                              Next
                              
                              End Sub


                              une Erreur de ma part

                              si le dernier dossier n'existe pas il est créé
                              test pour moi s'est ok!
                              mais je te l'avais déjà dit... : )
                              0
                              1. Resalut,

                                et merci encore pour la correction, car finalement, ça marche.

                                Cependant, ca n'est pas totalement, ce que je cherchais à faire.

                                Tu m'as fait une version PDF de chacune des feuilles,
                                je voulais faire tout d'abord plusieurs pdf pour par exemple la feuille "FR" feuille,

                                La ça m'a fait un PDF par feuille existante dans le fichier d'une part.

                                D'autre part, je voulais que ça me crée un répertoire "PASIULYMAI"

                                et à chaque valeur du transport, 0, 25, 50, 75, 100 etc... jusqu'à 3000, ben un sous-repertoire
                                dans chacun desquels la macro pourrait à chaque valeur du transport pour la feuille "FR"

                                créer une version PDF de l'offre.

                                Pourrais-tu modifier une nouvelle fois ton code s'il te plait par rapport à ces deux trois dernières erreurs trouvées ?

                                Merci
                                Hyneryl
                                0
                                1. Si je m'exprime mal, je vais essayer d'etre un peu clair.

                                  J'ai une variable : le prix du transport.
                                  Cette derniere est retrouvée dans la case L18 dans la page FR.

                                  J'ai 120 version du prix de transport (De 0 à 3000, chaque 25).

                                  Donc j'aurai 120 sous-répertoires du Répertoire initial "PASIULYMAI".

                                  Chacun de ces sous-repertoire devra porter le nom du chiffre de la valeur du transport.

                                  Chacune des 120 versions PDF de la page FR devra etre créée et rangée dans chacun de ces sous-répertoire.

                                  La case L18 dans la page FR, utilise la DATA VALIDATION intitulée "Transportai".
                                  Les valeurs du transport sont comprises dans la colonne B de la page Listes.
                                  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
                                    
                                    
                                    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
                                    
                                    
                                    '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 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
                                    Next
                                    
                                    End Sub


                                    Cette fois tu as la création du dossier sur le bureau ainsi que les sous dossiers
                                    et les fichiers pdf dans chaque dossier
                                    mais hélas une feuille excel donne une exportation de plusieurs page dans un fichier pdf.
                                    je ne sais même pas s'il est possible de séparer les pages en plusieurs fichiers à moins de passer par une feuille temporaire avant l'exportation.

                                    A+
                                    R
                                    0
                                    1. touche à rien j'ai oublié un petit quelquechose
                                      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
                                        
                                        MyPath = "C:\Documents and Settings\dzzf8r\Desktop\Export"
                                        '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
                                        
                                        '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 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