Close erreur 91
j
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)
Invité
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:=TrueA+
j
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
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 SubInvité
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é.