XL 2019 Ouverture conditionnelle d'un classeur

pat66

XLDnaute Impliqué
Bonjour Le forum,

Je sais pas si c'est possible, mais je souhaiterai que l'on ne puisse ouvrir 2 classeurs spécifiques simultanément, je m'explique

J'ai 2 classeurs A et un Classeur B, ils sont fermés

exemple :
A est ouvert, je souhaite aussi ouvrir B, lorsque je clique sur B pour l'ouvrir, avant de s'ouvrir un mgbox s'affiche et me demande si je veux vraiment ouvrir le Classeur B,
si je répond oui : alors il ferme le classeur A sans enregistrer les modifications et ouvre B,
si je répond non : la procédure d'ouverture de B est annulée on revient sur A

et inversement B est ouvert que je décide d'ouvrir A

un grand merci pour votre aide

pat66
 
Solution
Bonjour,

Dans le code du classeur A.xlsm :
VB:
Private Sub Workbook_Open()
    Dim wk As Workbook
    
    On Error Resume Next
    Set wk = Workbooks("B.xlsm")
    On Error GoTo 0
    
    If Not wk Is Nothing Then
        If MsgBox("B est ouvert" & vbCrLf & vbCrLf & "Fermer B et ouvrir A ?", vbOKCancel) = vbOK Then
            wk.Close False
        Else
            ThisWorkbook.Close
        End If
    End If
End Sub

La même chose dans B.xlsm, avec les noms changés :
Code:
Private Sub Workbook_Open()
    Dim wk As Workbook
    
    On Error Resume Next
    Set wk = Workbooks("A.xlsm")
    On Error GoTo 0
    
    If Not wk Is Nothing Then
        If MsgBox("A est ouvert" & vbCrLf & vbCrLf & "Fermer A et ouvrir B ?", vbOKCancel) =...

xUpsilon

XLDnaute Accro
Bonjour,

Si A et B ont des noms fixés, on peut imaginer un évènement stocké dans Workbook_Open de chacun des deux classeurs.
A l'ouverture, on teste si "A.xlsx" est ouvert depuis B, ou inversement. Si l'autre est ouvert, on ouvre une InputBox qui propose soit de fermer l'un, soit de fermer l'autre.

Bonne soirée,

Edit : Bonjour Hasco, vgendron :)
 
Dernière édition:

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Dans le code du classeur A.xlsm :
VB:
Private Sub Workbook_Open()
    Dim wk As Workbook
    
    On Error Resume Next
    Set wk = Workbooks("B.xlsm")
    On Error GoTo 0
    
    If Not wk Is Nothing Then
        If MsgBox("B est ouvert" & vbCrLf & vbCrLf & "Fermer B et ouvrir A ?", vbOKCancel) = vbOK Then
            wk.Close False
        Else
            ThisWorkbook.Close
        End If
    End If
End Sub

La même chose dans B.xlsm, avec les noms changés :
Code:
Private Sub Workbook_Open()
    Dim wk As Workbook
    
    On Error Resume Next
    Set wk = Workbooks("A.xlsm")
    On Error GoTo 0
    
    If Not wk Is Nothing Then
        If MsgBox("A est ouvert" & vbCrLf & vbCrLf & "Fermer A et ouvrir B ?", vbOKCancel) = vbOK Then
            wk.Close False
        Else
            ThisWorkbook.Close
        End If
    End If
    
End Sub

autrement la grosse artillerie avec module de classe application dans un classeur maître qui gèrera les deux autres.
 

vgendron

XLDnaute Barbatruc
Bonjour
un problème dans ta description: tu dis vouloir ouvrir 2 classeurs "Simultanément" et ensuite, tu décris pour n'en avoir qu'un seul d'ouvert...

en supposant que tu aies 2 classeurs: Classeur1.xlsm et Classeur2.xlsm
code à mettre dans le thisworkbook du classeur 1
VB:
Private Sub Workbook_Open()

