IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Boucle sur des frames (module de classe) [XL-2019]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    instituteur
    Inscrit en
    Juillet 2018
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : instituteur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 617
    Par défaut Boucle sur des frames (module de classe)
    Bonjour à vous
    je voudrais boucler sur des frames pour pouvoir utiliser l'évènement Label_MouseMove de chaque label.
    j'ai un userform sur lequel se trouvent plusieurs frames et labels. mais je voudrais déclencher les évènements des labels se trouvant dans les frames spécifiques.

    Dans un module de classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    Option Explicit
    
    Public WithEvents Frm As MSForms.Frame
    Public WithEvents Lbel As MSForms.Label
    
    Dim Cls() As New ClsCouleur
    Dim Ctls As Control
    
    Function ChangerCouleur(ByRef Usf As Object)
    Dim i As Integer, j As Integer, Obj As Object
        For j = 90 To 95
            i = i + 1
            ReDim Preserve Cls(1 To i)
            Set Obj = Usf("Frame" & j)
            Set Cls(i).Frm = Obj
        Next
    End Function
    
    Function ChangerCouleur2(ByRef Usf As Object)
    Dim i As Integer, j As Integer, Obj As Object
    
        For Each Ctls In Usf.Controls
            i = i + 1
            ReDim Preserve Cls(1 To i)
            Select Case TypeName(Ctls)
                Case "Label"
                Set Cls(i).Lbel = Ctls
            End Select
        Next Ctls
    End Function
    
    
    Function PasdeCouleur(ByRef Uf As Object)
        For Each Ctls In Uf.Frm.Controls
            If TypeOf Ctls Is MSForms.Label Then
                Ctls.ForeColor = vbWhite
                Ctls.SpecialEffect = fmSpecialEffectFlat
            End If
        Next
        
    End Function
    
    Function CouleurLabel(ByVal Uf As Object)
    Dim i As Integer, ObjFrame As Control, j As Integer
    
        For i = 90 To 95
        j = j + 1
            
            Set ObjFrame = Uf("Frame" & i)
            For Each Ctls In Uf.ObjFrame.Controls
                If TypeOf Ctls Is MSForms.Label Then
                     Ctls.ForeColor = &HFFFF&
                    Ctls.SpecialEffect = fmSpecialEffectEtched
                End If
            Next
        Next
    End Function
    
    
    Private Sub Frm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    PasdeCouleur Me
    End Sub
    
    Private Sub Lbel_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    
     CouleurLabel Me
    End Sub
    
    
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    123
     
     
    Module de l'userform
    Option Explicit Dim ChgCouleur As New ClsCouleur, ChgCouleur2 As New ClsCouleur Private Sub UserForm_Initialize() ChgCouleur.ChangerCouleur Me ChgCouleur2.ChangerCouleur2 Me End Sub
    lors de l'exécution Set ObjFrame = Uf("Frame" & i) cette partie du code est surligné. message: propriété ou méthode non gérée par cet objet

    veuillez m'aider svp

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    il faut utiliser la propriété Controls

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Uf.Controls("Frame" & j)

  3. #3
    Membre éclairé
    Homme Profil pro
    instituteur
    Inscrit en
    Juillet 2018
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : instituteur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 617
    Par défaut
    Merci de ta réponse mais toujours le même message.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Set ObjFrame = Uf.Controls("Frame" & i)

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    @Joe:
    Heu, ce machin, ça ne fonctionne que si les frames s'appellent Fram1, Frame2, Frame3 ect ect ... rien n'est moins vrai !!

    @Mr l'Ashanti:
    Si tu veux boucler sur toutes les frames, tu n'as pas 36 choix, il te faut boucler sur tous les contrôles et filtrer.
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim Ctrl As MSForms.Control
    For Each Ctrl In Me.Controls
        If TypeOf Ctrl Is MSForms.Frame Then
            '// faire quelque chose
        End If
    Next

  5. #5
    Membre éclairé
    Homme Profil pro
    instituteur
    Inscrit en
    Juillet 2018
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : instituteur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 617
    Par défaut
    Merci
    Effectivement, j'ai plusieurs frames et plusieurs labels dispersés sur l'userform et j'ai renommé les frames qui me serviront d'échange ( frame 90 à 95).
    Donc je voudrais que lorsque le curseur survolant le label, il change de couleur et lorsqu'il fait de même sur le frame, on annule la mise en forme du label.
    La première idée marche nettement et ça se trouve dans la procédure function pasdecouleur.

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par deedolith Voir le message
    @Joe:
    Heu, ce machin, ça ne fonctionne que si les frames s'appellent Fram1, Frame2, Frame3 ect ect ... rien n'est moins vrai !!
    Personne n'a dis le contraire ...

    j'ai apporté une réponse pratique à son erreur d'écriture

  7. #7
    Membre éclairé
    Homme Profil pro
    instituteur
    Inscrit en
    Juillet 2018
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : instituteur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 617
    Par défaut
    Merci à vous pour les réponses...
    Mais toujours le même message. Je me demande si ce n'est pas parce que nous sommes dans un module de classe ? Car le code fonctionne très bien ailleurs.

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    Citation Envoyé par Mr l'Ashanti Voir le message
    Je me demande si ce n'est pas parce que nous sommes dans un module de classe ?
    Rien à voir.
    A mon avis, puisque tu concatène une chaîne pour former un nom, et référencer les contrôles par leur nom, tu dois construire un nom qui n'existe pas.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. boucle sur des noms de répertoires
    Par machmalabala dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 29/08/2007, 11h34
  2. Boucle sur des lignes et colonnes
    Par Livet dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/08/2007, 19h45
  3. boucle sur des contrôles
    Par xawax34 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 31/05/2007, 19h06
  4. Boucle sur des boutons radios
    Par jmarey dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 16/05/2006, 11h03
  5. [FLASH MX2004] Boucle sur des clips est-ce possible ?
    Par vbcasimir dans le forum Flash
    Réponses: 4
    Dernier message: 09/02/2006, 09h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo