Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/12/2011, 14h00   #1
Candidat au titre de Membre du Club
 
Homme
Ingénieur
Inscription : février 2007
Messages : 134
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur
Secteur : Industrie

Informations forums :
Inscription : février 2007
Messages : 134
Points : 14
Points : 14
Par défaut Pbs avec macro suite changement version

Bonjour à tous,

Mon entreprise vient de changer de version d'office, passage d'office 2003 à office 2010.
J’avais réalisé un fichier Excel avec des macros, j'ai réussi à régler 80% des problèmes liés au changement de version (enregistrement de mon ancien fichier .xls vers la nouvelle extension .xlsm) malheureusement, la macro la plus importante qui me permet d'envoyer des mails en automatique ne fonction pas (voir code ci-dessous).

J'ai une erreur de compilation : Projet ou bibliothèque introuvable sur la ligne ''Dim olmail as mailitem''

Pouvez-vous m'aider à corriger ce problème.
Merci.

Code :
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
Sub CreationFichierExcelFournisseurPlusMail()
 
'Début de la déclaration des variables
Dim objMaPlage As Range
Dim cell As Range
Dim colCollectionPass As Collection
Dim I As Long
Dim compteur, compteurmail, compteurfichier, compteurtotal As Integer
Dim LastRow, LastRow2 As Long
 
    Dim FichierSource As Workbook
    Dim FichierDestination As Workbook
    Dim Temp As String
    Dim nom As String
    Dim Fichier As String
 
    Dim ol As New Outlook.Application
    Dim olmail As MailItem
    Dim corps As String
 
Dim MaRech As Range
Dim Fournisseur As String
Dim MailFournisseur, MailFournisseurCC As String
 
Dim Reponse As Long
 
'Fin de la déclaration des variables
'--------------------------------------------------------------------------
 
'Début des actions et demande de confirmation avant traitement des informations
Reponse = MsgBox("Voulez vous continuer la création des fichiers et l'envoi par e-mail ?", vbQuestion + vbYesNo, "Demande de confirmation")
If Reponse = vbYes Then
 
 
'Début de l'initialisation des variables
    'Set ol = New Outlook.Application
    'Set olmail = ol.CreateItem(olMailItem)
compteurmail = 0
compteurfichier = 0
compteurtotal = 0
 
Set objMaPlage = Range(Range("B" & Rows.Count).End(xlUp), Cells(5, 2)).SpecialCells(xlCellTypeVisible)
objMaPlage.Select 'inutile, pour visualisation seulement
Set colCollectionPass = New Collection
 On Error Resume Next
For Each cell In objMaPlage
   colCollectionPass.Add cell, CStr(cell)
Next cell
For I = 2 To colCollectionPass.Count 'on élimine le titre en 1...ce qui serait plus lour avec un for each
   'Debug.Print colCollectionPass(I) 'résultat voulu à employer sous la forme désirée.
   'MsgBox (colCollectionPass(I))
Next I
 
 
'Début de la boucle pour faire varier le filtre
For compteur = 1 To colCollectionPass.Count
 
    Set ol = New Outlook.Application 'Test evi
    Set olmail = ol.CreateItem(olMailItem) 'Test evi
 
Selection.AutoFilter Field:=2, Criteria1:=colCollectionPass(compteur)
 
    Sheets("Sheet2").Select
    LastRow2 = Cells(Rows.Count, "A").End(xlUp).Row
    Rows("1:" & LastRow).Select
    Selection.Delete Shift:=xlUp
 
    Sheets("Les données SAP").Select
    LastRow = Cells(Rows.Count, "B").End(xlUp).Row
 
    Range("B5:X" & LastRow).Select
    Selection.Copy
 
    Sheets("Sheet2").Select
    Range("A1").Select
    ActiveSheet.Paste
 
    Columns("A:M").Select
    Columns("A:M").EntireColumn.AutoFit
 
    Range("A1").Select
 
 
 
    Set FichierSource = ActiveWorkbook
    ActiveSheet.Copy                            'Copie de la totalité de l'onglet actif dans le fichier source
 
    Set FichierDestination = ActiveWorkbook
 
