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 :

Problème déclenchement Evènement sur CommandButton


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Par défaut Problème déclenchement Evènement sur CommandButton
    Bonjour,

    J'ai un Userform contenant 50 CommandButton. Les CommandButton prennent une couleur suivant l'évènement : j'ai un planning, 50 bureaux, j'ai fait un Userform où j'ai mis 50 commandbutton représentant les bureaux, si les bureaux sont occupés, ils apparaissent en rouge, s'ils sont disponibles, ils sont en vert.

    J'ai donc le code me permettant de boucler sur les bureaux et de les mettre en couleur suivant l'état (dispo ou non) :

    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
    Private Sub UserForm_Initialize()
    Dim MaPlage As Range
    Dim DerligR2 As Integer
    Dim ligne As Long
     
     
     
    If Modification Then
            'Déterminer la première ligne libre du tableau
            ligne = 10 'ActiveCell.Row
     
            'Créer la nouvelle ligne d'enregistrement
            If Cells(ligne, 6) = "" Then
     
     
         With Sheets("Planning")
        DerligR2 = .Range("F" & .Rows.Count).End(xlUp).Row
        Set MaPlage = .Range(.Cells(1, 6), .Cells(DerligR2, 6))
        End With
     
       Dim ctrl As Control
     
       For Each ctrl In Me.Controls
     
                With MaPlage
                    Set c = .Find(ctrl.Caption, LookIn:=xlValues, lookat:=xlWhole)
     
                    If c Is Nothing Then
                        ctrl.BackColor = &HFF00&
     
                        Else
                        ctrl.BackColor = &HFF&
                    End If
                End With
        Next
     
            End If
        End If
    Jusque là, tout fonctionne, mais je souhaiterais cliquer sur le commandbutton d'un bureau disponible (=donc identifié en vert), afin de l'affecter, j'ai donc mis :

    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
    Private Sub CommandButton1_Click()
    Dim MaPlage As Range
    Dim DerligR2 As Integer
     
     
     
         With Sheets("Planning")
        DerligR2 = .Range("F" & .Rows.Count).End(xlUp).Row
        Set MaPlage = .Range(.Cells(1, 6), .Cells(DerligR2, 6))
        End With
     
     
                With MaPlage
                    Set c = .Find(CommandButton1.Caption, LookIn:=xlValues, lookat:=xlWhole)
     
                    If c Is Nothing Then
                        CommandButton1.BackColor = &HFF00&
     
                        Else
                        CommandButton1.BackColor = &HFF&
                    End If
                End With
     
     
    End Sub
    Mais cela ne fonctionne pas et je comprends pas pourquoi….
    J'ai appelé l'Userform par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Sub AfficheUSF()
    Modification = False
    UserForm1.Show
    End Sub
    et dans la feuille "Planning", j'ai mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Option Explicit
     
    Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        If Cells(ActiveCell.Row, 6) = "" Then
            Cancel = True
            'Modification d'une ligne
            Modification = True
     
          UserForm1.Show
     
        End If
     
     
    End Sub
    Mais idem, lorsque je clique sur une cellule de la colonne 6, cela ne déclenche pas l'USERFORM……

    Dans la colonne 6, se trouvent les bureaux déjà utilisés…

    Merci de m'indiquer ce qui ne va pas….et ou de m'expliquer pourquoi cela ne fonctionne pas…..


    AU CAS OU, je mets le fichier en PJ….avec juste l'évènement Userform1 : lors de l'ouverture, identification des bureaux dispo en vert et en rouge, les bureaux déjà pris…..

    merci pour votre aide,

    A+

    Eric
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Une piste avec un module de classe afin de ne pas avoir 50 fois la même proc évènementielle (contenant 50 CommandButton). Je ne sais pas trop comment tu veux gérer l'affectation des bureaux à tes différents collègues mais ça va déjà te donner une direction. Je te re-poste ton classeur et je mets le code ici. Dans le module de la Form :
    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
    Dim TblBtn() As New Classe1
     
    Private Sub UserForm_Initialize()
     
        Dim Ctrl As Control
        Dim MaPlage As Range
        Dim Cel As Range
        Dim I As Integer
     
        With Sheets("Planning")
     
            Set MaPlage = .Range(.Cells(1, 6), .Cells(.Rows.Count, 6).End(xlUp))
     
        End With
     
        For Each Ctrl In Me.Controls
     
            I = I + 1
            ReDim Preserve TblBtn(1 To I)
            Set TblBtn(I).Bouton = Ctrl
     
            Set Cel = MaPlage.Find(Ctrl.Caption, , xlValues, xlWhole)
     
            Ctrl.BackColor = IIf(Cel Is Nothing, &HFF00&, &HFF&)
     
        Next
     
    End Sub
    Dans le module standard, c'est ici qu'il va falloir que tu regarde :
    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
    Public Sub Affecter(Btn As MSForms.CommandButton)
     
        Dim MaPlage As Range
        Dim Cel As Range
     
        With Sheets("Planning")
     
            Set Cel = .Cells(.Rows.Count, 6).End(xlUp).Offset(1, 0)
     
            If Cel.Row < 4 Then Set Cel = Range("F4")
     
            Set MaPlage = .Range(.Cells(1, 6), .Cells(.Rows.Count, 6).End(xlUp))
     
        End With
     
        If Btn.BackColor = &HFF00& Then 'si dispo (vert)
     
            Cel.Value = Btn.Caption
            Btn.BackColor = &HFF&
     
        Else
     
            Set Cel = MaPlage.Find(Btn.Caption, , xlValues, xlWhole)
     
            If Not Cel Is Nothing Then
     
                Cel.Value = ""
                Btn.BackColor = &HFF00&
     
            End If
     
        End If
     
    End Sub
    Et dans le module de classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public WithEvents Bouton As MSForms.CommandButton
     
    Private Sub Bouton_Click()
     
        Affecter Bouton
     
    End Sub
    Hervé.
    Fichiers attachés Fichiers attachés

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Par défaut
    Merci Theze,

    Merci pour ton aide, par contre 2 petits soucis :

    Le premier : j'ai vu que lorsque l'on sélectionnait un bureau dans l'Userform, lorsqu'il s'inscrivait dans la cellule, le format changeait : par exemple , dans l'Userform ( "1.01" ) et dans la cellule ("1,01")….

    Le deuxième et qui apporte une réponse à ta question : en fait, mon but est que lorsque je clique sur la cellule du "collègue10" (F13), l'Userform s'ouvre, montre en couleur verte les bureaux dispo, et donc, si je clique sur un des bureaux, il s'inscrit dans la case F13 (=collègue 10), ensuite je vais sur le "collègue20" (n'ayant pas de bureaux attitré), je clique etc, etc…

    Et je ne connaissais pas les "modules de classes", je te remercie pour l'info, et vais faire 2-3 recherches de tuto pour comprendre ces "modules de classes" et leurs utilisation…….


    Merci pour ton aide,

    A+
    Eric

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    pourqoui ne pas avoir utilisé des checkbox tu peux par ses propriétés lui donner la forme d'un bouton et toujour dans les propriétés lui dir rouge quand il est true et vert quamd il est false.

    Je sais que 50 controles à modifier c'est galaire mais...

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Par défaut
    Merci rdurupt,

    Pour l'instant (sentant que je risquais de devoir changer 2-3 trucs…), je n'ai pas fait les 50 commandbutton, donc c'est toujours possible….

    Donc par rapport à la proposition de Theze, il faudrait que je change le code en mettant checkbox à la place de commandbutton ? par contre, je n'ai pas trouvé la propriété pour remplacer la checkbox par un bouton…(je n'ai vu que la "specialeffect", mais cela met juste le "carré" en gras…)

    Et si oui, cerise sur le gâteau : serait il possible de mettre en dessous du bouton le nom de l'activité ? ainsi, je pourrais voir lorsqu'un bouton est rouge (donc bureau pris), le nom de l'activité exercée dans ce bureau ? je m'explique : certains bureaux sont dédiés à la réception, d'autres sont pour des activités administratives. Donc si un bureau de réception est utilisé par un collègue qui va faire de l'administratif (et naturellement que je n'ai plus assez de bureaux de réception), je pourrai "voir" que je peux changer le bureau et mettre le collègue dans un bureau "administratif" ?

    Dans mon fichier, en colonne E, j'avais mis un alerte : si le bureau de réception était utilisé pour faire de l'administratif, la cellule devenait rouge (=1 trait) me permettant de voir où je pouvais opérer des changements lorsque j'avais un problème de bureau (=plus de bureaux de réception..)

    Mais bon, comme je le disais, ce serait THE cerise sur le gâteau…

    Merci pour ton aide,

    A+
    Eric

  6. #6
    Invité
    Invité(e)
    Par défaut
    Oui tout ça c'est posible et en plus tu peux le metre directement sur le bouton!

    Vue que je suis dans les transport, dificile de te donner un exemple.

    Mon poste précédent, s'adressait tout autant a toi qu'au développeur pouvant t'aider a metre en oeuvre cette solution!

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

Discussions similaires

  1. [Débutant] Problème Evénement sur gotfocus et lostfocus
    Par kruger54 dans le forum VB.NET
    Réponses: 0
    Dernier message: 18/05/2015, 05h54
  2. Réponses: 4
    Dernier message: 16/07/2013, 19h40
  3. Problème d'Evènement sur contrôle personnalisé
    Par Ishizaki dans le forum ASP.NET
    Réponses: 6
    Dernier message: 08/08/2008, 11h16
  4. [CR] Problème de sélection sur un champ date
    Par noluc dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 21/11/2003, 16h56
  5. Evènement sur clic droit !?
    Par soccersoft dans le forum Composants VCL
    Réponses: 6
    Dernier message: 26/12/2002, 21h39

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