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)

image

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.

je sais bien mais il ouvre aussi un classeur1

voila le fichier

14facturier-v11.zip (656.31 Ko)

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 With

Cordialement

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 & Nomfichier

remplacez 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 Sub

et 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 Sub

si 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 adapter

plus 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"

Rechercher des sujets similaires à "bug fermeture userform"