'Début des opérations permettant la préparation du fichier excel temporaire avant envois par e-mail
    nom = Range("A2")
    Temp = ThisWorkbook.Path & Application.PathSeparator & "ZEvi Fichier Excel" & Application.PathSeparator & nom & ".xls"             'Attribution du nom du fichier temporaire et mémorisation du chemin complet de ce dernier
 
    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
    End With
 
    FichierDestination.SaveAs Temp                                                              'Sauvegarde (création) du fichier temporaire dans le même répertoire que le fichier d'origine
    Fichier = FichierDestination.Path & Application.PathSeparator & FichierDestination.Name     '
    FichierDestination.Close                                                                    'Fermeture du fichier précédemment sauvegardé
    Application.DisplayAlerts = True
'Fin des opérations permettant la préparation du fichier excel temporaire avant envois par e-mail
'--------------------------------------------------------------------------
 
 
'Test si il existe une addresse e-mail afin d'envoyer ou pas un e-mail
MailFournisseur = ""
MailFournisseurCC = ""
 
Fournisseur = nom
Set MaRech = Sheets("Mail").Range("A2:A65000").Find(Fournisseur, LookIn:=xlValues) 'Adapter le nom de la feuille qui contient le tableau
    If Not MaRech Is Nothing Then   'Si MaRech n'est pas rien (donc référence trouvée)
        MailFournisseur = MaRech.Offset(0, 1)  'Affectation à la variable du contenu de la cellule de droite de celle qui contient la référence
        MailFournisseurCC = MaRech.Offset(0, 2)
    Else
        MailFournisseur = ""
        MailFournisseurCC = ""
    'MsgBox "La référence n'est pas connue" 'Boite de dialogue indiquant que la référence n'existe pas
    End If
 
If MailFournisseur <> "" Then
'Début de l'envois du mail
    'Ecrire ici l'ensemble du texte qui apparaitra dans le mail, vbNewLine permet de mettre en forme le texte et d'aller à la ligne
    compteurmail = compteurmail + 1
    corps = "Bonjour," & vbNewLine & _
            " " & vbNewLine & _
            "Vous trouverez ci-joint un fichier correspondant à nos commandes non livrées ou partiellement livrées." & vbNewLine & _
            "Je vous demanderai de bien vouloir compléter ce tableau en indiquant les dates cohérentes de livraison pour chaque article de chaque commande." & vbNewLine & _
            "D'avance, merci pour votre collaboration," & vbNewLine & _
            "Vous en souhaitant bonne réception," & vbNewLine & _
            " " & vbNewLine & _
            "Cordialement," & vbNewLine & _
            " " & vbNewLine & _
            " " & vbNewLine & _
            " ************************************** " & vbNewLine & _
            "Hello," & vbNewLine & _
            " " & vbNewLine & _
            "Please find enclosed a file with all the open purchase orders, still to be delivered or partially delivered." & vbNewLine & _
            " " & vbNewLine & _
            "Could you please send it back to me with updating the delivery date?" & vbNewLine & _
            " " & vbNewLine & _
            "Wishing getting your reply soon." & vbNewLine & _
            "Thanks a lot," & vbNewLine & _
            " " & vbNewLine & _
            "Best regards," & vbNewLine & _
            " " & vbNewLine
 
    With olmail
       .To = MailFournisseur    'Adresse mail du destinataire
       '.CC = MailFournisseurCC  'Personne à mettre en copie du mail
       .Subject = "Commandes non livrées ou partiellement livrées ..."            'Titre du mail
       .Body = corps                    'Descriptif de l'envoi du mail
       .Attachments.Add Fichier         'Insertion du fichier en pièce jointe, la variable Fichier contenant le chemin complet du fichier à joindre qui dans le cas présent est "Fichier Temporaire.xls"
       .ReturnReceipt                  'Pour avoir un accusé de reception
       .Display                         'Permet l'affichage du mail et évite ensuite d'avoir le message de sécurité lors d'envois d'un e-mail à partir d'excel
    End With
 
    AppActivate Objet_Mail & "Commandes non livrées ou partiellement livrées ... - Message", 0   ' Active Outlook
    Application.Wait (Now + TimeValue("0:00:01"))
    SendKeys "%v", True  ' Envoi du message
    'SendKeys "^{ENTER}"   '"%{V}"              'Envoi du mail par les touches Ctrl + Enter "^{Enter}"
 
Application.ScreenUpdating = True
 
Kill Fichier                            'Effacement du Fichier Temporaire créé lors de cette macro
'Fin de l'envois du mail
'--------------------------------------------------------------------------
Else
compteurfichier = compteurfichier + 1
End If
 
