Macro Boucle Cells Range

Hyneryl -  
hyneryl_ramundas Messages postés 21 Date d'inscription   Statut Membre Dernière intervention   -
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

  • 1
  • 2
  • 3
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.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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
  2. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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
  3. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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. Hyneryl
       
      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
  4. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Hyneryl
     
    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
  7. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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
  8. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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
  9. Hyneryl
     
    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
  10. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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
  11. hyneryl_ramundas Messages postés 21 Date d'inscription   Statut Membre Dernière intervention  
     
    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
  12. hyneryl_ramundas Messages postés 21 Date d'inscription   Statut Membre Dernière intervention  
     
    et si je mets une valeur dans la ligne :

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

    ce serait bon ?
    0
  13. hyneryl_ramundas Messages postés 21 Date d'inscription   Statut Membre Dernière intervention  
     
    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
  14. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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
  15. hyneryl_ramundas Messages postés 21 Date d'inscription   Statut Membre Dernière intervention  
     
    Ben l'erreur que j'obtiens est à la ligne 75,

    c'est la ligne suivante :

    MkDir MyPath

    elle est soulignée en jaune.
    0
  16. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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
  17. hyneryl_ramundas Messages postés 21 Date d'inscription   Statut Membre Dernière intervention  
     
    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
  18. hyneryl_ramundas Messages postés 21 Date d'inscription   Statut Membre Dernière intervention  
     
    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
  19. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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
  20. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    touche à rien j'ai oublié un petit quelquechose
    0
  21. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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