Accueil | Ce site | CV | Excel | Livre d’or | Macros XL4 | Modèles | VBA

 La procédure AppelAutoDocument

Contexte

Lorsque l’on essaye d’ouvrir un classeur déjà ouvert, un message est affiché (Figure 1) si une modification quelconque est intervenue depuis le dernier enregistrement.


Fig. 1 - Message affiché si l’on tente d’ouvrir un classeur déjà ouvert,
qui a été modifié depuis le dernier enregistrement.

Comme indiqué dans le message affiché, le choix du bouton , sélectionné par défaut, fait perdre toutes les modifications depuis le dernier enregistrement.

Si par programmation, on cherche à ouvrir un classeur sans vérifier s’il l’est déjà, l’utilisateur risque d’être confronté à un message de ce type, ce qui n’est pas une bonne chose.

En effet, on ne peut préjuger de sa réaction, et il risque de choisir le bouton parce que le message ne lui paraît pas clair, ou par maladresse ou distraction. Il y a alors perte de données, ce qu’il est impératif d’éviter.

L’analyse

La procédure AppelAutoDocument a pour rôle d’éviter que des données soient perdues. Elle tente d’abord d’activer le classeur, ce qui équivaut à le choisir dans le menu “Fenêtre” (figure 2)


Fig. 2 - Choisir un document dand le menu “Fenêtre”
correspond à la methode Activate (activer) de VBA

Ce n’est qu’en cas d’échec de l’activation que le classeur est ouvert. Ainsi on supprime le risque de perdre les éventuelles modifications faites depuis le dernier enregistrement.

Le code commenté

Voici son code :

Sub AppelAutoDocument(Doc As String)
        If Left(Application.OperatingSystem, 3) = "Win" Then
            If Left(Right(Doc, 4), 3) <> ".xl" Then
                Doc = Doc & ".xls"
            End If
        End If
    On Error GoTo Ouvre
    ' Différence de syntaxe : La méthode Activate s'applique à un Workbook, tandis que Open s'applique
    ' à la collection WorkBooks : Workbooks(Doc).Open serait incorrect
    Workbooks(Doc).Activate
    Exit Sub
Ouvre:
    Workbooks.Open Doc
End Sub