Close erreur 91

Bonjour. J'ai de nouveau besoin de votre aide

Je bloque sur la fermeture d'un fichier.

Je ne peux malheureusement pas mettre le fichier car il contient certain données confidentielles. Voici une partie du code

Cette routine s'active a partir d'un bouton dans un fichier excel

'Création nouveau document
    Dim wbNouveauFichier As Workbook
    Set wbNouveauFichier = Workbooks.Add(xlWBATWorksheet) ' nouveau fichier qui aura des macro

'Code...

' Sauvegarder & Fermer le nouveau fichier
    wbNouveauFichier.Save                ' éventuellement a retirer si j'arrive a fermer le fichier 
                                          'avec savechanges:=true
    wbNouveauFichier.Activate            ' le wbNouveaufichier.close ne fonctionne pas alors  j'essai autre chose
    MsgBox ActiveWorkbook.Name           ' m'indique  que c'est bien le bon workbook a fermer
    ActiveWorkbook.Close                  ' erreur 91 :/ 

Est-ce que m'a façon de créer le fichier est la bonne? (workbooks.add)

Bonjour Joh

Vous pouvez essayer tout simplement de remplacer

' Sauvegarder & Fermer le nouveau fichier
    wbNouveauFichier.Save                ' éventuellement a retirer si j'arrive a fermer le fichier 
                                          'avec savechanges:=true
    wbNouveauFichier.Activate            ' le wbNouveaufichier.close ne fonctionne pas alors  j'essai autre chose
    MsgBox ActiveWorkbook.Name           ' m'indique  que c'est bien le bon workbook a fermer
    ActiveWorkbook.Close                  ' erreur 91 :/ 

par

wbNouveauFichier.Close SaveChanges:=True

A+

Bonjour Bruno.
Merci d'avoir prit le temps de me répondre
J'ai essayé et j'ai le même code d'erreur. Pourtant ça fonctionne bien dans d'autre macro. C'est la première fois que je crée un fichier. c'est pour ça que je me demande si cela à un lien. Je suis rendu à l'étape de retirer des sections de code pour voir si cela a une incidence sur le .Close .

