Erreur d'exécution 9 - Fichier en macro complémentaire

Bonjour,

J'aurais besoin de votre aide concernant cette problématique svp. Je récupère un ancien travail

Premièrement, ce code a pour objectif de récupérer les données dans un autre fichier excel qui lui est déclaré en macro complémentaire

 Workbooks(Sheets("Paramètres").Range("M2").Value).IsAddin = True

Initialement, dans la feuille "Paramètres" en cellule ("M2"), il y a déjà eu un premier fichier source, qui lui fonctionne très bien, si la macro complèmentaire reste en "True". Si j'essaie de le changer en "False", que je réouvre mon fichier, le message d'erreur 9 apparaît, mais le fichier source s'ouvre bien.

Dans le débogage, ce qui ressort en anormal, c'est la dernier ligne, à savoir:

Alerte = MsgBox("Le fichier '' " & Sheets("Paramètres").Range("M2").Value & " '' est inexistant." & Chr(13) & "Arrêt de process.", 16, "Alerte")

Je voudrais comprendre ce qui cloche dans ce code. Mon but étant de mettre un autre fichier source

Sachant que dans l'autre fichier source, la disposition ainsi que la nomination des colonnes restera quasi identiques. En particulier pour le Range("O1")

Sub FichierListe()

    Application.ScreenUpdating = False

    On Error GoTo MsgErreurs

    Workbooks.Open Filename:=ThisWorkbook.Path & "\" & Sheets("Paramètres").Range("M2").Value

    Workbooks(Sheets("Paramètres").Range("M2").Value).IsAddin = True

    Application.ScreenUpdating = True

    Set c = Workbooks(Sheets("Paramètres").Range("M2").Value).Worksheets(1).Range("A1:Z1").find(Sheets("Paramètres").Range("O1").Value, LookIn:=xlValues, lookat:=xlWhole)

    If Not c Is Nothing Then

        Col = c.Column

    Else

        Alerte = MsgBox("Le fichier '' " & Sheets("Paramètres").Range("M2").Value & " '' est non conforme." & Chr(13) & "Arrêt de process.", 16, "Alerte")

        Exit Sub

    End If

    Exit Sub

MsgErreurs:

    Alerte = MsgBox("Le fichier '' " & Sheets("Paramètres").Range("M2").Value & " '' est inexistant." & Chr(13) & "Arrêt de process.", 16, "Alerte")

End Sub

J'ai également mis les 2 fichiers sources dans le même dossier, puisqu'il va le récupérer à partir du fichier de base... Et rien à faire...

J'ai essayé de faire un fichier test, mais tout fonctionnait bien .... Je les mets pour info mais pas sûr que cela puisse aider...

Classeur1-1.xlsm = fichier base

Classeur1-1.xlsx= fichier source

M'excusant par avance et vous remerciant pour votre aide.

18classeur1-1.xlsx (8.71 Ko)
11classeur1-1.xlsm (15.96 Ko)

Bonjour,

Je sais que j'ai beaucoup écrit mais ma demande n'est pas longue du tout. Dois-je mettre l'essentiel, puis je donnerai les détails ?

Merci pour votre aide et retour

Bonjour,

Essayez ce code :

Sub FichierListe()

Dim Col As Long
Dim C As Range, CelluleResultat As Range
Dim ValeurCherchee As String, NomDuFichier As String
Dim Alerte As Variant
Dim WbEncours As Workbook, WbBd As Workbook

    On Error GoTo MsgErreurs

    Set WbEncours = ThisWorkbook
    With WbEncours.Sheets("Feuil1")
         NomDuFichier = .Range("B1")
         ValeurCherchee = .Range("D1")
         Set CelluleResultat = .Range("E1")
    End With

    Set WbBd = Workbooks.Open(Filename:=ThisWorkbook.Path & "\" & NomDuFichier)
    With WbBd
         .IsAddin = True
         Set C = .Sheets(1).Range("A1:Z1").Find(ValeurCherchee, LookIn:=xlValues, lookat:=xlWhole)
         If Not C Is Nothing Then
            CelluleResultat = C.Column
         Else
            Alerte = MsgBox("Le fichier '' " & WbBd.Name & " '' est non conforme." & Chr(13) & "Arrêt de process.", 16, "Alerte")
            Exit Sub
         End If
    End With

    Set WbBd = Nothing: Set WbEncours = Nothing
    Set C = Nothing: Set CelluleResultat = Nothing

    Exit Sub

MsgErreurs:

    MsgBox "Le fichier " & NomDuFichier & " est inexistant." & Chr(13) & "Arrêt de process.", 16, "Alerte"
    Set WbBd = Nothing: Set WbEncours = Nothing
    Set C = Nothing: Set CelluleResultat = Nothing

End Sub

Bonjour M.,

Je vous remercie énormément !!!

Votre code marche très bien, je ne connais pas encore très bien les variables mais je m'en doutais qu'il manquait cette partie

Suite à cette correction, lorsque je ferme le fichier, il y a le message d'erreur 1004 (ActivePrinter de l'objet _Application a échoué)