For Each wb In Application.Workbooks
    If wb.Name = "Classeur2.xlsm" Then
        If MsgBox("le classeur 2 est déjà ouvert, souhaitez vous ouvrir quand meme?", vbYesNo) = vbYes Then
            wb.Close savechanges:=False
        Else
            ActiveWorkbook.Close
        End If
    End If
Next wb
End Sub

et
code à mettre dans le thisworkbook du classeur
VB:
Private Sub Workbook_Open()

For Each wb In Application.Workbooks
    If wb.Name = "Classeur1.xlsm" Then
        If MsgBox("le classeur 1 est déjà ouvert, souhaitez vous ouvrir quand meme?", vbYesNo) = vbYes Then
            wb.Close savechanges:=False
        Else
            ActiveWorkbook.Close
        End If
    End If
Next wb
End Sub
 

pat66

XLDnaute Impliqué
Bonjour
un problème dans ta description: tu dis vouloir ouvrir 2 classeurs "Simultanément" et ensuite, tu décris pour n'en avoir qu'un seul d'ouvert...

en supposant que tu aies 2 classeurs: Classeur1.xlsm et Classeur2.xlsm
code à mettre dans le thisworkbook du classeur 1
VB:
Private Sub Workbook_Open()

For Each wb In Application.Workbooks
    If wb.Name = "Classeur2.xlsm" Then
        If MsgBox("le classeur 2 est déjà ouvert, souhaitez vous ouvrir quand meme?", vbYesNo) = vbYes Then
            wb.Close savechanges:=False
        Else
            ActiveWorkbook.Close
        End If
    End If
Next wb
End Sub

et
code à mettre dans le thisworkbook du classeur
VB:
Private Sub Workbook_Open()

For Each wb In Application.Workbooks
    If wb.Name = "Classeur1.xlsm" Then
        If MsgBox("le classeur 1 est déjà ouvert, souhaitez vous ouvrir quand meme?", vbYesNo) = vbYes Then
            wb.Close savechanges:=False
        Else
            ActiveWorkbook.Close
        End If
    End If
Next wb
End Sub
Bonsoir, non j'ai bien précisé ne pouvoir ouvrir qu'un classeur à la fois dans le titre
Bonjour Le forum,
Je sais pas si c'est possible, mais je souhaiterai que l'on ne puisse ouvrir 2 classeurs spécifiques simultanément
 
Dernière édition:

vgendron

XLDnaute Barbatruc
Bonsoir, non j'ai bien précisé ne pouvoir ouvrir qu'un classeur à la fois dans le titre

Bonjour Le forum,
Je sais pas si c'est possible, mais je souhaiterai que l'on ne puisse ouvrir 2 classeurs spécifiques simultanément
aux autres intervenants du fil. c'est moi ou je me suis toujours trompé sur la définition de SIMULTANEMENT (en MEME TEMPS) ??

si je répond oui : alors il ferme le classeur A sans enregistrer les modifications et ouvre B, ===> RESULTAT: UN SEUL FICHIER OUVERT: le B
si je répond non : la procédure d'ouverture de B est annulée on revient sur A===> RESULTAT: UN SEUL FICHIER OUVERT: le A
 

pat66

XLDnaute Impliqué
re,

vgendron un peu d'indulgence pour les nuls , c'est vrai qu' au lieu "d'ouvrir simultanément" il fallait que je dise "utiliser en même temps" , je suis profondément désolé que ca te mette en rogne, ;)
 
Dernière édition:

vgendron

XLDnaute Barbatruc
Et moi je suis désolé que tu ne sois pas capable de comprendre que ce que tu décris comme besoin est antinomique. Mais comme ici, il s'agit d'un forum Excel, et pas sur la langue Française, on va arrêter là.
la solution apportée te convient. tant mieux.

Bonne continuation
 

Discussions similaires

Réponses
2
Affichages
383

Statistiques des forums

Discussions
314 647
Messages
2 111 533
Membres
111 195
dernier inscrit
Cheminotbelgiantrain