Application.ScreenUpdating = True
 
    Sheets("Les données SAP").Select
 
    Range("B5").Select
    Application.CutCopyMode = False
 
Next compteur
'Fin des opérations pour lister les noms des fournisseurs sans doublons
'--------------------------------------------------------------------------
 
Selection.AutoFilter Field:=2
 
Set objMaPlage = Nothing 'pas obligatoire, mais bonne habitude.
Set colCollectionPass = Nothing
 
 
Else
End If
'Fin des actions et demande de confirmation avant traitement des informations
'--------------------------------------------------------------------------
compteurtotal = compteurmail + compteurfichier
MsgBox (compteurmail & "   E-mail envoyés" & Chr(10) & _
        compteurfichier & "   Fichiers Excel créés" & Chr(10) & _
        "--------------------------------" & Chr(10) & _
        "Soit : " & compteurtotal & "  Fournisseurs traités.")
End Sub
rico63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 16h25   #2
Membre Expert
 
Avatar de Fvandermeulen
 
Frédéric Vandermeulen
Inscription : juillet 2007
Messages : 1 730
Détails du profil
Informations personnelles :
Nom : Frédéric Vandermeulen
Âge : 36
Localisation : Belgique

Informations forums :
Inscription : juillet 2007
Messages : 1 730
Points : 2 131
Points : 2 131
Salut,

A priori ca me fait penser aux références, as-tu bien référencé Microsoft Outlook?

Sinon, la différence que je vois avec mes déclarations quand j'utilise cette méthode est que je précise que c'est Outlook dans MailItem, exemple:

Code :
1
2
3
4
Dim Ol_App As Outlook.Application
Dim Ol_Item As Outlook.MailItem
Set Ol_App = Outlook.Application
Set Ol_Item = Ol_App.CreateItem(olMailItem)
Mais c'est dans un code antérieur à ma version XL2010, donc je ne pense pas que ca soit la cause de ton erreur.

A+
__________________
N'oubliez pas le si votre problème est solutionné.
Fvandermeulen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 09h56   #3
Candidat au titre de Membre du Club
 
Homme
Ingénieur
Inscription : février 2007
Messages : 134
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur
Secteur : Industrie

Informations forums :
Inscription : février 2007
Messages : 134
Points : 14
Points : 14
Bonjour,
Merci pour cette première réponse.

J'ai apporté la modification suivante :
"Dim olmail As Outlook.MailItem" à la place de "Dim olmail As MailItem"

Maintenant j'ai une erreur de compilation à la ligne 59 sur :
"Set olmail = ol.CreateItem(olMailItem)"

Si vous avez une idée, merci pour votre aide.

Bonne journée et bonnes fêtes de fin d'année à tous.

Bonjour à nouveau,

En regardant dans la fenêtre : Références - VBAProject
J'ai remarqué l'information suivante :
"Manquant : Microsoft CDO 1.21 Library"

C'est peut-être la clé de mon problème ?
Merci pour vos réponses.
rico63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 10h11   #4
Membre Expert
 
Avatar de Fvandermeulen
 
Frédéric Vandermeulen
Inscription : juillet 2007
Messages : 1 730
Détails du profil
Informations personnelles :
Nom : Frédéric Vandermeulen
Âge : 36
Localisation : Belgique

Informations forums :
Inscription : juillet 2007
Messages : 1 730
Points : 2 131
Points : 2 131
Citation:
Envoyé par rico63 Voir le message
...
C'est peut-être la clé de mon problème ?
A 99%, oui (c'est d'ailleurs à ça que je faisais allusion en parlant de référencer Outlook)

Tu n'as qu'à cocher et tester
__________________
N'oubliez pas le si votre problème est solutionné.
Fvandermeulen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 10h30   #5
Candidat au titre de Membre du Club
 
Homme
Ingénieur
Inscription : février 2007
Messages : 134
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur
Secteur : Industrie

Informations forums :
Inscription : février 2007
Messages : 134
Points : 14
Points : 14
Bonjour,
La case est déjà cochée, c'est bien ça le problème !
rico63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 10h38   #6
Membre Expert
 
Avatar de Fvandermeulen
 
Frédéric Vandermeulen
Inscription : juillet 2007
Messages : 1 730
Détails du profil
Informations personnelles :
Nom : Frédéric Vandermeulen
Âge : 36
Localisation : Belgique