J'avais déclaré des variables et changer quelques lignes et ça fonctionnait bien, c'est sur le 1er ActivePrinter que ça bloque:

On Error Resume Next

Application.ActivePrinter = Nom

Auriez-vous une idée svp ?

Private Sub Workbook_BeforeClose(Cancel As Boolean)

   Dim aa As Byte

Dim Nom As String

For aa = 0 To 9

Nom = Sheets("Paramètres").Range("K2").Value

On Error Resume Next

Application.ActivePrinter = Nom

If ActivePrinter = Nom Then Exit For

Next

    Application.ActivePrinter = Nom

    Sheets("Saisie").Select

    Application.CommandBars("cell").Enabled = True

    Application.CommandBars("Ply").Enabled = True

    Application.CommandBars("Visual Basic").Enabled = True

    Application.CommandBars("Macro").Enabled = True

    Application.EnableEvents = True

    On Error Resume Next

    If Workbooks(Sheets("Paramètres").Range("M2").Value).IsAddin = False Then

        Workbooks(Sheets("Paramètres").Range("M2").Value).IsAddin = True

    End If

    Workbooks(Sheets("Paramètres").Range("M2").Value).Close savechanges:=True

    On Error GoTo 0

    If ThisWorkbook.ReadOnly Then

        ThisWorkbook.Close savechanges:=False

    Else

        ActiveWorkbook.Close savechanges:=True

    End If

Application.StatusBar = ""

Sheets("Utilisateurs").Visible = xlSheetVeryHidden

End Sub

Je vous remercie par avance

A quoi sert la boucle aa ?

Pour être honnête avec vous, j'ai repris la 1ère partie de mon code sur un autre fil

Cela me paraissait logique et ça marchait... Mais si vous me dîtes qu'il n'y a pas d'utilité alors je l'enlève

A tester :

   Application.ActivePrinter = ThisWorkbook.Sheets("Paramètres").Range("K2").Value

Merci pour votre retour

Il y a toujours le même souci( erreur 1004)

Sur le code, j'ai déclaré "Nom As String" puis j'ai mis

Nom=Sheets("Paramètres").Range("K2").Value

Je ne sais pas s'il y a un lien

Est ce que la valeur en K2 correspond à un nom valide d'imprimante ?

Est-ce que le fichier en cours de fermeture contient bien un onglet Paramètres ?

Oui, totalement sur cette partie, ça marche très bien puisque lorsque je mets mon curseur sur "Nom" ou "Application.ActivePrinter",

il y a bien un message qui me donne le bon nom de l'imprimante

La feuille "Paramètres" est bien présente et correctement orthographiée

Voici le lien où j'ai pris le code:

https://www.excel-downloads.com/threads/erreur-1004-la-methode-activeprinter-de-lobjet-_application-...

Je ne peux pas vous répondre.

D'accord, je vous remercie pour votre aide en tout cas :)

Re-Bonjour Eric,

J'ai trouvé ce qui n'allait pas. C'était un problème de réseau, maintenant que c'est réglé. J'ai encore la même erreur 9 qui s'est mise sur quasiment la même partie du code.

Je ne vois aucune variable associée à cette partie du code qui pose problème:

 If Workbooks(Sheets("Paramètres").Range("M2").Value).IsAddin = False Then

        Workbooks(Sheets("Paramètres").Range("M2").Value).IsAddin = True

