Un bug a la fermeture userform
bonjour
voila le probleme quand j' ouvre mon classeur ca ouvre directement un userforme sans ouvrir le classeur (normalement).
quand je ferme cette userform il fait plusieurs chose
1* enregistre le classeur
2 * il crée une sauvegarde du classeur dans un autre dossier
3 *ce ferme
tout ca fonctionne sauf une fois userforme fermé je m'aperçoit qu'il y a un classeur1 ouvert
et quand je vais dans visual basic j'ai ce classeur1 et mon classeur facture qui present mais quand je survole icone excel il y a que le classeur1 et visual qui sont ouvert et quand je ferme le classeur 1 avec la croix il fait l'enregistrement de sauvegarde(avec bien sur un classeur vide)
Bonjour,
"voila le probleme quand j' ouvre mon classeur ca ouvre directement un userforme sans ouvrir le classeur (normalement)".
Heu çà j'en doute ; ce n'est pas parce que votre classeur n'est pas visible qu'il n'est pas ouvert. le userform appartiend à un classeur
si le userform est ouvert alors le classeur aussi.
Pour votre problème sans connaître le code à l'ouverture de votre classeur impossible de répondre à votre question.
Un fichier exemple serait bien plus explicite.
Toujours avec ma galère
mais après de nombreuses recherches et de tests
c'est un problème qui viendrait de mon incompétence Lol
à savoir que mon classeur toto se ferme par un bouton se trouvant sur un userform
1-si j'ai un classeur quelconque déjà ouvert et que j'ouvre mon classeur toto et que je le referme, là pas de problème tout fonctionne il se ferme et mon classeur quelconque reste ouvert' et Les sauvegardes sont faites
2-Si je n'ai pas de classeur ouvert, Que j'ouvre mon classeur toto et que je le referme le classeur se ferme mais Excel reste ouvert sans classeur .
3-Si je rajoute « Application.Quit » dans le code et que j'ai des classeurs ouverts ça me ferme tous les classeurs
Donc est ce que c'est possible à la fermeture de mon classeur toto de demander de vérifier si un classeur est déjà ouvert : si oui de fermer que le classeur toto et si non de fermer le classeur Et Excel
Bonjour,
C'est quoi le code de fermeture de votre userform ?
il est dans votre fichier posté dans le post précédent ? et si oui, quelle est l'userform concernée
Faut éviter le Application.quit qui ferme tout simplement Excel et les fichiers ouverts
c'est userform5
j'ai fait plusieur test il y a du code dans le bouton ferrmer de l'userforme5 et dans ThisWorkbook
merci
Je pense que c'est le code Beforeclose qui vous provoque un souci
A la fin du code Private Sub Workbook_BeforeClose(Cancel As Boolean) qui se trouve dans thisworkbook, entre votre ligne 'aaaaaaa et le END SUB, remplacez ces lignes
With ThisWorkbook
If .Saved = False Then
Application.DisplayAlerts = False
.Save
End If
End WithCordialement
On s'approche on s'approche mais c'est pas encore tout à fait ça
je vous ai donc remis mon fichier modifier et pour que vous puissiez tester j'ai modifié les chemins d'un dossier , quand vous allez ouvrir le classeur il créera automatiquement un dossier c:\testfact2222222 sur votre PC et il y déposera les sauvegardes du classeur que vous allez créer
donc vous verrez que quand vous allez fermer le classeur il va se fermer et il restera Excel d'ouvert(bien sûr il ne faut pas avoir de classeurs Excel ouverts)
merci
1. Pourquoi avez-vous ajouté Thisworkbook.close dans ce que je vous ai donné ???
En faisant cela vous relancez à nouveau le code dans lequel vous êtes, à savoir le code beforeclose
2. ouvrir le classeur il créera automatiquement un dossier c:\testfact2222222 sur votre PC
Non, ce dossier est créé à la fermeture du fichier
3. Edit : autre point que je ne vous ai pas donné dans mon précédent. Dans cette ligne de code
ActiveWorkbook.SaveCopyAs Nomdossier & Nomfichierremplacez Activeworkbook par Thisworkbook
oui effectivement c'est la fermeture qui créé le dossier la première fois pourtant j'ai pas encore pris l'apéro
Je sais plus pourquoi j'avais rajouté Thisworkbook.close
j'ai refait les modifs comme vous m'avez indiqué
et maintenant il ne ferme plus directement le classeur il me demande si je veux enregistrer les modifications
merci à vous pour le temps passé et votre patience
De nouveau vous n'avez pas recopié le code comme je vous l'ai donné.
Displayalert est à valeur true dans votre fichier....
Autres points:
- au début du code vous définissez une variable CHEMIN. (dans le fichier elle est égale à C\:testfact22222)
- ensuite remplacez plus bas tous les C\:testfact2222 par le nom CHEMIN. Comme cela vous ne le définissez qu'une fois.
- toujours pour la variable CHEMIN, dans votre fichier mettez plutot Chemin = Thisworkbook.path & "\" .cela évite d'aller créer un répertoire à la racine C:\. Pour ma part j'évite toujours de les mettre là et pour vous aider sur un forum, je sais que le fichier sauvegardé sera au même endroit que celui téléchargé
NB : Merci d'éviter de reposter à chaque fois le fichier. cela alourdit le forum inutilement et je dois refaire des comparaisons à chaque évolution
Je suis assez nulle en VBA
je récupère des bouts de code à droite à gauche je fais les montages
c'est pour ça que des fois il y a les doublons je finis d'abord les grosses lignes de mon facturier
et je ferai les corrections après
Pour ce qui est de mon problème j'ai avancé
en modifiant l'emplacement des codes j'ai réussi à avoir a un poile près ce que je voulais
voici les modifs
dans : thisworkbook
Private Sub Workbook_BeforeClose(Cancel As Boolean)
With ThisWorkbook
If .Saved = False Then
Application.DisplayAlerts = False
.Save
End If
End With
End Sub
Private Sub Workbook_Open()
Application.Visible = False
UserForm5.Show
End Subet dans le bouton fermer
Private Sub CommandButton8_Click()
'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
'efface les sauvegarde sauf les 5 derniere
Dim I As Integer, NbASauvegarder As Integer, NbVersions As Integer
Dim Chemin As String
NbASauvegarder = 5
Chemin = "C:\testfact2222222" ' A adapter
NbVersions = VersionsFichiers(Chemin, "sauvegarde facturation.xlsm")
If NbVersions > NbASauvegarder Then
For I = 1 To NbVersions - NbASauvegarder
SupprimerFichiers Chemin, "sauvegarde facturation.xlsm" ' A adapter
Next I
End If
'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
'verifi si dossier existe
Dim fdObj As Object
Application.ScreenUpdating = False
Set fdObj = CreateObject("Scripting.FileSystemObject")
If fdObj.FolderExists("C:\testfact2222222") Then
Else
fdObj.CreateFolder ("C:\testfact2222222")
End If
Application.ScreenUpdating = True
'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
'créé une sauvegarde
Dim Nomdossier As String
Dim Nomfichier As String
Nomdossier = "C:\testfact2222222\"
'désactive les messages d'alertes
Application.DisplayAlerts = False
' on créé le nom du fichier de backup
Nomfichier = "D" & Year(Date) & "-" & Month(Date) & "-" & Day(Date) & "-" & "H" & Format(Time, "hh-mm-ss") & "-" & "sauvegarde facturation.xlsm"
' on sauvegarde le fichier de backup
ThisWorkbook.SaveCopyAs Nomdossier & Nomfichier
'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
'lire les fichiers d'un répertoir
Dim fs, F, f1, s, sf
Dim Ext As String, Route As String
Dim D As Date, TB
D = DateSerial(Year(Date), Month(Date), Day(Date) + 7)
Route = "C:\testfact2222222\" 'adapter au répertoir où sont situés les fichiers.
Ext = "xlsm" 'adapter l'extension
Set fs = CreateObject("Scripting.FileSystemObject")
Set F = fs.GetFolder(Route)
Set sf = F.Files
For Each f1 In sf
If Right(f1.name, 3) = Ext Then 'pour être certain que c'est un bon fichier
'ici tester le nom et pour pas se casser la tête avec des dates genre
'1/1/2009 et 01/01/2009
TB = Split(f1.name, ".")
If CDate(TB(0)) < D Then
'J'ai pas bien compris ce que tu veux en faire ! le supprimer ou renommer ?
'beh tu en fait ce que tu veux.e ce que l'ont veux
End If
End If
Next
'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
'If Application.Workbooks.Count = 1 Then
'ActiveWorkbook.Close savechanges:=True
ThisWorkbook.Close
Unload Me
End Subsi il y a que mon facturier ouvert tout vas bien
si il y a un autre classeur ouvert probleme
À l'ouverture de mon facturier les autres classeurs deviennent invisibles
quand je referme mon facturier tout se passe bien sauf que les autres classeurs reste invisible mais ne sont pas fermés ( donc 2 solutions ils redeviennent visibles quand je ferme le facturier où ils ne deviennent pas invisibles à l'ouverture du facturier)
merci de votre aide
Bonjour
Quelques commentaires sur votre post :
1. Comme déjà dit précédemment, lorsque vous faites ceci -->
Chemin = "C:\testfact2222222" ' A adapterplus bas dans le code remplacez c:\testfact222222 par CHEMIN (sans les guillemets)
2. dans le code Command8_Click, inverser les lignes Thisworkbook.close et Unload Me.
3. Votre code Workbook.open, je n'aime absolument pas cette instruction "application.visible" qui laisse excel invisible mais qui est toujours ouvert à l'arrière plan. C'est le genre d'instruction pour avoir des soucis ou bugs si vous avez d'autres fichiers ouverts ou à ouvrir
Ici votre excel reste invisible si vous quittez votre fichier alors qu'en réalité il est toujours ouvert.
Donc évitez !! (et aussi si vous postez votre fichier pour avoir une aide)
C'est d'ailleurs peut être le souci lorsque vous dites --> "À l'ouverture de mon facturier les autres classeurs deviennent invisibles"