BOGUE : Défaillance d'Excel 2002 lors du chargement d'une macro complémentaire d'automation

Symptômes

Lorsque Excel 2002 charge une macro complémentaire d'automation en mode modification de cellule, Excel se bloque. Ce problème se produit uniquement avec les macros complémentaires d'automation chargées à la demande dans Excel.

Cause

Ce problème peut se produire lors du chargement d'une macro complémentaire si celle-ci affiche un formulaire ou une boîte de dialogue ou si elle effectue une demande d'automation à Excel en vue de modifier l'état d'Excel. La liste suivante contient des exemples de demandes d'automation pouvant provoquer le blocage d'Excel lorsqu'il est appelé durant le chargement d'une macro complémentaire d'automation alors qu'il est en mode modification de cellule :

  • Modification de la sélection active par programme. Par exemple :
    Application.ActiveSheet.Range("A1").Select
  • Appel d'une propriété ou d'une méthode d'un élément dans la collection Windows. Par exemple :
    Application.ActiveWindow.Zoom = 200
  • Modification d'un paramètre d'Excel, tel que le mode de calcul. Par exemple :
    Application.CalculationMode = xlManual
Tous ces exemples de code tentent de modifier l'environnement d'Excel, un classeur ou une feuille de calcul ; ces types d'actions ne sont pas autorisés lorsque vous êtes en mode modification.

Résolution

N'essayez pas d'effectuer les actions ci-dessus lors du chargement de votre macro complémentaire. Parmi les méthodes de la macro complémentaire appelées durant le chargement, citons la méthode Initialize et, si votre macro complémentaire d'automation implémente l'interface IDTExtensibility2, les méthodes OnConnection et OnStartupComplete.

Statut

Microsoft a confirmé l'existence de ce bogue dans les produits Microsoft répertoriés dans la section "Liste des produits concernés par cet article".

Plus d'informations

Procédure pour reproduire le problème

  1. Démarrez un nouveau projet DLL ActiveX dans Visual Basic.
  2. Dans le menu Projet, cliquez sur Propriétés Projet1. Modifiez le Nom du projet en TestComp, puis cliquez sur OK.
  3. Ajoutez le code suivant au module de code pour Classe1 :
    Private Sub Class_Initialize()
    MsgBox "Class_Initialize"
    End Sub
  4. Générez TestComp.dll.
  5. Dans Excel 2002, démarrez un nouveau classeur.
  6. Dans le menu Outils, cliquez sur Compléments, puis sur Automatisation. Dans la liste, cliquez sur TestComp.Classe1, puis sur OK. Dans la boîte de dialogue Compléments, cliquez sur OK.
  7. Tapez =a dans une cellule quelconque. Une boîte de message contenant "Class_Initialize" s'affiche.
  8. Cliquez sur OK pour faire disparaître la boîte de message. Après quelques secondes, Excel se bloque.

Références

Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :

291392 INFO : Macros complémentaires COM et macros complémentaires d'automation pour Excel
Propriétés

ID d'article : 284876 - Dernière mise à jour : 22 oct. 2003 - Révision : 1

Commentaires