Autres msgbox : mettre en garde du risque de fermer un fichier

Chatron

XLDnaute Junior
Bonjour
Sur une application utilisée par des bénévoles pas trop au top en informatique, je voudrais mettre une MsgBox pour les informer de ne pas fermer un fichier qui fonctionne en liaison avec l'application mais après de nombreux essais je ne comprends pas pourquoi ça bloque, qu'elle est l'erreur de commande ?
Voici le code que j'essaye de mettre dans ThisWorbook ou dans la feuille :
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Reponse As Variant
  Windows("GdA.xls").Activate                           'ferme GdA et sauve
  MsgBox "Si vous fermez ce fichier, l'application ne fonctionnera plus.", newline , newline,
 "Voulez vous fermer quand même ?",
 vbYes vbCancel + vbCritical + vbDefaultButton2
  If Reponse= vbYes
 then ActiveWorkbook.Save
ThisWorkbook.Close
  
End Sub
Merci pour votre aide
 
Solution
Salut,
Un texte peut-être ajouté à un autre en indiquant entre eux "&" et pas ","
Le bon code pour faire ce que vous voulez :
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If MsgBox("Si vous fermez ce Classeur, l'application ne fonctionnera plus." & vbNewLine & vbNewLine & _
               "Voulez vous fermer quand même ?", vbCritical + vbYesNo, "Fermeture de " & ThisWorkbook.Name) = vbYes Then
        ThisWorkbook.Close savechanges:=True
    Else
        Cancel = True
    End If
 
End Sub

fanch55

XLDnaute Barbatruc
Salut,
Un texte peut-être ajouté à un autre en indiquant entre eux "&" et pas ","
Le bon code pour faire ce que vous voulez :
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If MsgBox("Si vous fermez ce Classeur, l'application ne fonctionnera plus." & vbNewLine & vbNewLine & _
               "Voulez vous fermer quand même ?", vbCritical + vbYesNo, "Fermeture de " & ThisWorkbook.Name) = vbYes Then
        ThisWorkbook.Close savechanges:=True
    Else
        Cancel = True
    End If
 
End Sub
 

Chatron

XLDnaute Junior
Salut,
Un texte peut-être ajouté à un autre en indiquant entre eux "&" et pas ","
Le bon code pour faire ce que vous voulez :
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If MsgBox("Si vous fermez ce Classeur, l'application ne fonctionnera plus." & vbNewLine & vbNewLine & _
               "Voulez vous fermer quand même ?", vbCritical + vbYesNo, "Fermeture de " & ThisWorkbook.Name) = vbYes Then
        ThisWorkbook.Close savechanges:=True
    Else
        Cancel = True
    End If
 
End Sub
 

Chatron

XLDnaute Junior
Merci de votre réponse
En effet avec& ça marche mieux qu'avec des "," mais j'ai un peu galéré (ma bonne volonté n'a d'égale que mon ignorance en VBA et mon allergie à la langue anglaise), j'ai copié bêtement votre code et pas vu qu'il manquait des "( )" et que le "If" n'était pas à la bonne place
C'est dur de faire rentrer dans ma cabosse !!!!
Merci pour votre aide
[RESOLU]
 

Chatron

XLDnaute Junior
Merci de votre réponse
..........
C'est dur de faire rentrer dans ma cabosse !!!!
Merci pour votre aide
[RESOLU]
Bonjour
Je reviens vers vous car je veux, avant de fermer le classeur, Enregistrer des copies de sauvegarde datées sur 2 emplacements différents et je n'y arrive pas
Voici mon code
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
     If MsgBox("Si vous fermez ce fichier, l'application ne fonctionnera plus." & vbNewLine & vbNewLine & _
     "Voulez vous fermer quand même ?", vbYesNo + vbCritical) = vbYes Then
                    ActiveWorkbook.Save
     
        Workbooks("Gdp_GdA.xls").Close , SaveChanges = True
            ChDir "C:\sauvegardes-biblio"
             ActiveWorkbook.SaveAs Filename:= _
            "C:\sauvegardes-biblio\GdP_GdA" & "-" & Format(Date, "yymmdd") & ".xls"
                    ChDir "F:\Bibliotheque"
                    ActiveWorkbook.SaveAs Filename:= _
                    "F:\Bibliotheque\GdP_GdA" & "-" & Format(Date, "yymmdd") & ".xls"
             Else: Cancel = True
                Exit Sub
         End If
 End Sub
j'ai modifié en tous sens; déplacé des lignes, essayé d'autres formulations
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Rep As String
Windows("Gdp_GdA.xls").Activate
Msg = "Si vous fermez ce fichier, l'application ne fonctionnera plus." & vbNewLine & vbNewLine & _
        "Voulez vous fermer quand même ?"
            Rep = MsgBox(Msg, vbYesNo + vbCritical) 'vbYesNo)
            If Rep = vbNo Then Cancel = True
                Exit Sub
              If Rep = vbYes Then ChDir "C:\sauvegardes-biblio"
                        ActiveWorkbook.SaveCopieAs Filename:= _
 "C:\sauvegardes-biblio\GdP_GdA" & "-" & Format(Date, "yymmdd") & ".xls"
         ActiveWorkbook.Close ActiveWorkbook.SaveChanges = True 
End Sub
Je comprends d'autant moins que ce code marche sur un autre classeur ou il n'y a pas de MsgBox et de conditions (If Else)
Merci de votre aide
 

fanch55

XLDnaute Barbatruc
Bonsoir,
le code qui va bien :
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If MsgBox("Si vous fermez ce fichier, l'application ne fonctionnera plus." & vbNewLine & vbNewLine & _
              "Voulez vous fermer quand même ?", vbYesNo + vbCritical) = vbYes Then
        Application.DisplayAlerts = False ' pour ne pas avoir la demande de remplacement
        ThisWorkbook.Save
        ThisWorkbook.SaveAs "C:\sauvegardes-biblio\GdP_GdA" & "-" & Format(Date, "yymmdd") & ".xls"
        ThisWorkbook.SaveAs "F:\Bibliotheque\GdP_GdA" & "-" & Format(Date, "yymmdd") & ".xls"
       ' ThisWorkbook.Close  <-- inutile car on est déjà dans l'événement ...
        Application.Quit
    Else
        Cancel = True
    End If
 End Sub
 

Statistiques des forums

Discussions
314 777
Messages
2 112 856
Membres
111 682
dernier inscrit
Legrandsire