Macro Boucle Cells Range

Fermé
Hyneryl - 7 oct. 2009 à 14:39
hyneryl_ramundas Messages postés 21 Date d'inscription jeudi 8 octobre 2009 Statut Membre Dernière intervention 12 octobre 2009 - 12 oct. 2009 à 13:06
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.
A voir également:

44 réponses

Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 293
12 oct. 2009 à 12:47
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
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 293
7 oct. 2009 à 16:19
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
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 293
7 oct. 2009 à 16:19
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
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
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 293
8 oct. 2009 à 11:03
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 293
8 oct. 2009 à 11:26
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
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 293
8 oct. 2009 à 11:31
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
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
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 293
8 oct. 2009 à 13:26
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
hyneryl_ramundas Messages postés 21 Date d'inscription jeudi 8 octobre 2009 Statut Membre Dernière intervention 12 octobre 2009
8 oct. 2009 à 13:56
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
hyneryl_ramundas Messages postés 21 Date d'inscription jeudi 8 octobre 2009 Statut Membre Dernière intervention 12 octobre 2009
8 oct. 2009 à 14:01
et si je mets une valeur dans la ligne :

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

ce serait bon ?
0
hyneryl_ramundas Messages postés 21 Date d'inscription jeudi 8 octobre 2009 Statut Membre Dernière intervention 12 octobre 2009
8 oct. 2009 à 14:04
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
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 293
8 oct. 2009 à 14:13
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
hyneryl_ramundas Messages postés 21 Date d'inscription jeudi 8 octobre 2009 Statut Membre Dernière intervention 12 octobre 2009
8 oct. 2009 à 14:27
Ben l'erreur que j'obtiens est à la ligne 75,

c'est la ligne suivante :

MkDir MyPath

elle est soulignée en jaune.
0
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 293
8 oct. 2009 à 14:43
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
hyneryl_ramundas Messages postés 21 Date d'inscription jeudi 8 octobre 2009 Statut Membre Dernière intervention 12 octobre 2009
8 oct. 2009 à 15:01
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
hyneryl_ramundas Messages postés 21 Date d'inscription jeudi 8 octobre 2009 Statut Membre Dernière intervention 12 octobre 2009
8 oct. 2009 à 16:07
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
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 293
8 oct. 2009 à 16:08
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
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 293
8 oct. 2009 à 16:11
touche à rien j'ai oublié un petit quelquechose
0
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 293
8 oct. 2009 à 16:15
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