Faudrait-il donc procéder de la même manière que votre code ?

Merci d'avance pour votre aide

Private Sub Workbook_BeforeClose(Cancel As Boolean)

   Dim aa As Byte

Dim Nom As String

For aa = 0 To 9

Nom = Sheets("Paramètres").Range("K2").Value

On Error Resume Next

Application.ActivePrinter = Nom

If ActivePrinter = Nom Then Exit For

Next

    Application.ActivePrinter = Nom

    Sheets("Saisie").Select

    Application.CommandBars("cell").Enabled = True

    Application.CommandBars("Ply").Enabled = True

    Application.CommandBars("Visual Basic").Enabled = True

    Application.CommandBars("Macro").Enabled = True

    Application.EnableEvents = True

    On Error Resume Next

    If Workbooks(Sheets("Paramètres").Range("M2").Value).IsAddin = False Then

        Workbooks(Sheets("Paramètres").Range("M2").Value).IsAddin = True

    End If

    Workbooks(Sheets("Paramètres").Range("M2").Value).Close savechanges:=True

    On Error GoTo 0

    If ThisWorkbook.ReadOnly Then

        ThisWorkbook.Close savechanges:=False

    Else

        ActiveWorkbook.Close savechanges:=True

    End If

Application.StatusBar = ""

Sheets("Utilisateurs").Visible = xlSheetVeryHidden

End Sub

Dans la fenêtre en haut à gauche l'éditeur VBA, voyez vous votre fichier Classeur1-1.xlsx dans la fenêtre ?

Oui, pourquoi ?

Alors, il vous faut travailler avec une variable instanciée comme dans ma première réponse.

Je ne comprends pas le terme de variable instanciée. Pourriez-vous me l'expliquer svp ?

Sinon, voici ce que j'ai fait et j'ai toujours la même erreur à la même ligne... (je songe sincèrement à une formation):

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim ValeurCherchee As String, NomDuFichier As String

Dim WbEncours As Workbook, WbBd As Workbook

Dim aa As Byte

Dim Nom As String

For aa = 0 To 9

Nom = Sheets("Paramètres").Range("K2").Value

On Error Resume Next

Application.ActivePrinter = Nom

If ActivePrinter = Nom Then Exit For

Next

    Application.ActivePrinter = Nom

    Sheets("Saisie").Select

    Application.CommandBars("cell").Enabled = True

    Application.CommandBars("Ply").Enabled = True

    Application.CommandBars("Visual Basic").Enabled = True

    Application.CommandBars("Macro").Enabled = True

    Application.EnableEvents = True

    On Error Resume Next

Set WbEncours = ThisWorkbook

    With WbEncours.Sheets("Paramètres")

    NomDuFichier = .Range("M2")

    ValeurCherchee = .Range("O1")

End With

    If .IsAddin = False Then

    .IsAddin = True

    End If

    Workbooks(Sheets("Paramètres").Range("M2").Value).Close savechanges:=True

    On Error GoTo 0

    If ThisWorkbook.ReadOnly Then

        ThisWorkbook.Close savechanges:=False

    Else

        ActiveWorkbook.Close savechanges:=True

    End If

Application.StatusBar = ""

Sheets("Utilisateurs").Visible = xlSheetVeryHidden

End Sub

Après avoir déclaré une variable objet avec Dim, Private, Public, il faut lui dire à quoi elle va s'appliquer comme dans cette ligne :

Set WbBd = Workbooks.Open(Filename:=ThisWorkbook.Path & "\" & NomDuFichier)

D'accord, je vais essayer, merci

Donc si je comprends bien, dans mon cas ce qui pose problème, c'est:

If Workbooks(Sheets("Paramètres").Range("M2").Value).IsAddin= False Then

Il faut donc d'abord définir le Workbook comme variable

Dim WbEncours As Workbook

Puis, il faut lui dire sur quoi cette variable va être fixer:

Il me manque que le "If", je ne sais pas comment l'incrémenter

Set WbEncours=(Sheets("Paramètres").Range("M2").Value)
With WbEncours
If WbEncours.IsAddin=False Then
WbEncours.IsAddin=True
End With

C'est ce qui me paraît le + rationnel, non?

Rechercher des sujets similaires à "erreur execution fichier macro complementaire"