Voici le reste du code si cela peut aider
Sub CreerNouveauFichier(numxxx As String, chemin As String)

    Dim UserformName As String
    Dim UserFormCopie As Object
    Dim UserformCheminFRM As String
    Dim UserformCheminFRX As String
    Dim ModuleName As String
    Dim ModuleCopie As Object
    Dim ModuleChemin As String
    Dim wbNouveauFichier As Workbook
    Dim WsSuiviNouveau As Worksheet
    Dim WsGeneralnouveau As Worksheet
    Dim NouveauFichierName As String
    Dim wbFichierSource As Workbook
    Dim WsSuiviSource As Worksheet
    Dim WsGeneralSource As Worksheet
    Dim FichierSourceName As String

    'Optimiser la vitesse d'execution, (ne pas activer l'affichage à chaque routine)
    Application.ScreenUpdating = False

    'Identifier les données sources
    Set wbFichierSource = ThisWorkbook
        FichierSourceName = ThisWorkbook.Name

    'Identifier les feuilles à exporter
    Set WsSuiviSource = wbFichierSource.Sheets("Suivi")
    Set WsGeneralSource = wbFichierSource.Sheets("General")

    'Identifier le userform et le module à exporter
    UserformName = "UserForm2"
    ModuleName = "Module_XXX"

    'Indiquer à quel endroit sera Exporter/importer le Userform#2 et le module Suivi
    UserformCheminFRM = chemin & "\" & UserformName & ".frm"
    UserformCheminFRX = chemin & "\" & UserformName & ".frx"   'par défaut lors de l'exportation d'un userform un. FRX est créé
    ModuleChemin = chemin & "\" & ModuleName & ".bas"

    ' Récupérer le UserForm et le module  par son nom
    Set UserFormCopie = wbFichierSource.VBProject.VBComponents(UserformName)
    Set ModuleCopie = wbFichierSource.VBProject.VBComponents(ModuleName)

    ' Vérifier si le répertoire existe
    If Dir(chemin, vbDirectory) = "" Then
        ' Le répertoire n'existe pas, donc le créer
        MkDir chemin
    Else
        ' Le répertoire existe déjà
        'a voir plus tard s'il y a quelque chose à faire========
    End If

    ' Exporter le UserForm dans un fichier .frm (par défaut lors de l'exportation d'un userform un. FRX est créé)
    UserFormCopie.Export UserformCheminFRM

    ' Exporter le module dans un fichier .mas
    ModuleCopie.Export ModuleChemin

    ' Libérez la mémoire en définissant l'objet UserForm sur Nothing
    Set UserFormCopie = Nothing
    Set ModuleCopie = Nothing

    ' Créer un nouveau fichier
    Set wbNouveauFichier = Workbooks.Add(xlWBATWorksheet)

    'Nom du nouveau fichier
    NouveauFichierName = numxxx & "_ZZZ.xlsm"

    ' Copier les onglets "Suivi" et "General" dans le nouveau fichier
    WsSuiviSource.Copy After:=wbNouveauFichier.Sheets(1)
    WsGeneralSource.Copy After:=wbNouveauFichier.Sheets(1)

    'supprimer la feuille #1 qui est par défaut dans tous les nouveaux fichiers excel.
    Application.DisplayAlerts = False
    wbNouveauFichier.Sheets("Feuil1").Delete
    Application.DisplayAlerts = True

    ' Charger le fichier .frm (form) & .bas (module) dans un nouvel objet VBComponent
    Set UserFormCopie = wbNouveauFichier.VBProject.VBComponents.Import(UserformCheminFRM)
    Set ModuleCopie = wbNouveauFichier.VBProject.VBComponents.Import(ModuleChemin)

    ' Renommer le UserForm et le module importé
    UserFormCopie.Name = UserformName
    ModuleCopie.Name = ModuleName

    'Insérer ce code dans le module ThisWorkbook du nouveau fichier
    With wbNouveauFichier.VBProject.VBComponents("Thisworkbook").CodeModule
        .InsertLines 1, "Private Sub Workbook_BeforeClose(Cancel As Boolean)"
        .InsertLines 2, "     ToDoZZZZZ"
        .InsertLines 3, "End Sub"
    End With

    ' Sauvegarder le nouveau fichier avec le nom de fichier créer plus haut==============il est possible de faire la sauvegarde plus tard
    wbNouveauFichier.SaveAs chemin & "\" & NouveauFichierName, xlOpenXMLWorkbookMacroEnabled

    'supprimer les liens vers l'ancien fichier dans les formules &
    ' Déclarez la variable Ws comme une feuille de calcul
     Dim ws As Worksheet

    For Each ws In wbNouveauFichier.Sheets
        ws.UsedRange.Replace What:="'[" & FichierSourceName & "]Suivi'!", Replacement:="Suivi!"
        ws.UsedRange.Replace What:="'[" & FichierSourceName & "]]General'!", Replacement:="General!"

    Next

    'Créer les boutons sur la feuille general
    ' Spécifier la feuille Excel sur laquelle on veut créer les boutons
    Set WsGeneralnouveau = wbNouveauFichier.Sheets("General")

    'Activer la feuille
    WsGeneralnouveau.Activate

    Dim btnQualif As Button
    Dim btnTermine As Button

    'Création du bouton Qualif
    Set btnQualif = ActiveSheet.Buttons.Add(750, 25, 150, 50)
    With btnQualif
       .Caption = "ZZZZZZZZ"
       .Name = "MonBoutonQualif"
       .OnAction = "'" & wbNouveauFichier.Name & "'!Qualification"
    End With

    'Création du bouton Suivi
    Set btnSuivi = ActiveSheet.Buttons.Add(750, 100, 150, 50)
    With btnSuivi
       .Caption = "YYYYYYYY"
       .Name = "MonBoutonSuivi"
       .OnAction = "'" & wbNouveauFichier.Name & "'!Suivi"
   End With

'-Problematique fichier ne ferme pas . Il sauvegarde, s,active, mais ne ferme pas----------------------------

    wbNouveauFichier.Save                ' éventuellement a retirer si j'arrive a fermer le fichier 
                                          'avec savechanges:=true
    wbNouveauFichier.Activate            ' le wbNouveaufichier.close ne fonctionne pas alors  j'essai autre chose
    MsgBox ActiveWorkbook.Name           ' m'indique  que c'est bien le bon workbook a fermer
    ActiveWorkbook.Close                  ' erreur 91 :/

' cette ligne ne focntionne pas non plus 
    'wbNouveauFichier.Close SaveChanges:=True    ' erreur 91 :/

    ' Libérer la mémoire en définissant les objet sur Nothing
    Set UserFormCopie = Nothing
    Set ModuleCopie = Nothing
    'faire les autres======================================================

End Sub

Re,

Arf, on ne fait pas comme ça en général

On part d'un fichier modèle, dans lequel on injecte seulement les données.

Je ne vais pas pouvoir vous êtes de grand utilité, désolé.

Rechercher des sujets similaires à "close erreur"