Bonjour,
On m'a chargé d'automatiser un envoi de mail via VBA.
Dans le fichier joint, feuille "Chiffres", je sélectionne un numéro de semaine en C2 et je double clique sur la même cellule ce qui me donne uniquement les jours de la semaine sélectionnée (vous verrez sur le fichier, c'est très simple / les semaines actuellement présentes sur le fichier sont celles de 15 à 24).
Code Feuil1 :
Jusque là aucun problème, mais c'est lors de la création du mail que mon problème se crée. J'ai chopé 2 fonctions sur Excel-malin pour exporter une plage de données en tant que photo et trouver une lettre de colonne en fonction de son indice (/~\ fonction(3) = "C" /~\) que j'ai essayé de modifier à ma sauce.
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 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Not Application.Intersect(Target, Range("C2")) Is Nothing Then Sheets("Chiffres").Select Range("D2").Select DateBase = Selection.Value RangeX = Selection.Column RangeY = Selection.Row MaCellule = Range("C2").Value Range("D1:RG1").EntireColumn.Hidden = False FIN = Selection.End(xlToRight).Column For i = RangeX To FIN Step 6 For j = 0 To 5 If CInt(Format(Cells(2, i), "ww", vbMonday)) = MaCellule Then Cells(1, j + i).EntireColumn.Hidden = False Else Cells(1, j + i).EntireColumn.Hidden = True End If Next j Next i End If End Sub
Code Module1 :
Code ThisWorkbook (mon main) :
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 Public Function ExporterPlageCommeImage(PlageAExporter As Range) 'par: Excel-Malin.com ( http://excel-malin.com ) 'cacher ou afficher les lignes de grille ActiveWindow.DisplayGridlines = False ' or True 'Copier la PlageAExporter comme image dans le Presse-papier PlageAExporter.CopyPicture Appearance:=xlScreen, Format:=xlPicture 'Créer un nouveau "graphique" temporaire qui servira de support - avec la taille exacte de la plage à exporter 'With Charts.Add ActiveChart.Name = "ExportImage" ActiveChart.Location Where:=xlLocationAutomatic, Name:="Chiffres" ActiveSheet.ChartObjects(1).Left = PlageAExporter.Left ActiveSheet.ChartObjects(1).Top = PlageAExporter.Top ActiveSheet.ChartObjects(1).Width = PlageAExporter.Width ActiveSheet.ChartObjects(1).Height = PlageAExporter.Height '(Left:=PlageAExporter.Left, Top:=PlageAExporter.Top, _ Width:=PlageAExporter.Width, Height:=PlageAExporter.Height) '.Name = "ExportImage" '.Activate 'End With 'Copier l'image dans le graphique, ouvrir le dialog de "Sauvegarder sous", sauvegarde le fichier et supprime le graphique temporaire ActiveChart.Paste fichierimage = ThisWorkbook.Path & "\image.jpg" If fichierimage = False Then Exit Function ActiveSheet.ChartObjects(1).Chart.Export fichierimage ActiveSheet.ChartObjects(1).Delete End Function Public Function NomDeColonne(NumeroDeColonne As Integer) As String 'par: Excel-Malin.com ( http://excel-malin.com ) NomDeColonne = Cells(1, NumeroDeColonne).Address(RowAbsolute:=False, ColumnAbsolute:=False) NomDeColonne = CStr(Left(NomDeColonne, Len(NomDeColonne) - 1)) End Function
Sur mon PC (Excel 2016), tout marche super bien, sur le PC de tous mes collègues, en Excel 2010 ou 2013 ou 2016 tout marche... Mais seulement sur le PC de la personne qui m'a demandé ce projet (qui est sous Excel 2013 - et sachant que son PC rame en ce moment avec un disque qui travaille à 100% en constant), la création du mail bloque au moment de localisation du graphique :
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 Sub Mail() Dim MyOlapp As Object Dim myItem As Object Dim olMailItem Dim myRecipient Dim myAttachments Dim myMail variable = Module1.NomDeColonne(FIN + 1) Call Module1.ExporterPlageCommeImage(Range("A1:" & variable & "28")) EmailSup = "adressemail@oui.fr" 'Là, je créé mon tableau Dim strHTML As String strHTML = "" strHTML = strHTML & "<html><style type='text/css'>body{font-family:'Lato','sans-serif';font-size:13;} #customers {border-radius: 15px;font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif;border-collapse: collapse;" strHTML = strHTML & "width: 60%;} #customers td, #customers th {border: 1px solid #ddd; padding: 8px;} #customers tr:nth-child(even){background-color: #f2f2f2;} #customers tr:hover {background-color: #ddd;} #customers th {padding-top: 12px; padding-bottom: 12px; text-align: center;background-color: #202020;color: white;}</style>" strHTML = strHTML & "<HEAD>" strHTML = strHTML & "<BODY font-family:'sans-serif';>" strHTML = strHTML & "Bonjour Thierry,<BR><BR>" strHTML = strHTML & "Voici un retour.<BR><BR><BR>" strHTML = strHTML & "<img src='" & ThisWorkbook.Path & "\image.jpg'/>" strHTML = strHTML & "<BR><BR>Bien cordialement,<BR><BR>" & Application.UserName strHTML = strHTML & "</BODY></html>" strHTML = strHTML & "" ' Là, j'envoie le mail Set MyOlapp = CreateObject("Outlook.Application") Set myItem = MyOlapp.CreateItem(olMailItem) Set myRecipient = myItem.Recipients.Add(EmailSup) Set myAttachments = myItem.Attachments.Add(ActiveWorkbook.Path & "\" & ActiveWorkbook.Name) myItem.Subject = "Tableau de semaine" myItem.HTMLBody = strHTML myItem.Display Kill ActiveWorkbook.Path & "\image.jpg" End Sub
en faisant soit une erreur 400, soit une erreur '5', argument ou appel de procédure incorrect... Je ne comprends pas...
Code : Sélectionner tout - Visualiser dans une fenêtre à part ActiveChart.Location Where:=xlLocationAutomatic, Name:="Chiffres"
Merci d'avance à tous ceux qui essaieront de m'aider
Louis
Partager