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 :

XL 2019 - 2016 Code VBA qui ne s'exécute correctement qu'en debug


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 2
    Par défaut XL 2019 - 2016 Code VBA qui ne s'exécute correctement qu'en debug
    Bonjour,

    N'étant pas spécialiste du développement en vba sous excel, j'ai un traitement qui récupère des données, met en forme celles-ci dans une nouvelle feuille excel puis envoi cette nouvelle feuille en automatique par mail (outlook).

    Ce traitement fonctionne parfaitement en mode debug. Par contre en mode normal il plante avec le message d'erreur suivant :
    Erreur d'exécution "48". erreur de chargement DLL. le debug ci-dessous. La DLL se trouve au bon endroit.

    Quid de cette différence de fonctionnement entre le mode debug et mode normal ? Quelle solution possible ?

    Je joins la partie code liée à cet envoi automatique.

    Merci d'avance pour toutes les bonnes idées;

    Machdeux

    Nom : Capture debug.PNG
Affichages : 188
Taille : 30,1 Ko


    Sub activeOutlook()


    v = Application.Version
    v = Left(v, Len(v) - 2)
    For Each r In Application.VBE.ActiveVBProject.References
    If UCase(r.Name) = "OUTLOOK" Then Exit Sub
    Next
    refadd = "C:\Programmes\Microsoft Office\root\Office" + v + "\MSOUTL.OLB"
    Application.VBE.ActiveVBProject.References.AddFromFile (refadd)


    End Sub

    Sub activeOutlook()


    v = Application.Version
    v = Left(v, Len(v) - 2)
    For Each r In Application.VBE.ActiveVBProject.References
    If UCase(r.Name) = "OUTLOOK" Then Exit Sub
    Next
    refadd = "C:\Programmes\Microsoft Office\root\Office" + v + "\MSOUTL.OLB"
    Application.VBE.ActiveVBProject.References.AddFromFile (refadd)


    End Sub

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour Machdeux

    Oula mais qu'est-ce que c'est que ce code 😱
    Surtout quand je lis "N'étant pas spécialiste du développement en vba sous excel"

    Alors pourquoi vouloir ajouter par code une référence à VBA Project
    🤔

    Pour envoyer un mail, il est totalement inutile voir dangereux d'ajouter une référence il suffit d'utiliser ce qu'appelle le "Late binding"

    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
    Sub SendMail()  ' Déclaration des variables utilisées dans le code
      Dim OutObj As Object, Email As Object
      ' Création d'une instance Outlook pour envoyer un mail
      Set OutObj = CreateObject("Outlook.Application")
      Set Email = OutObj.CreateItem(0)
      ' Avec mon objet Email
      With Email
        .Display  ' Afficher le mail pour afficher la signature
        ' Destinataire(s) du mail
        .To = "emaildestinataire@fai.fr"
        ' Copie du mail
        .CC = "emaildestinataire@fai.fr"
        ' Sujet de l'eMail
        .Subject = "Ceci est le sujet de mon mail"
        ' Corps du mail avec signature à la fin
        .HtmlBody = "Bonjour," & "<BR><BR>" _
        & "Ceci est un exemple<BR><BR>" & .HtmlBody
        ' Joindre un fichier si souhaité
        '.Attachments.Add sPath & sFileName
        ' Envoyer l'email
        '.Send
      End With
      ' Effacer les variable objet
      Set Email = Nothing: Set OutObj = Nothing
    End Sub
    A+

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 2
    Par défaut
    Merci pour ce retour. Je corrige en fait mon message précédent car je suis plutôt dans la case débutant en VBA.

    Ce n'est pas moi qui ai écrit ce code. je reprend juste un développement existant auquel j'ai apporté quelques modifs. Mais cette partie du code n'a pas du tout été touchée.

    Je vais essayer de mettre en application la nouvelle approche.

    A+

    Machdeux

  4. #4
    Membre émérite Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 509
    Par défaut
    Salut,
    Je serais tenté d'ajouter que Philippe Tullies a écrit sur son blog un petit article très intéressant sur le Early et Late binding.
    VBA Excel - La compilation conditionnelle ou comment développer en EarlyBinding et distribuer en late binding

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    J'ajouterai que s'amuser avec les références à l'exécution n'est jamais une bonne idée.

    Donc met cet exemple dans une boite fermée à double tour, et jette la clef.

    VBA permet de faire plein de choses, mais le fait que c'est faisable n'implique pas que c'est correcte.

  6. #6
    Membre émérite
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Par défaut
    Bonjour,

    je pense que la personne qui a écrit ce code était confrontée à un déploiement en milieu instable qui lui interdisait de figer la référence de la bibliothèque Outlook. En effet si tu mets à l'instant t une référence vers une bibliothèque de version N est que le poste de l'utilisateur a une version N+p, tout se passe bien. Mais avec une version N-k ça coince. Pire si tu diffuses avec une version N, qu'un utilisateur "en avance" a une version N+1 et qu'il enregistre, le reste du monde se retrouve dans le cas N-k et ne peut plus utiliser le classeur.

    Pour le plus grand bonheur des foules, les organismes ont maintenant une gestion de parc et de licence Office telles qu'on peut postuler que tout le monde a la même version et s'affranchir de cette gestion compliquée. Tu pourrait donc envisager de virer ce bout de code et ajouter la référence directement dans l'éditeur de projet.

Discussions similaires

  1. [AC-2016] Code VBA qui ne s'exécute pas
    Par willfred dans le forum VBA Access
    Réponses: 1
    Dernier message: 07/05/2019, 16h09
  2. [XL-2010] Code VBA qui ne s'exécute correctement que quand la fenêtre debug est ouverte !
    Par JIM77420 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 15/10/2018, 15h40
  3. code vba qui fonctionnes plus du jour au lendemain
    Par alexkickstand dans le forum VBA Access
    Réponses: 1
    Dernier message: 29/07/2008, 16h41
  4. Code VBA qui supprime une requête
    Par Fredo67 dans le forum VBA Access
    Réponses: 2
    Dernier message: 28/05/2008, 17h47

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