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 :

Evènements associés à un groupe d'Images [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 92
    Points : 48
    Points
    48
    Par défaut Evènements associés à un groupe d'Images
    Bonjour,

    Je ne sais pas très bien me servir des module de classe, mais à force de chercher un peu partout sur le net, j'ai écrit ce code :

    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
    Dim hImage, wImage As Integer
    Dim fromLeft, shiftLeft, fromTop As Integer
     
    Private Sub UserForm_Initialize()
        '---------------------------------
        '  Initialisation des variables
        '---------------------------------
        fromTop = 300
        fromLeft = 15
        shiftLeft = 95
        hImage = 90
        wImage = 90
     
        Call CreerImages (3)
     
    End Sub
     
    Sub CreerImages(nbImage)
    '---------------------------------
    '  Création de [nbImages] images à la suite
    '---------------------------------
     
        Dim nb As Integer, obj As Control, i As Integer
        Dim mesImages() As MSForms.image
        Dim monImage As MSForms.image
     
        On Error Resume Next
        For i = 0 To nbImage - 1
          Set monImage = Me.Controls("" & i)
          If monImage Is Nothing Then
            Set monImage = Me.Controls.Add("Forms.Image.1", "monImage" & i, True)
            With monImage
              .Top = fromTop
              .Left = fromLeft + shiftLeft * i
              .Height = hImage
              .Width = wImage
            End With
          Else
            MsgBox "existe déjà !"
          End If
          Set monImage = Nothing
        Next
     
        For Each obj In Me.Controls
          If obj.Name Like "monImage*" Then
            nb = nb + 1
            ReDim Preserve mesImages(1 To nb)
            Set mesImages(nb).ImageEvents = obj
          End If
        Next obj
        Set obj = Nothing
    End Sub
    et un module de classe pour interagir avec ces images :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Option Explicit
    Public WithEvents ImageEvents As MSForms.image
     
    Private Sub ImageEvents_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        Dim qui As String
        qui = RechercheImages.ActiveControl.Name
        MsgBox qui
    End Sub

    Mais ca me marche pas. Ca créé bien les 3 images, mais ces images ne réagissent pas à un click de la souris.

    A noter aussi une chose que je ne comprend pas : quand je tape "MSForms.Image", le correcteur me vire la majuscule à Image, comme s'il ne connaissait pas l'objet. Ca n'a ptet rien à voir, mais j'aurais aimé savoir d'où ça pouvait venir.

    Merci d'avance !

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut heu
    bonjour

    tu n'est pas loin de trouver
    il te manque l'inscription dans la colection de tes image

    regarde dans masignature en bas de mes message mon effet mouse out

    il conprend une macro qui justement enregistre tout les bouton dans la colection pour qu'il soient pris en compte par ta classe

    je vais essayer de reprendre ton code je vais voir ce que je peut faire
    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 92
    Points : 48
    Points
    48
    Par défaut
    Merci, j'ai trouvé ! Il fallait déclarer

    "Private mesImages() As New Classe1"dans les déclarations du userform.

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    rebonjour

    alors voila

    dans le module du userform tu met ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub UserForm_Activate()
    Set maform = Me ' on dis que la variable object"maform est le userform lui même
     
    CreerImages 3 'on appelle la macro de création des images suivi du nombre voulu
    End Sub
    comme tu peux le voir j'ai choisi de séparer les macro du userform
    très pratique en cas de future modification

    ensuite tu ajoute un module standard dans ton projet et tu met ça:
    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
     
    Option Explicit
     
    'pour instancier la classe pour les images
    Public mesImages() As New Classe1    ' ce qui te manquait c'etait ca!!!!!!INSTANCIER LA CLASSE!!!!!!!!!!
    Public maform As Object    'cet object deviendra le userform en public car il va etre declarer dans la sub de l'userform
     
    'les variables neccessaire
    Dim monImage As Object, obj As Object, nb As Long    'MSForms.Image
     
     
     
    '  Initialisation des variables constante je l'ai les ai mis en constante puisqu'elle ne change pas
    '---------------------------------
    Const fromTop = 300
    Const fromLeft = 15
    Const shiftLeft = 95
    Const hImage = 90
    Const wImage = 90
     
     
    'nous alons créer les image maintenant
    Sub CreerImages(nbImage)
    '---------------------------------
    '  Création de [nbImages] images à la suite
    '---------------------------------
     
        Dim nb As Integer, obj As Control, i As Integer
     
     
     
        On Error Resume Next
        For i = 0 To nbImage - 1 ' on demarre la boucle
            Set monImage = maform.Controls("Image" & i) 'on attribu l'identité de l'object monImage
            If monImage Is Nothing Then 'si elle n'existe pas
                Set monImage = maform.Controls.Add("Forms.Image.1", "monImage" & i, True) 'on ajoute l'image
                With monImage   ' on la parametre
                    .Top = fromTop
                    .Left = fromLeft + shiftLeft * i
                    .Height = hImage
                    .Width = wImage
                End With
            Else
                MsgBox "existe déjà !"
            End If
            Set monImage = Nothing 'on vide la variable pour la prochaine boucle
        Next
     
    ' on va maintenant enregistrer la colection des image ce n'est pas obligatoire le "CALL" devant l'appel
      'donc nous appelons la macro   
    enregistrement_de_la_colection
        End Sub
     
    Sub enregistrement_de_la_colection()
        For Each obj In maform.Controls 'on demarre la boucle
            If TypeName(obj) = "Image" Then si l 'object est une image
                nb = nb + 1 'on incréménte la variable nbde un en un
                ReDim Preserve mesImages(1 To nb) 'on enregistre la colection
                Set mesImages(nb).ImageEvents = obj 'l'image est intégrée dans la colection
            End If
        Next obj 'object suivant
        Set obj = Nothing ' la variable "obj" est vidée
    End Sub
    et voila maintenant ton module classe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Option Explicit
    Public WithEvents ImageEvents As MSForms.Image
     
    Private Sub ImageEvents_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        MsgBox ImageEvents.Name
    End Sub



    voila tu vois il ne te manquais pas grand chose j'ai separer tout les macros
    pour plus de clarté dans le code et si tu veux modifier un parametre et que tu te trompe ca evite de bousiller le reste du code

    voila si tu veux de l'aide n'hesite pas


    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 92
    Points : 48
    Points
    48
    Par défaut
    Merci beaucoup ! C'est ce que j'ai fait, ça m'a beaucoup aidé

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bonjour
    ok tu va garder qu'elle option alors ?
    que pense tu de separer les modules n'est-ce pas mieux et plus clair?

    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

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

Discussions similaires

  1. associer un commentaire à une image
    Par arkorrigan dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/06/2008, 14h43
  2. Ajout/Modification de données - Evénements associés
    Par Domi2 dans le forum VBA Access
    Réponses: 4
    Dernier message: 28/02/2008, 11h48
  3. Evénement associé à une classe
    Par AlexFred dans le forum VBA Access
    Réponses: 9
    Dernier message: 09/02/2007, 11h39
  4. groupe d'images / TJpegImage
    Par frenchsting dans le forum Delphi
    Réponses: 4
    Dernier message: 24/01/2007, 10h37
  5. [Access 2000] Evénement click sur groupe d'option
    Par Mariboo dans le forum Access
    Réponses: 1
    Dernier message: 22/09/2006, 14h52

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