[RESOLU] Etendre code à toutes les feuilles

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

cathodique

XLDnaute Barbatruc
Bonjour,

Avec ce code (classe+code dans thisworkbook), au passage de la souris sur les boutons de la feuille1, ces derniers changent de couleur.
Je voudrais que ce code agisse sur les boutons de n'importe quelle feuille (feuille active). J'ai modifié le code sans succès, le code n'agit que sur la feuille1.
VB:
Option Explicit
Dim MesBoutons() As New Classe1
Private Sub Workbook_Activate()
    Dim OleObj As OLEObject
    Dim I As Integer
    'For Each OleObj In Me.Sheets(1).OLEObjects
     For Each OleObj In ActiveSheet.OLEObjects
        If TypeName(OleObj.Object) = "CommandButton" Then
            I = I + 1
            ReDim Preserve MesBoutons(1 To I)
            Set MesBoutons(I).Bouton = OleObj.Object
        End If
    Next OleObj
End Sub

'code du module de classe
Option Explicit
Public WithEvents Bouton As MSForms.CommandButton
Private Sub Bouton_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    With Bouton
        If X < 5 Or X > .Width - 5 Or Y < 5 Or Y > .Height - 5 Then .BackColor = &H8000000F Else .BackColor = &HFF&
    End With
End Sub
En vous remerciant.
 
Dernière édition:
Re : Etendre code à toutes les feuilles

Bonjour cathodique

A tester:

Code:
Private Sub Workbook_Activate()
    Dim OleObj As OLEObject
    Dim I As Integer
    'For Each OleObj In Me.Sheets(1).OLEObjects
    For Each Sh In Sheets
      For Each OleObj In Sh.OLEObjects
        If TypeName(OleObj.Object) = "CommandButton" Then
            I = I + 1
            ReDim Preserve MesBoutons(1 To I)
            Set MesBoutons(I).Bouton = OleObj.Object
        End If
     Next OleObj
    Next
End Sub
 
Re : Etendre code à toutes les feuilles

Bonjour Pierrejean,

Merci beaucoup pour ton code. Sh n'était pas définie, je l'ai définie ainsi: Sh as Sheets.
Ensuite, le code plante sur .OLEObjects (juste après Sh).
Le message d'erreur est le suivant: Membre de méthode ou de données introuvable.

Le fichier comporte 4 feuilles sur lesquelles il y a des boutons ActiveX.

Désolé, j'avais omis de joindre le fichier.
 

Pièces jointes

Re : Etendre code à toutes les feuilles

Re,

C'est exactement le résultat escompté. Parfait.

Mais je t'avoue ne pas avoir compris pourquoi en déclarant Sh en tant que Sheets ça ne fonctionne pas et en variant ça fonctionne (en mettant juste dim sh, ça veut dire sh est un variant, c'est bien ça?).

Merci de m'éclairer un peu plus.
 
Re : Etendre code à toutes les feuilles

Re

Shetts est une collection de sheet et il il n'y a pas possibilité de Sh As Sheet

Si tu tiens a déclarer Sh ce serait Sh as object

Pour ma part ,ne travaillant jamais sur des projets importants je me contente des Variant ce qui me permet de ne pas déclarer les variables (n'en déplaise aux ayatollah de l'option Explicit) et j’évite ainsi les désagréments de variables mal déclarées
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
41
Affichages
698
  • Question Question
Microsoft 365 Problème de date
Réponses
5
Affichages
163
Réponses
7
Affichages
212
Réponses
2
Affichages
202
Retour