Bonjour,
Dans mon entreprise, il y a 2 versions d'office365, en ligne ou sur poste.
Pour permettre au premier de faire fonctionner les macros, ils utilisent leurs anciennes version d'Excel (2010).
J'ai écrit mes programmes avec la 2ème version et après la livraison, on me signale des pb de bibliothèques manquantes qui bloque complètement Excel.
Vue que cela concerne de nombreux utilisateurs, je ne peux pas leur demander d'aller cocher / décocher les bibliothèques Microsoft
Dans mes fichiers, je dois faire appel à Outlook.
Après recherche sur les sites, il semble que des "bonnes" déclarations d'objets pourraient résoudre mon pb, mais je ne sais pas comment faire
J'ai trouvé la fonction suivante pour envoyer des mails avec Outlook
Puis mon code pour envoyer les mails
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 Function RangetoHTML(rng As Range) Dim fso As Object Dim ts As Object Dim TempFile As String Dim TempWB As Workbook TempFile = Environ$("temp") & "\" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm" 'Copiez la plage et créez un nouveau classeur pour coller les données dedans 'Copy the range and create a new workbook to past the data in rng.Copy Set TempWB = Workbooks.Add(1) With TempWB.Sheets(1) .Cells(1).PasteSpecial Paste:=8 .Cells(1).PasteSpecial xlPasteValues, , False, False .Cells(1).PasteSpecial xlPasteFormats, , False, False .Cells(1).Select Application.CutCopyMode = False On Error Resume Next .DrawingObjects.Visible = True .DrawingObjects.Delete On Error GoTo 0 End With 'Publier la feuille dans un fichier htm With TempWB.PublishObjects.Add( _ SourceType:=xlSourceRange, _ Filename:=TempFile, _ Sheet:=TempWB.Sheets(1).Name, _ Source:=TempWB.Sheets(1).UsedRange.Address, _ HtmlType:=xlHtmlStatic) .Publish (True) End With 'Lire toutes les données du fichier htm dans RangetoHTML Set fso = CreateObject("Scripting.FileSystemObject") Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2) RangetoHTML = ts.readall ts.Close RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _ "align=left x:publishsource=") 'Fermer TempWB TempWB.Close savechanges:=False 'Supprimer le fichier htm que nous avons utilisé dans cette fonction Kill TempFile Set ts = Nothing Set fso = Nothing Set TempWB = Nothing End Function
Est-ce que quelqu'un a une solution à me proposer, svp ? je suis vraiment mal...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84 Sub EnvoiCourriel() 'Mail_Selection_Range_Outlook_Body 'Pour des conseils, voir : http://www.rondebruin.nl/win/winmail/Outlook/tips.htm Dim rng As Range Dim OutApp As Object Dim OutMail As Object Dim Fl As Worksheet, NbLg As Integer, Ht As Integer Dim DestAgt As String, cc As String Application.ScreenUpdating = False If Sheets("Données").Visible = False Then Call DeProtegAll '1 on crée une nouvelle feuille Sheets.Add After:=Sheets("Données") Set Fl = ActiveSheet '2 Coordonnées des destinataires DestAgt = [K1] cc = [K2] Application.DisplayAlerts = True '3 Corps du mail Columns("A:A").ColumnWidth = 100 [A1] = "Bonjour" 'Remplissage du mail [A2] = ... 'nb de lg à prendre dans la feuille à partir de la colonne NbLg = Fl.Range("E" & Application.Rows.Count).End(xlUp).Row '/I\ cas particulier Aspa Fl.Range("A" & NbLg + 2) = "Superviseur" 'Signature Fl.Range("A" & NbLg + 2).Font.Italic = True Fl.Range("A" & NbLg + 3) = Fl.Range("J2") 'nom du superviseur '::: Set rng = Nothing On Error Resume Next 'Seules les cellules visibles de la sélection Set rng = Fl.Range("A1:E" & NbLg + 3) 'plage à copier ' Set rng = Selection.SpecialCells(xlCellTypeVisible) 'Vous pouvez également utiliser une plage fixe si vous le souhaitez 'Set rng = Sheets("YourSheet").Range("D4:D12").SpecialCells(xlCellTypeVisible) On Error GoTo 0 If rng Is Nothing Then MsgBox "La sélection n'est pas une plage ou la feuille est protégée" & _ vbNewLine & "veuillez corriger et réessayer.", vbOKOnly Exit Sub End If With Application .EnableEvents = False .ScreenUpdating = False End With Set OutApp = CreateObject("Outlook.Application") Set OutMail = OutApp.CreateItem(0) On Error Resume Next With OutMail .To = [K1].Value .cc = [K2].Value .BCC = "" .Subject = "SuperV - " & Mid(Sheets("Saisies").Range("I1"), 13) 'Objet .HTMLBody = RangetoHTML(rng) .Display 'Affiche du mail ' .Send 'or use .Display End With On Error GoTo 0 With Application .EnableEvents = True .ScreenUpdating = True End With Application.DisplayAlerts = False Fl.Delete 'on supprime la feuille du message Set OutMail = Nothing Set OutApp = Nothing Exit Sub GestErr: Call MsgBox("Une feuille portant le même nom est présente dans le fichier." _ & vbCrLf & "" _ & vbCrLf & "Veuillez la supprimer et si vous voulez renvoyer le courriel, double-cliquer sur le Nir concerné." _ & vbCrLf & "" _ & vbCrLf & "Merci" _ , vbCritical, "SuperV - Envoi courriel") Application.DisplayAlerts = False ActiveSheet.Delete Application.DisplayAlerts = True End Sub
Partager