Envoi fichiers via macro VBA
Bonjour à tous,
J'aurais besoin d'aide car je souhaiterais envoyer des fichiers PDF en masse via une macro comme suit en cliquant sur le bouton "Envoyer" :
1. La macro va chercher à l'emplacement en cellule E1 le fichier contenant entre autres le texte de la cellule A3 et envoie le fichier PDF trouvé à l'adresse mail en cellule B3
Par exemple un fichier intitulé "SUP1 blablabla" serait mis en pièce-jointe du mail à destination de SUP1
2. Ainsi de suite pour tous les noms dans la colonne A
J'aimerais également que le mail envoyé automatiquement soit dans une langue présélectionnée en cellule I1 et que le contenu du mail soit selon la langue sélectionnée le texte en cellule B1 de la Feuil1 si l'anglais a été sélectionné, etc.
Merci par avance pour votre aide !
J'ai mis le fichier en pièce-jointe
Bonjour
Quelqu'un saurait-il m'aider avec VBA ?
Merci par avance !
Bonjour
je ne sais pas si je vais pouvoir t'aider dans l'intégralité... mais bon on va essayé de faire avance le problème...
1°) emplacement du dossier... il faudrait que dans ta cellule il y ait le chemin complet... exemple
"C:\users\fred\desktop"'
2) les fichiers pdf à trouver il y a forcement 1 seul fichier par correspondant ? ou il peut y en avoir plusieurs ??
une fois les réponses on pourra essayé d'avancé quelque chose
Fred
Bonjour,
Je veux bien t'aider mais je n'utilise plus outlook, donc je ne pourrai pas tester.
Par contre je peux te guider dans la résolution de ton sujet.
J'aimerais également que le mail envoyé automatiquement soit dans une langue présélectionnée en cellule I1 et que le contenu du mail soit selon la langue sélectionnée le texte en cellule B1 de la Feuil1 si l'anglais a été sélectionné, etc.
Ajoute en I1 de DATA
=EQUIV(H1;Feuil1!A:A;0)cela facilitera la macro.
ensuite
.Body = Replace(Sheets("Feuil1").Range("B" & Range("I1").Value).Value, "XX", Range("A" & i).Value)Quels sont les emplacements possibles (cellule E1) ?1. La macro va chercher à l'emplacement en cellule E1 le fichier contenant entre autres le texte de la cellule A3 et envoie le fichier PDF trouvé à l'adresse mail en cellule B3
Par exemple un fichier intitulé "SUP1 blablabla" serait mis en pièce-jointe du mail à destination de SUP1
2. Ainsi de suite pour tous les noms dans la colonne A
edit : bonjour Fred, on se rejoint dans nos interrogations
Salut Steelson
Fred
Bonjour,
Je veux bien t'aider mais je n'utilise plus outlook, donc je ne pourrai pas tester.
Par contre je peux te guider dans la résolution de ton sujet.
J'aimerais également que le mail envoyé automatiquement soit dans une langue présélectionnée en cellule I1 et que le contenu du mail soit selon la langue sélectionnée le texte en cellule B1 de la Feuil1 si l'anglais a été sélectionné, etc.
Ajoute en I1 de DATA
=EQUIV(H1;Feuil1!A:A;0)cela facilitera la macro.
ensuite
.Body = Replace(Sheets("Feuil1").Range("B" & Range("I1").Value).Value, "XX", Range("A" & i).Value)Quels sont les emplacements possibles (cellule E1) ?1. La macro va chercher à l'emplacement en cellule E1 le fichier contenant entre autres le texte de la cellule A3 et envoie le fichier PDF trouvé à l'adresse mail en cellule B3
Par exemple un fichier intitulé "SUP1 blablabla" serait mis en pièce-jointe du mail à destination de SUP1
2. Ainsi de suite pour tous les noms dans la colonne A
edit : bonjour Fred, on se rejoint dans nos interrogations
Merci Steelson !
Les emplacements possibles seront choisis par les différents utilisateurs de la macro à priori... probablement leur Bureau...
L'idée serait qu'ils viennent copier coller le chemin d'accès aux fichiers PDF (qui pourrait être le même que le fichier Excel contenant la macro) dans la cellule E1
Re bonjour
il manque toujours la réponse à :
2) les fichiers pdf à trouver il y a forcement 1 seul fichier par correspondant ? ou il peut y en avoir plusieurs ??
et es-tu prêt, ou est-ce que cela sera possible d'utiliser Outlook comme client de messagerie ?
Fred
Essaie ceci ...
Sub Envoyer_Mail_Outlook()
Dim myapp As Object, myItem As Object, i As Long
Dim Varcellvalue As String, nf As String, repertoire As String, pj As Variant, pj2 As String
Set myapp = CreateObject("Outlook.Application")
repertoire = Range("E1")
For i = 6 To 1000
With Application.FileDialog(msoFileDialogFilePicker)
.Title = "Le tite de la fenêtre:"
.InitialFileName = "*" & Range("A" & i) & "*.pdf"
.InitialView = msoFileDialogViewProperties
.Show
pj = .SelectedItems(1)
End With
Set myItem = myapp.CreateItem(0) '0 = mailItem
Varcellvalue = Range("B" & i) & " - " & Range("C" & i)
nf = Dir(repertoire & Varcellvalue & ".pdf") 'on vérifie si fichier existe
If nf <> "" Then 'si fichier existe
With myItem
.Subject = Range("A" & i) & "facture"
.To = Range("B" & i)
.Body = Replace(Sheets("Feuil1").Range("B" & Range("I1").Value).Value, "XX", Range("A" & i).Value)
.Attachments.Add pj '& ".pdf"
.Display
.Send
End With
End If
Next i
End SubEssaie ceci ...
Sub Envoyer_Mail_Outlook() Dim myapp As Object, myItem As Object, i As Long Dim Varcellvalue As String, nf As String, repertoire As String, pj As Variant, pj2 As String Set myapp = CreateObject("Outlook.Application") repertoire = Range("E1") For i = 6 To 1000 With Application.FileDialog(msoFileDialogFilePicker) .Title = "Le tite de la fenêtre:" .InitialFileName = "*" & Range("A" & i) & "*.pdf" .InitialView = msoFileDialogViewProperties .Show pj = .SelectedItems(1) End With Set myItem = myapp.CreateItem(0) '0 = mailItem Varcellvalue = Range("B" & i) & " - " & Range("C" & i) nf = Dir(repertoire & Varcellvalue & ".pdf") 'on vérifie si fichier existe If nf <> "" Then 'si fichier existe With myItem .Subject = Range("A" & i) & "facture" .To = Range("B" & i) .Body = Replace(Sheets("Feuil1").Range("B" & Range("I1").Value).Value, "XX", Range("A" & i).Value) .Attachments.Add pj '& ".pdf" .Display .Send End With End If Next i End Sub
Voici ce qui s'affiche lorsque je lance la macro :
Ce que je souhaiterais c'est que la macro aille chercher le mot "SUP1" dans une liste de fichiers PDF puis joigne le fichier contenant ce mot à un mail qui s'enverrait automatiquement à l'adresse mail associée à SUP1, idem pour "SUP2", etc.
Encore merci pour ton aide
D'abord, mets ta macro en adéquation avec ton fichier ....
Pourquoi
For i = 6 To 1000???????????
alors que les données vont de la ligne 3 à 5 !
mais cela ne doit pas indiquer **.pdf s'il y avait quelque chose en colonne A !
Autre version
Ajoute cette fonction
Function PieceJointe(critere As String, extension As String)
Dim MonRepertoire$, Repertoire As FileDialog, monFichier$
PieceJointe = ""
Set Repertoire = Application.FileDialog(msoFileDialogFolderPicker)
Application.FileDialog(msoFileDialogFolderPicker).Title = "Choix du répertoire de stockage des fichiers générés"
Repertoire.Show
If Repertoire.SelectedItems.Count = 0 Then Exit Function
MonRepertoire = Repertoire.SelectedItems(1) & "\"
monFichier = Dir(MonRepertoire & "*." & extension)
Do While monFichier <> "" And Not PieceJointe Like "*" & critere & "*"
PieceJointe = (MonRepertoire & monFichier)
monFichier = Dir
Loop
End Functionet modifie le code comme suit :
Sub Envoyer_Mail_Outlook()
Dim myapp As Object, myItem As Object, i As Long
Dim Varcellvalue As String, nf As String, repertoire As String, pj As Variant, pj2 As String
Set myapp = CreateObject("Outlook.Application")
repertoire = Range("E1")
For i = 3 To 5
pj = PieceJointe(Range("A" & i).value, "pdf")
Set myItem = myapp.CreateItem(0) '0 = mailItem
Varcellvalue = Range("B" & i) & " - " & Range("C" & i)
nf = Dir(repertoire & Varcellvalue & ".pdf") 'on vérifie si fichier existe
If nf <> "" Then 'si fichier existe
With myItem
.Subject = Range("A" & i) & "facture"
.To = Range("B" & i)
.Body = Replace(Sheets("Feuil1").Range("B" & Range("I1").Value).Value, "XX", Range("A" & i).Value)
.Attachments.Add pj '& ".pdf"
.Display
.Send
End With
End If
Next i
End SubAutre version ... à tester et mettre au point car je ne travaille plus avec outlook.
Sub Envoyer_Mail_Outlook()
Dim myapp As Object, myItem As Object, i As Long
Dim Varcellvalue As String, pj As Variant
Dim MonRepertoire$, Repertoire As FileDialog, monFichier$
PieceJointe = ""
Set Repertoire = Application.FileDialog(msoFileDialogFolderPicker)
Application.FileDialog(msoFileDialogFolderPicker).Title = "Choix du répertoire de stockage des fichiers générés"
Repertoire.Show
If Repertoire.SelectedItems.Count = 0 Then Exit sub
MonRepertoire = Repertoire.SelectedItems(1) & "\"
Set myapp = CreateObject("Outlook.Application")
For i = 3 To 5
monFichier = Dir(MonRepertoire & "*.pdf")
Do While monFichier <> "" And Not pj Like "*" & critere & "*"
pj = (MonRepertoire & monFichier)
monFichier = Dir
Loop
If Not pj Like "*" & critere & "*" Then
msgbox "ligne " & i & " fichier pas trouvé !"
else
Set myItem = myapp.CreateItem(0) '0 = mailItem
Varcellvalue = Range("B" & i) & " - " & Range("C" & i)
With myItem
.Subject = Range("A" & i) & "facture"
.To = Range("B" & i)
.Body = Replace(Sheets("Feuil1").Range("B" & Range("I1").Value).Value, "XX", Range("A" & i).Value)
.Attachments.Add pj '& ".pdf"
.Display
.Send
End With
end if
Next i
End SubAutre version ... à tester et mettre au point car je ne travaille plus avec outlook.
Sub Envoyer_Mail_Outlook() Dim myapp As Object, myItem As Object, i As Long Dim Varcellvalue As String, pj As Variant Dim MonRepertoire$, Repertoire As FileDialog, monFichier$ PieceJointe = "" Set Repertoire = Application.FileDialog(msoFileDialogFolderPicker) Application.FileDialog(msoFileDialogFolderPicker).Title = "Choix du répertoire de stockage des fichiers générés" Repertoire.Show If Repertoire.SelectedItems.Count = 0 Then Exit sub MonRepertoire = Repertoire.SelectedItems(1) & "\" Set myapp = CreateObject("Outlook.Application") For i = 3 To 5 monFichier = Dir(MonRepertoire & "*.pdf") Do While monFichier <> "" And Not pj Like "*" & critere & "*" pj = (MonRepertoire & monFichier) monFichier = Dir Loop If Not pj Like "*" & critere & "*" Then msgbox "ligne " & i & " fichier pas trouvé !" else Set myItem = myapp.CreateItem(0) '0 = mailItem Varcellvalue = Range("B" & i) & " - " & Range("C" & i) With myItem .Subject = Range("A" & i) & "facture" .To = Range("B" & i) .Body = Replace(Sheets("Feuil1").Range("B" & Range("I1").Value).Value, "XX", Range("A" & i).Value) .Attachments.Add pj '& ".pdf" .Display .Send End With end if Next i End Sub
Merci Steelson !
Le message d'erreur suivant s'affiche pour ce code-ci :
Saurais-tu pourquoi ?
parce que pas défini, supprime cette ligne
j'ai testé à partir de ce fichier ... mais pour la transposition à l'aveugle, pas facile !
parce que pas défini, supprime cette ligne
j'ai testé à partir de ce fichier ... mais pour la transposition à l'aveugle, pas facile !
Désolée je ne vois pas ce que je dois faire...
Voici mon fichier jusqu'à maintenant avec le code que tu m'as envoyé - je souhaiterais que la macro aille chercher les fichiers PDF via le chemin entré en cellule E1
Pour l'instant la macro s'arrête ici :
La macro te demande le dossier que tu choisis dans ton PC .... car dans ta zone tu as mis bureau et il ne le reconnait pas !
Bonjour...
en revient donc toujours a ma première remarque d'hier....
1°) emplacement du dossier... il faudrait que dans ta cellule il y ait le chemin complet... exemple
"C:\users\fred\desktop"'
on pourrais éventuellement faire une macro qu'il faut lancer une première fois avant de lancer la macro Steelson qui enregistre le chemin dans la cellule...
en fait extraire du code actuel la partie qui demande de choisir le dossier en enregistrer le chemin dans la cellule E....
Fred
Puisqu'en E1 il y a maintenant un chemin complet ...
Sub Envoyer_Mail_Outlook()
Dim myapp As Object, myItem As Object, i As Long
Dim Varcellvalue As String, pj As Variant
Dim MonRepertoire$, monFichier$
MonRepertoire = Range("E1") & "\"
Set myapp = CreateObject("Outlook.Application")
For i = 3 To 5
monFichier = Dir(MonRepertoire & "*.pdf")
Do While monFichier <> "" And Not pj Like "*" & critere & "*"
pj = (MonRepertoire & monFichier)
monFichier = Dir
Loop
If Not pj Like "*" & critere & "*" Then
MsgBox "ligne " & i & " fichier pas trouvé !"
Else
Set myItem = myapp.CreateItem(0) '0 = mailItem
With myItem
.Subject = Range("A" & i) & "facture"
.To = Range("B" & i)
.Body = Replace(Sheets("Feuil1").Range("B" & Range("I1").Value).Value, "XX", Range("A" & i).Value)
.Attachments.Add pj '& ".pdf"
.Display
.Send
End With
End If
Next i
End Sub