Macro Export PDF + Création Dossier

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.

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

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 !

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

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

tu dois avoir un option explicit en début de module. Déclare le as variant.

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

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

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

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

Il y a encore un petit problème, dans l'onglet 1, il y a encore 3 cellules vides après "Pers. 10" et au final, ça essaie de faire une fiche pour ces 3 cellules (voir le fichier).

Par contre, si je supprime le contenu des 3 cellules vides, cela me fait mes fiches uniquement pour les personnes de la liste (5 fiches en tous). Après dans mon utilisation quotidienne, je ne peux pas me permettre de supprimer manuellement le contenu des cases vides, je suis obligé d'en laisser au cas où une nouvelle personne s'ajoute.

J'en demande beaucoup, je suis désolé, mais pourrais-tu m'expliquer rapidement la "logique" à partir du i = 4 aussi s'il te plait.

EDIT : je crois avoir compris pourquoi "i = 4", car la première ligne de la liste est la 4e ?

Toi très peu débrouillard

Sub toto()
With Sheets("Onglet 1")
For i = 4 To .Range("J" & .Rows.Count).End(xlUp).Row
If .Range("J" & i)<>"" then
Sheets("Onglet 3").Range("B2") = .Range("J" & i)
Call PDF
end if
Next i
End With
End Sub

Merci beaucoup !!!

C'est pas que je ne suis pas débrouillard (enfin sur ce coup, je le suis pas, je te l'accorde), c'est que j'y connais pas grand chose en VBA (je t'explique par MP).

Rechercher des sujets similaires à "macro export pdf creation dossier"