Informations forums :
Inscription : juillet 2007
Messages : 1 730
Points : 2 131
Points : 2 131
J'imagine que c'est la DLL qui est manquante, donc soit tu la récupère (petite recherche Google) ou essaie d'utiliser Microsoft CDO for Windows 2000 Library à la place.
__________________
N'oubliez pas le si votre problème est solutionné.
Fvandermeulen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 10h48   #7
Candidat au titre de Membre du Club
 
Homme
Ingénieur
Inscription : février 2007
Messages : 134
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur
Secteur : Industrie

Informations forums :
Inscription : février 2007
Messages : 134
Points : 14
Points : 14
Bonjour,

J'ai essayé d'utiliser Microsoft CDO for Windows 2000 Library à la place mais le problème reste entier.
Je vais essayer de contacter mon service informatique pour la DLL.

Merci.
rico63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 11h00   #8
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
bonjour,

as-tu dé-coché la case "Manquant..."
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 12h05   #9
Candidat au titre de Membre du Club
 
Homme
Ingénieur
Inscription : février 2007
Messages : 134
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur
Secteur : Industrie

Informations forums :
Inscription : février 2007
Messages : 134
Points : 14
Points : 14
Bonjour,
Dans un premier temps j'ai retrouvé les DLL manquantes puis j'ai créé à l'aide de "Parcourir ..." le nouveau lien. Cela à eu pour effet d'effacer le ''Manquant ..." et la macro se compile sans erreur.

Suite au message de bbil, j'ai décoché la case à l'origine "Manquant ..." et la bibliothèque Microsoft CDO 1.21 Library a disparue. Cependant la compilation de la macro se fait sans erreur donc la bibliothèque "Microsoft CDO for Windows 2000 Library" fonctionne !

Maintenant j'ai un nouveau problème :
Lorsque j'exécute la macro, le déroulement est correct, la création des mails et des fichiers attachés se fait bien mais les mails ne sont pas envoyés.
Je pense que le problème vient probablement de la ligne de code 161 :
"SendKeys "%v", True ' Envoi du message"

Ça progresse bien, merci pour votre aide.
Merci pour la suite.
rico63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 12h37   #10
Membre Expert
 
Avatar de Fvandermeulen
 
Frédéric Vandermeulen
Inscription : juillet 2007
Messages : 1 730
Détails du profil
Informations personnelles :
Nom : Frédéric Vandermeulen
Âge : 36
Localisation : Belgique

Informations forums :
Inscription : juillet 2007
Messages : 1 730
Points : 2 131
Points : 2 131
Re,

Tu peux augmenter le temps d'attente sur la ligne 160, mais c'est toujours un peu chaud cette méthode.

Moi j'utilise toujours la méthode CDO qui évite le message de confirmation d'envoi donc de devoir utiliser Display et le SendKey, un exemple sur le Post ci-dessous (tu en trouveras d'autre via la recherche sur ce forum):

http://www.developpez.net/forums/d83...eme-send-mail/

A+
__________________
N'oubliez pas le si votre problème est solutionné.
Fvandermeulen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 16h50   #11
Candidat au titre de Membre du Club
 
Homme
Ingénieur
Inscription : février 2007
Messages : 134
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur
Secteur : Industrie

Informations forums :
Inscription : février 2007
Messages : 134
Points : 14
Points : 14
Bonsoir,

J'ai augmenté le temps d'attente sur la ligne 160, mais j'ai toujours le problème.

En ce qui concerne le lien et la méthode CDO, je ne comprends pas les changements que je dois effectuer.
Pouvez-vous SVP m'aider à réaliser les changements nécessaires ?
Merci.
rico63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 18h03   #12
Candidat au titre de Membre du Club
 
Homme
Ingénieur
Inscription : février 2007
Messages : 134
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur
Secteur : Industrie

Informations forums :
Inscription : février 2007
Messages : 134
Points : 14
Points : 14
Bonsoir à tous,

Finalement j'ai trouvé la solution à mon problème.

Pour info : j'ai remplacé,
SendKeys "%v" par 'SendKeys "^{ENTER}"

Tout fonctionne à nouveau parfaitement.
Merci à tous pour votre aide et bonne fêtes de fin d'année.

rico63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h01.


 
 
 
 
Partenaires

Hébergement Web