IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Pbs avec macro suite changement version [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Février 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Février 2007
    Messages : 163
    Points : 58
    Points
    58
    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 : 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
    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

  2. #2
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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+

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Février 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Février 2007
    Messages : 163
    Points : 58
    Points
    58
    Par défaut
    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.

  4. #4
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    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

  5. #5
    Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Février 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Février 2007
    Messages : 163
    Points : 58
    Points
    58
    Par défaut
    Bonjour,
    La case est déjà cochée, c'est bien ça le problème !

  6. #6
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    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.

  7. #7
    Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Février 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Février 2007
    Messages : 163
    Points : 58
    Points
    58
    Par défaut
    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.

  8. #8
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    bonjour,

    as-tu dé-coché la case "Manquant..."

  9. #9
    Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Février 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Février 2007
    Messages : 163
    Points : 58
    Points
    58
    Par défaut
    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.

  10. #10
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    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+

  11. #11
    Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Février 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Février 2007
    Messages : 163
    Points : 58
    Points
    58
    Par défaut
    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.

  12. #12
    Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Février 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Février 2007
    Messages : 163
    Points : 58
    Points
    58
    Par défaut
    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.


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] plus de clic droit suite à un fichier avec macro
    Par Le Méthanier dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 14/04/2010, 23h49
  2. pb de compilation jsp suite changement de version tomcat ?
    Par pcouas dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 31/10/2008, 10h38
  3. lancement macro suite à changement cellule
    Par dvguy dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/12/2006, 09h45
  4. problème d'état suite à changement de version
    Par moicats dans le forum Access
    Réponses: 4
    Dernier message: 11/04/2006, 17h16
  5. Erreur suite à changement de version
    Par BW7541 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 15
    Dernier message: 31/03/2006, 17h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo