Excel VBA 2010 – Les buttons de command arrêtent le travail avec plusieurs feuilles sélectionnées

Mon problème sont les buttons de command qui ne répondent pas lorsque j'ai sélectionné plusieurs feuilles dans un classur. Le cahier que je teste ici est uniquement destiné à étudier et à résoudre ce problème, que j'ai trouvé à l'origine dans un classur beaucoup plus compliqué.

Mon cahier contient au total 5 feuilles de travail. Il existe quatre buttons de command ActiveX sur sheet1. Ces quatre buttons lancent le code pour sélectionner plusieurs feuilles de calcul set ou simplement sheet1.

Après avoir sélectionné plusieurs feuilles set, seul le dernier button cliqué effectivement peut être cliqué à nouveau, le rest des buttons sur la feuille1 ne répond plus, comme ils sont désactivés ou quelque chose. Une fois que j'ai désélectionné manuellement les feuilles de sorte que juste la feuille1 est sélectionnée, les commands commencent à fonctionner normalement.

Astuce … Je pense qu'il doit s'agir d'une sorte de bug dans Excel. Je peux également reproduire le problème si je sélectionne manuellement plusieurs feuilles de travail plutôt que de laisser le code le faire.

Quelques résultats à ce jour …

  1. Il ne semble pas importer le nombre de feuilles que je sélectionne tant qu'elles sont deux ou plus.
  2. La sélection du code VBA ou le manuel SHIFT-CLICK n'a aucune importance.
  3. Le dernier button activé s'exécute toujours une fois que les autres buttons sont verrouillés.
  4. Je n'obtiens que cela avec Excel 2010, Excel 2007 n'a pas eu ce problème.
  5. J'ai répliqué le problème dans un classur isolé, donc je ne pense pas que ce soit un problème de corruption.

Les 4 buttons de command exécutent les fonctions ci-dessous. Chaque button marque les cellules adjacentes si le code est exécuté. J'ai mis un timeout de 1 seconde pour vérifier en cliquant sur un button deux fois de suite.

  • CMD 1: Sélectionnez la feuille 1 uniquement
  • CMD 2: Sélectionnez la feuille 1 uniquement
  • CMD 3: Sélectionnez la feuille1 et la feuille2
  • CMD 4: Sélectionnez sheet1 through sheet4 via sub routine dans module1

Voici mon code joint à la feuille1 ….

Option Explicit Private Sub CommandButton1_Click() Call MarkCmdsAsInactive Me.Select Call WaitSeconds(1) Range("E6").Value = "CMD 1 Works" End Sub Private Sub CommandButton2_Click() Call MarkCmdsAsInactive Me.Select Call WaitSeconds(1) Range("E10").Value = "CMD 2 Works" End Sub Private Sub CommandButton3_Click() Call MarkCmdsAsInactive Sheets(Array("Sheet1", "Sheet2")).Select Call WaitSeconds(1) Range("E14").Value = "CMD 3 Works" End Sub Private Sub CommandButton4_Click() Call MarkCmdsAsInactive Call SelectSomeSheets Call WaitSeconds(1) Range("E18").Value = "CMD 4 Works" End Sub Private Sub MarkCmdsAsInactive() Range("E6").Value = "Inactive" Range("E10").Value = "Inactive" Range("E14").Value = "Inactive" Range("E18").Value = "Inactive" End Sub Private Sub WaitSeconds(waitInSeconds As Variant) Dim newHour As Variant Dim newMinute As Variant Dim newSecond As Variant Dim waitTime As Variant newHour = Hour(Now()) newMinute = Minute(Now()) newSecond = Second(Now()) + waitInSeconds waitTime = TimeSerial(newHour, newMinute, newSecond) Application.Wait waitTime End Sub 

Dans module1 j'ai …

 Option Explicit Sub SelectSomeSheets() Sheets(Array("Sheet1", "Sheet2", "Sheet3", "Sheet4")).Select End Sub 

Mise à jour 2012-10-09

Voici un moyen simple de reproduire ce bug dans Excel 2010 …

  1. Placez 4 buttons de command sur la feuille1.
  2. Copiez le code ci-dessous pour feuille1.
  3. Placez des points d'arrêt sur chacune des instructions "End Sub".
  4. Essayez de cliquer sur les buttons avec juste la feuille1 sélectionnée. Toutes les routines de lancement de buttons.
  5. SHIFT-CLICK pour sélectionner un groupe de feuilles.
  6. Essayez les buttons à nouveau avec le groupe de feuilles sélectionné. Seul le dernier button utilisé fonctionne.

    Private Sub CommandButton1_Click () End Sub

    Private Sub CommandButton2_Click () End Sub

    Private Sub CommandButton3_Click () End Sub

    Private Sub CommandButton4_Click () End Sub

Je suppose qu'il s'agit de la "scope" des buttons ActiveX (c.-à-d. La scope est sheet1 et not sheet1 + sheet2 + …). Il semble que la sélection de plusieurs feuilles désactive les buttons de command dans la feuille 1, même si la feuille 1 rest la feuille "active". parce que les composants ActiveX sont privés de sheet1.

À titre de solution de contournement, j'ai déplacé votre Sub CommandButtonX_Click vers le Module 1, supprimé le mot-key Private , créé un ruban personnalisé MyTools avec les 4 sous comme éléments sélectionnables. De cette façon, j'ai déplacé la visibilité des sous-titres du niveau de la feuille au niveau de l'application et tous les travaux.

Bien sûr, je devais aussi changer Me.Select into Sheets("Sheet1").Select (bien que je déteste des encodings forts comme celui-ci …)

J'espère que cela pourra aider …