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 …
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.
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 …
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 …