Bonjour,

Je possède un fichier Excel Fichier_A effectuant entre autres l'ouverture et l'alimentation d'un autre fichier Excel Fichier_B.

Lors de l'ouverture de Fichier_B, plusieurs vérifications sont faites, notamment pour vérifier que le fichier a pu être ouvert en écriture.

Le code utilisé est le suivant (simplifié), avec utilisation du DisplayAlerts = False afin de ne pas afficher le message "Fichier_B est vérouillé en modification par XXX... Lecture seule / Notifier / Annuler" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Function Maj_commentaires(rep_fic As String, nom_fic As String)
 
Dim fic_principal As String
 
fic_principal = ActiveWorkbook.Name
 
'Ouverture du fichier commentaires
On Error GoTo gestionErreur
Application.DisplayAlerts = False
Workbooks.Open Filename:=rep_fic & nom_fic
Application.DisplayAlerts = True
GoTo suiteTraitement
 
gestionErreur:
    If Err.Number = 1004 Then
        Run Ecriture_ligne_erreur(nom_fic, "Commentaire fichier absent")
    Else
        Run Ecriture_ligne_erreur(nom_fic, "Commentaire erreur inconnue")
    End If
    Exit Function
 
suiteTraitement:
On Error GoTo 0
 
'Vérification que le fichier a été ouvert en écriture
If Workbooks(nom_fic).ReadOnly Then
    Workbooks(nom_fic).Close savechanges:=False
    Windows(fic_principal).Activate
    Run Ecriture_ligne_erreur(nom_fic, "Commentaire deja ouvert")
    Exit Function
End If
 
[Reste du traitement...]
Jusque là, tout fonctionne parfaitement.



Là où j'ai un problème, c'est que la macro principale de Fichier_A est appelée via un autre fichier Fichier_C. Et dans ce cas, mon displayAlerts entourant l'ouverture du Fichier_B ne fonctionne plus : si Fichier_B est vérouillé en écriture, j'obtiens systématiquement le message "Fichier_B est vérouillé en modification par XXX... Lecture seule / Notifier / Annuler".
Ce qui est trés génant, puisque mon traitement stoppe dans l'attente d'une réponse utilisateur...

Le code (simplifié) du fichier Fichier_C est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private Sub Workbook_Open()
 
Dim CeFichier, CetteFeuille As String
Dim Repertoire As String
 
CeFichier = ActiveWorkbook.Name
CetteFeuille = ActiveSheet.Name
Repertoire = Sheets(CetteFeuille).Range("C8").Value
 
Workbooks.Open Filename:=Repertoire & "FichierA", IgnoreReadOnlyRecommended:=True
Workbooks(FichierA).Application.Run "'FichierA'!Mise_A_jour_globale"
Application.DisplayAlerts = False
ActiveWorkbook.Save
ActiveWorkbook.Close
Application.DisplayAlerts = True
Windows(CeFichier).Activate
 
ActiveWorkbook.Save
Application.Quit
 
End Sub
(J'ai, dans le doute, tenté d'encadrer l'ouverture du Fichier_A par un displayAlerts false/true, mais cela ne change rien).


La procédure principale (simplifiée) du Fichier_A est la suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub Mise_a_jour_globale()
 
Application.ScreenUpdating = False
 
[...]
Run Maj_commentaires(Sheets("Paramétrage").Cells(9, 2), Sheets("Paramétrage").Cells(9, 1))
Run Maj_commentaires(Sheets("Paramétrage").Cells(11, 2), Sheets("Paramétrage").Cells(11, 1))
Run Maj_commentaires(Sheets("Paramétrage").Cells(12, 2), Sheets("Paramétrage").Cells(12, 1))
[...]
 
Application.ScreenUpdating = True
 
End Sub

Si quelqu'un à une idée ? Merci