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" :
Jusque là, tout fonctionne parfaitement.
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...]
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 :
(J'ai, dans le doute, tenté d'encadrer l'ouverture du Fichier_A par un displayAlerts false/true, mais cela ne change rien).
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
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
Partager