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 :

Erreur d'exécution '-2147417848 (80010108): Erreur Automation


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 34
    Par défaut Erreur d'exécution '-2147417848 (80010108): Erreur Automation
    Bonjour,

    En exécutant un code VBA à partir d'une feuille Excel, j'ai bizarrement l'erreur suivante qui se produit:
    Erreur d'exécution '-2147417848 (80010108):
    Erreur Automation

    L'objet invoqué s'est déconnecté de ses clients

    C'est bizarre parce que je ne comprend pas vraiment pourquoi j'ai cette erreur 2 fois sur 10 (en bidouillant de temps en temps dans le code).

    Est ce que quelqu'un peut m'expliquer l'origine exacte de cette erreur et comment la résoudre?

    Si mon code est absolument nécessaire pour trouver une explication, j'essaierai dès lors de vous fournir les changement dans mon code qui font que des fois ça marche et pas d'autres (sans que je ne comprenne pourquoi).

    Merci

  2. #2
    Expert confirmé
    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Par défaut
    Bjr,

    Ce genre de problème peut arriver si tu essayes de travailler sur un objet que tu as précédemment fermé.
    Difficile d'en dire plus en en sachant si peu.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 34
    Par défaut
    Pour simplifier, voici le bout du code qui provoque l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Application.ScreenUpdating = False
    ...
    genererFicheEmargement consultant
     
    Application.ScreenUpdating = False
    et
    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
    'Genérer une fiche d'émargement pour le consultant donné
    '-> Permet également de protéger cette nouvelle feuille générée
    Public Sub genererFicheEmargement(consultant As ConsultantType)
        Dim nomFE As String     'nom de la fiche d'émargement à créer
        Dim i As Integer
        Dim J As Integer
        Dim macro As String 'Code de la procédure évènementielle "Worksheet_Change" à ajouter dans la nouvelle feuille
        Dim X As Integer
        Dim Ws As Worksheet
        
        If (Trim(consultant.initiales) = "") Then
            Exit Sub
        End If
        
    
         'On crée la nouvelle feuille
        nomFE = getNomFicheEmargement(consultant.initiales)
        ModuleCommons.SuppressionFeuille nomFE
        
        Set Ws = Application.Sheets.Add(after:=Worksheets(Worksheets.Count))
        macro = ModuleCommons.recupereContenuMacro(ThisWorkbook, "formFEModele", "Worksheet_Change")
        Ws.Name = nomFE
        
        Ws.Select
        
        With Application.ActiveSheet.Outline
            .AutomaticStyles = False
            .SummaryRow = xlAbove
            .SummaryColumn = xlRight
        End With
        
        
        'On écrit le nom, prénom et initiales du consultant dans la feuille "FE_Modèle"
        formFEModele.Range(ModuleFE.VAL_NOM_HEADER_NAME).Value = consultant.Nom
        formFEModele.Range(ModuleFE.VAL_PRENOM_HEADER_NAME).Value = consultant.Prenom
        formFEModele.Range(ModuleFE.VAL_INITIALES_HEADER_NAME).Value = consultant.initiales
        
        i = formFEModele.Range(ModuleFE.VAL_INITIALES_HEADER_NAME).row
        J = formFEModele.Range(ModuleFE.VAL_INITIALES_HEADER_NAME).Column
        
        
        'On copie tout le modèle dans la nouvelle feuille
        formFEModele.Cells.Copy
        Ws.Select 'Sheets(nomFE).Select
        Application.ActiveSheet.Paste
        Application.ActiveWindow.DisplayGridlines = True
        Application.ActiveSheet.Cells(i, J).Select
        
        'protection de la feuille générée
        ModuleCommons.protectWorksheet (nomFE)
        
        'On ajoute le code de la procédure événementielle "Worksheet_Change"  dans la feuille à générée
        With Application.ThisWorkbook.VBProject.VBComponents(Ws.CodeName).CodeModule
            X = .CountOfLines + 1
            .InsertLines X, macro
        End With   
     
    'ThisWorkbook.VBProject.VBComponents(Ws.CodeName).Name = "nomFE"    
        
    
    End Sub
    Ce sont les ligne en gras qui provoquent des erreurs

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 34
    Par défaut
    AU secours, j'ai encore modifié le code pour le rendre plus simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Application.ScreenUpdating = False
    ...
    addMacroToFEOfConsultant consultant
     
    Application.ScreenUpdating = False
    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
    Public Sub addMacroToFEOfConsultant(consultant As ConsultantType)
        Dim nomFE As String     'nom de la fiche d'émargement à créer
        Dim laMacro As String 'Code de la procédure évènementielle "Worksheet_Change" à ajouter dans la nouvelle feuille
        Dim X As Integer
        Dim vbcomp As VBComponent
            
        laMacro = "Private Sub Worksheet_Change(ByVal Target As Range)" & vbCrLf
        laMacro = laMacro & "Cells.Select" & vbCrLf
        laMacro = laMacro & "End Sub"
        
        nomFE = getNomFicheEmargement(consultant.initiales) 'correspond au nom de l'onglet et surtout aussi au CodeName d'une feuille propre au consultant
        
        'On ajoute le code de la procédure événementielle "Worksheet_Change"
        Set vbcomp = ActiveWorkbook.VBProject.VBComponents(nomFE)
        With vbcomp.CodeModule
            X = .CountOfLines + 1
            .InsertLines X, laMacro    'C'est là que ça ne marche pas
        End With
    
    End Sub



    Et ce qui est bizarre c'est que la macro suivante, assez ressemblante, elle marche bien:
    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
    'Cet exemple permet de créer une nouvelle feuille de calcul et d'y ajouter un bouton.
    'La procédure associée au nouveau bouton supprime le contenu des cellules.
    Sub testCreateFormWithButton()
    Dim Ws As Worksheet
    Dim Obj As OLEObject
    Dim laMacro As String
    Dim X As Integer
    
    Set Ws = Sheets.Add 'Ajoute une nouvelle feuille
    
    
    'Spécifie le contenu de la macro qui sera associée au bouton
    laMacro = "Sub monBouton_Click()" & vbCrLf
    laMacro = laMacro & "Cells.Clear" & vbCrLf
    laMacro = laMacro & "End Sub"
    'laMacro = ModuleCommons.recupereContenuMacro(ThisWorkbook, "ModuleFE", "Worksheet_Change")
    
     ThisWorkbook.VBProject.VBComponents(Ws.CodeName).Name = "newForm"
     Ws.Name = "newForm"
     MsgBox ("Ws.CodeName is " & Ws.CodeName)
    'Ajoute la procédure dans la feuille
    With ThisWorkbook.VBProject.VBComponents("newForm").CodeModule
        X = .CountOfLines + 1
        .InsertLines X, laMacro 'Marche bien
    End With
    
    'ajoute un CommandButton dans la nouvelle feuille
    Set Obj = Ws.OLEObjects.Add("Forms.CommandButton.1")
    With Obj
        .Name = "monBouton" 'renomme le bouton
        .Left = 50 'position horizontale par rapport au bord gauche de la feuille
        .Top = 50 'position verticale par rapport au bord haut de la feuille
        .Width = 150 'largeur
        .Height = 30 'hauteur
        .Object.Caption = "Supprimer données feuille"
    End With
     
    End Sub

    Please Help, je ne sais plus quoi faire

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 34
    Par défaut
    Si ça peut aider, j'ai trouvé des infos éventuellement intéressantes sur ce lien:
    http://support.microsoft.com/kb/270589/fr#top

    Ce qui expliquerait pourquoi ma macro qui marche marche bien (parcequ'effectivement je la lance à partir de VBE)
    Et pourquoi celle qui ne marche pas ne marche pas bien (parcequ'elle est déclenché suite à un click sur un bouton dans mon claseur Excel).


    Cependant je ne sais toujours pas comment résoudre mon problème (en essayant par exemple de forcer l'utilisation de liaisons anticipées), j'ai essayé cela:
    Dans addMacroToFEOfConsultant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    'déclarer le nom complet du type de vbcomp
    Dim vbcomp As VBIDE.VBComponent
    Mais ça ne marche toujours pas.

Discussions similaires

  1. [VI-2007] Erreur d'exécution '-2147417848 (80010108)'
    Par Ariaar dans le forum Visio
    Réponses: 1
    Dernier message: 05/12/2012, 11h53
  2. Excel 2010 : Erreur d'exécution -2147417848(80010108)
    Par AF_2.8 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/12/2011, 19h55
  3. erreur d'exécution 2147417848(80010108)
    Par VELO1222 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/01/2011, 16h50
  4. Erreur d'exécution'-2147417848 (80010108)'
    Par koala94s dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 21/08/2008, 15h16
  5. erreur d'exécution '-2147417848' (80010108)
    Par atoffoli75 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 18/08/2008, 11h09

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