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 :

Automation error - The object invoked has disconnected from its clients


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur STC, systèmes de supervision
    Inscrit en
    Juin 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur STC, systèmes de supervision
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 58
    Par défaut Automation error - The object invoked has disconnected from its clients
    Bonjour à tous,

    J'ai un petit problème persistant lors de l'éxecution d'une macro...
    Voici la situation :

    J'ai un ensemble de macros qui vont ouvrir un (autre) classeur et vont travailler dedans.
    A la fin, la macro principale est sensée fermer ce classeur en le sauvegardant...

    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
    Public MonClasseurCible As Workbook
     
    Sub Main_Sub()
     
     
        Call Ouvrir_Classeur_Cible
     
        Set MonClasseurCible = Application.ActiveWorkbook
     
        Main_Form.Show   ' tout le code de modification se trouve dans Private Sub UserForm_Activate()
                         ' Permet de garder une pop-up à l'ecran qui décrit les modifs au fur et à mesure
     
        Set MonClasseurCible = Nothing
        ActiveWorkbook.Close True
     
    End Sub
    Mais, arrivé ligne 14, j'obtient une Pop-up avec ce message :

    Run-time '-2147417848(80010108)'

    Automation error
    The object invoked has disconnected from its clients
    Puis Excel bugg et l'histoire se termine par un redémarrage d'Excel (si je ne clic pas sur "Restart the program" ; dans quel cas c'est un redémarrage complet du PC ^^)

    Il faut savoir que j'ai modifié ma façon d'activer le classeur cible (avant quoi çà marchait) car je pensais que çà serait plus propre ; je vous laisse juger pas vous même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public MonClasseurCible As String
    'est devenu
    Public MonClasseurCible As Workbook
     
    Workbooks(MonClasseurCible).Activate
    'est devenu
    MonClasseurCible.Activate
     
    Workbooks(MonClasseurCible).Close True
    'est devenu
    MonClasseurCible.Close True
    'puis enfin
    ActiveWorkbook.Close True

    Si quelqu'un avait une solution à mon problème, je suis preneur! =)

  2. #2
    Expert éminent


    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
    Par défaut
    Bonjour,


    On peu voir le code de ta procédure "OuvrirClasseurCible"..


    Dans la plus part des cas c'est une il ne faut pas utiliser ActiveWorkBook..

    pour fermer ton classeur en le sauvant tu dois faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonClasseurCible.close true

  3. #3
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    C'est l'obligation de travailler avec les variables objets au lieu de l'Activeworkbbok, activemachin

    Si tu montre le code de ta procédure
    Ouvrir_Classeur_Cible

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur STC, systèmes de supervision
    Inscrit en
    Juin 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur STC, systèmes de supervision
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 58
    Par défaut
    Bonjour,

    Voici la macro :

    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
    Sub Ouvrir_Classeur_Cible()
     
        'Dim MonFichier
        'Dim MonFichier_Cplt
        'Dim MonClasseurCible
     
        With Application.FileDialog(msoFileDialogOpen)
     
            .AllowMultiSelect = False
            .Title = "Fichier à impacter..."
            .Filters.Clear
            .Filters.Add "Excel files", "*.xls*"
            .InitialFileName = ""
            .InitialView = msoFileDialogViewList
            .Show
            On Error Resume Next
            If Err.Number > 0 Or .SelectedItems.Count = 0 Then
                Annuler = True
                Exit Sub
            Else
                Annuler = False
                MyName = Thisworkbook.Name
                MonFichier_Cplt = .SelectedItems(1)
                Workbooks.Open (MonFichier_Cplt)
            End If
     
        End With
     
    End Sub

  5. #5
    Expert éminent


    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
    Par défaut
    tu peu modifier ta ligne d'ouverture du classeur en affectant directement ta variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Set MonClasseurCible  = Workbooks.Open (MonFichier_Cplt)

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Ou en utilisant une fonction sans la variable globale

    Exemple
    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
    Option Explicit
     
    Private Function ClasseurCible() As Workbook
     
    With Application.FileDialog(msoFileDialogOpen)
        .AllowMultiSelect = False
        .Title = "Fichier à impacter..."
        .Filters.Clear
        .Filters.Add "Excel files", "*.xls*"
        .InitialFileName = ""
        .InitialView = msoFileDialogViewList
        .Show
        If .SelectedItems.Count > 0 Then Set ClasseurCible = Workbooks.Open(.SelectedItems(1))
    End With
    End Function
     
     
    Sub Main_Sub()
    Dim MonClasseurCible As Workbook
     
    Set MonClasseurCible = ClasseurCible()
    If Not MonClasseurCible Is Nothing Then
     
        Main_Form.Show                               ' tout le code de modification se trouve dans Private Sub UserForm_Activate()
        ' Permet de garder une pop-up à l'ecran qui décrit les modifs au fur et à mesure
        MonClasseurCible.Close True
        Set MonClasseurCible = Nothing
    End If
    End Sub

  7. #7
    Membre confirmé
    Homme Profil pro
    Ingénieur STC, systèmes de supervision
    Inscrit en
    Juin 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur STC, systèmes de supervision
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 58
    Par défaut
    Je viens de remarquer que le problème venait certainement de mon Main_Form :
    Lorsque je fais mes tests (en mettant la ligne Main_Form.show en commentaire) le classeur s'ouvre et se referme sans problème...
    Main_Form est composé uniquement d'un champ de texte (Label1) et voici le code derrière :

    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
    Private Sub UserForm_Activate()
     
        Label1.Caption = "Modification en cours :" & vbCrLf & vbCrLf & _
        MonClasseurCible.Name & vbCrLf & vbCrLf & vbCrLf & vbCrLf & vbCrLf & _
        "Veuillez patienter."
     
     
        For i = 1 To MonClasseurCible.Sheets.Count
     
            Sheets(i).Select
     
            Label1.Caption = "Modification en cours :" & vbCrLf & vbCrLf & _
            MonClasseurCible.Name & vbCrLf & "Feuille : " & i & "/" & _
            MonClasseurCible.Sheets.Count & vbCrLf & vbCrLf & vbCrLf & "Veuillez patienter."
     
            Me.Repaint
     
            Call Sub1
            Call Sub2
            Call Sub3
     
        Next i
     
        Label1.Caption = "Modification en cours :" & vbCrLf & vbCrLf & _
        MonClasseurCible.Name & vbCrLf & "Mise à jours des modules du classeur" & _
        vbCrLf & vbCrLf & vbCrLf & "Veuillez patienter."
     
        Me.Repaint
     
        Call Sub4
     
     
        Main_Form.Hide
     
    End Sub
    Déjà merci pour vos débuts de solutions ; je vais les appliquer tout de suite...

Discussions similaires

  1. Réponses: 3
    Dernier message: 10/05/2010, 11h08
  2. Réponses: 0
    Dernier message: 22/02/2010, 10h36
  3. Problème: Error loading object from file
    Par foducool dans le forum iReport
    Réponses: 1
    Dernier message: 08/12/2008, 14h07
  4. Réponses: 2
    Dernier message: 31/01/2008, 11h58

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