Macro Export PDF + Création Dossier Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
g
gaetan2812
Membre habitué
Membre habitué
Messages : 54
Inscrit le : 16 mai 2014
Version d'Excel : 2010

Message par gaetan2812 » 27 mai 2014, 09:50

Bonjour à tout le forum !

Je ne m'y connais pas trop en macro, et j'ai réussi à faire celle-là en me basant sur plusieurs recherches internet. Elle me crée bien mon fichier dans "C:\PDF\" sous la forme LeNom - YYYY.MM.DD. Mais j'aimerai quelle crée un sous dossier dans "C:\PDF\" pour chaque "LeNom" et qu'à l'intérieur de ce dossier, je retrouve l'ensemble des fichiers PDF créés pour la même personne, ce qui changerai serait la date dans le nom du fichier.
Sub ExportPDF()

Dim LeNom As String, LaDate As String
LeNom = Range("B7").Value
LaDate = Format(Date, "yyyy.mm.dd")

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\PDF\" & LeNom & " - " & LaDate & ".pdf", _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=False

MsgBox "Le fichier a bien été créé"
End Sub
Comment puis-je faire pour créer automatiquement le sous dossier pour chaque "LeNom" ?

Merci d'avance.
E
EngueEngue
Membre impliqué
Membre impliqué
Messages : 1'493
Inscrit le : 12 décembre 2013
Version d'Excel : 2010

Message par EngueEngue » 27 mai 2014, 10:12

Sub ExportPDF()

Dim LeNom As String, LaDate As String
LeNom = Range("B7").Value
on error resume next
existe = getattr("C:\PDF\" & Lenom & "\")
if existe = "" then
mkdir "C:\PDF\" & Lenom & "\"
end if
LaDate = Format(Date, "yyyy.mm.dd")

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\PDF\" & LeNom & "\" & LeNom & " - " & LaDate & ".pdf", _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=False

MsgBox "Le fichier a bien été créé"
End Sub
g
gaetan2812
Membre habitué
Membre habitué
Messages : 54
Inscrit le : 16 mai 2014
Version d'Excel : 2010

Message par gaetan2812 » 27 mai 2014, 10:22

Merci beaucoup, par contre, si tu me permets, je reprends ton code au cas où des gens en aient besoin car tu as oublié de rajouté "existe As String".
Sub ExportPDF()

Dim LeNom As String, LaDate As String, existe As String
LeNom = Range("B7").Value
on error resume next
existe = getattr("C:\PDF\" & Lenom & "\")
if existe = "" then
mkdir "C:\PDF\" & Lenom & "\"
end if
LaDate = Format(Date, "yyyy.mm.dd")

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\PDF\" & LeNom & "\" & LeNom & " - " & LaDate & ".pdf", _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=False

MsgBox "Le fichier a bien été créé"
End Sub
Je ne le mets pas encore en résolu car je voudrai tester un petit truc, si jamais, je n'y arrive pas, je reposte dessus, sinon je le mets en "résolu".

Encore merci !

EDIT : C'est bon, j'ai réussi. Je te remercie une nouvelle fois. Bonne journée !
E
EngueEngue
Membre impliqué
Membre impliqué
Messages : 1'493
Inscrit le : 12 décembre 2013
Version d'Excel : 2010

Message par EngueEngue » 27 mai 2014, 10:26

String:
Type de données composé d'une séquence de caractères contigus interprétés en tant que caractères et non en tant que valeurs numériques.
Une donnée de type String peut inclure lettres, nombres, espaces et signes de ponctuation.
Le type de données String peut stocker des chaînes de longueur fixe dont la longueur est comprise entre 0 et environ 63 Ko de caractères et des chaînes dynamiques dont la longueur est comprise entre 0 et environ 2 milliards de caractères.
Dans Visual Basic, le signe dollar ($) est le caractère de déclaration du type String.

Variant:
Type de données particulier pouvant contenir des données numériques, des chaînes ou des dates, des types définis par l'utilisateur ainsi que les valeurs spéciales Empty et Null.
Le type de données Variant est doté d'une taille de stockage numérique de 16 octets et peut contenir la même plage de données que le type Decimal, ou d'une taille de stockage de caractère de 22 octets (plus la longueur de la chaîne). Dans ce dernier cas, il peut stocker tout texte.

En effet, aucune différence entre ne pas déclarer un string ou le déclarer en temps de calcul, c'est pourquoi à rien ne sert de déclarer un string dans ce cas là. De plus, getattr renvoit un integer, et non pas un string
g
gaetan2812
Membre habitué
Membre habitué
Messages : 54
Inscrit le : 16 mai 2014
Version d'Excel : 2010

Message par gaetan2812 » 27 mai 2014, 10:29

Je pensais qu'il fallait le déclarer car lorsqu'il n'y est pas, j'avais une erreur qui partait une fois le string déclaré.
E
EngueEngue
Membre impliqué
Membre impliqué
Messages : 1'493
Inscrit le : 12 décembre 2013
Version d'Excel : 2010

Message par EngueEngue » 27 mai 2014, 10:31

tu dois avoir un option explicit en début de module. Déclare le as variant.
g
gaetan2812
Membre habitué
Membre habitué
Messages : 54
Inscrit le : 16 mai 2014
Version d'Excel : 2010

Message par gaetan2812 » 27 mai 2014, 10:40

C'est exactement ça. J'aurai encore besoin de ton aide s'il te plait.

Là, en fait pour créer le fichier PDF pour une personne, je dois sélectionner son nom. Pour une autre, je dois sélectionner un autre nom.

Comment est-ce que je pourrai faire pour que ça me sorte les fiches de tout le monde en appuyant sur un autre bouton ?

EDIT : j'avais une erreur dans le fichier joint, je l'ai remplacé, désolé.
Exemple Tableau Macro.xls
(70.5 Kio) Téléchargé 65 fois
Modifié en dernier par gaetan2812 le 27 mai 2014, 10:45, modifié 1 fois.
E
EngueEngue
Membre impliqué
Membre impliqué
Messages : 1'493
Inscrit le : 12 décembre 2013
Version d'Excel : 2010

Message par EngueEngue » 27 mai 2014, 10:45

Sub toto()
With Sheets("Onglet 1")
For i = 4 To .Range("A" & .Rows.Count).End(xlUp).Row
Sheets("Onglet 3").Range("B2") = .Range("A" & i)
Call PDF
Next i
End With
End Sub
g
gaetan2812
Membre habitué
Membre habitué
Messages : 54
Inscrit le : 16 mai 2014
Version d'Excel : 2010

Message par gaetan2812 » 27 mai 2014, 10:51

Merci, ton code fonctionne mais il me crée une fiche pour toutes les personnes de 1 à 10 alors que j'aimerai n'avoir que les fiches des personnes de la cellule B2 de l'onglet 3.

Après, au niveau tu comment ça marche, là je ne vois pas du tout (pardon de pas trop avoir de connaissances en macro, mais si il y a une semaine on m'aurait dit que je serai capable de créer une macro pour exporter en pdf, je ne l'aurai pas cru).
E
EngueEngue
Membre impliqué
Membre impliqué
Messages : 1'493
Inscrit le : 12 décembre 2013
Version d'Excel : 2010

Message par EngueEngue » 27 mai 2014, 10:53

Sub toto()
With Sheets("Onglet 1")
For i = 4 To .Range("J" & .Rows.Count).End(xlUp).Row
Sheets("Onglet 3").Range("B2") = .Range("J" & i)
Call PDF
Next i
End With
End Sub
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message