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 :

Pb Compatibilité version Outlook et Word


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 631
    Points : 255
    Points
    255
    Par défaut Pb Compatibilité version Outlook et Word
    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
    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
    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
    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
    Est-ce que quelqu'un a une solution à me proposer, svp ? je suis vraiment mal...

  2. #2
    Membre chevronné Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Points : 1 971
    Points
    1 971
    Par défaut
    Bonsoir,

    C'est en effet un souci récurrent lorsqu'on code en early binding, et que les fichiers sont utilisé sur des versions différentes de Windows Office.

    Ci-dessous un tuto de Philippe Tulliez expliquant comment profiter du early binding pour le codage et repasser en suite en mate pour pallier à ce genre de souci.

    https://www.developpez.net/forums/bl...-late-binding/

    Une recherche sur le Web, mate binding Word et Outlook devrait t'apporter le reste de la solution.

    N'hésite pas au besoin,
    Bat,
    MFoxy
    Michaël

    Si mon aide/avis vous a été profitable , n'hésitez pas à cliquer sur , ça fait toujours plaisir...
    _________________________________________________________________________________________________________________

    "Tout le monde est un génie. Mais si on juge un poisson sur sa capacité à grimper à un arbre, il passera sa vie à croire qu'il est stupide..."
    Albert Einstein

  3. #3
    Membre actif
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 631
    Points : 255
    Points
    255
    Par défaut
    Bonjour MFoxy,
    Merci pour ta réponse ; désolée de ne pas avoir répondu plutôt, mais après lecture cela m'a paru un peu compliqué à mettre en oeuvre juste avant les vacances !
    En revenant, je ne suis pas parvenu à traduire pour Excel.
    Par contre j'ai trouvé ce code :
    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
    Sub SendOLMail_LateBound()
        Dim oAPP                       As Object
        Dim oItem                      As Object
        ' need to declare this constant as it has no meaning without
       ' the reference set to the Outlook library
       Const olMailItem               As Long = 0
     
        ' instantiate the Application - cannot use New without a reference
       ' so we must use CreateObject
       Set oAPP = CreateObject("Outlook.Application")
     
        ' #######################################
       ' NOTE: THE REST OF THE CODE IS IDENTICAL
       ' #######################################
     
        ' create a new email
       Set oItem = oAPP.CreateItem(olMailItem)
     
        ' set basic properties and display the email
       With oItem
            .To = "foo@bar.com"
            .Subject = "this is a test"
            .Body = "nothing to see here"
            .Display
        End With
    set oApp=nothing : set oItem=nothing
    End Sub
    Code qui fonctionne bien avec les personnes qui ont office 365 PRO, mais pas avec celles qui ont office 365 WEB, il ne se passe rien. le code se déroule complètement, mais le message ne se crée pas.
    Je me demande s'il ne faut pas préciser qu'Outlook est actif dans Firefox ?

    Si c'est le cas, je ne sais pas faire.

    Merci pour ton aide

Discussions similaires

  1. [Toutes versions] Fusion publipostage entre versions différentes de Word et d' Outlook
    Par Didier Gonard dans le forum Word
    Réponses: 2
    Dernier message: 02/10/2010, 17h03
  2. [Utilisation] CVS et le versionning de fichiers WORD ?
    Par elitost dans le forum CVS
    Réponses: 6
    Dernier message: 09/03/2009, 11h15
  3. Réponses: 1
    Dernier message: 29/03/2007, 21h20
  4. outlook ouvre word au démarrage
    Par flo456 dans le forum Outlook
    Réponses: 1
    Dernier message: 23/02/2007, 09h13
  5. Compatibilité version php-pgsql
    Par adelavarenne dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 07/06/2006, 12h39

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