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 :

Double click sur Option Button désactivé


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    autre
    Inscrit en
    Octobre 2015
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Octobre 2015
    Messages : 49
    Par défaut Double click sur Option Button désactivé
    Bonjour à tous,

    Je voudrais savoir comment désactiver par vba le double clique sur un contrôle "Case d'options" formulaire excel. Mon problème est que je le désactive avec l'appel suivant : mais que si je double clique dessus, ça appelle quand même la macro associée.

    Merci pour votre aide

    Romain

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 615
    Billets dans le blog
    67
    Par défaut
    Bonsoir,

    Il n'y aurait pas moyen de faire référence à ce contrôle dans le code de la macro ?

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  3. #3
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Salut, où as tu inséré ton code ?

  4. #4
    Membre averti
    Homme Profil pro
    autre
    Inscrit en
    Octobre 2015
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Octobre 2015
    Messages : 49
    Par défaut
    Merci de votre aide,

    En fait, j'ai un groupe de deux cases d'options. Chaque case d'option est associée à une procédure (en fait, elles permettent de mettre mon projet dans le sens croissant ou décroissant par rapport aux kilométrages). Le problème, c'est que j'ai remarqué que si je clique sur "décroissant", pendant le traitement l'utilisateur peut recliquer sur "croissant" et c'est le bug. Du coups, j'ai pensé à mettre le paramètre "Enabled = False" sur mes cases d'option pendant le traitement et les ré-acitver après. Ça fonctionne mais seulement si j'essaie de cliquer une fois. Si je double clique, malgré le temps ou elles sont désactivées, ça prends en compte ce double clique comme si elles n'étaient pas désactivées et c'est ça que je souhaiterais éviter. Je met quand même le code de la procédure qui inverse le sens de mes données. Elles est appelée dans la procédure des cases d'options.

    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
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
     
    Public Sub ReverseWorkDirectionType0(ByRef shTable() As Excel.Worksheet)
     
        Application.screenUpdating = False
        Application.EnableEvents = False
     
        UF_ProgressBar.Display text1:=IIf(shTable(4).Range("F7") = PROJECTWORKDIRECTION.Increasing, c_increasingConvert, c_decreasingConvert)
     
        Dim ob(1 To 6) As Excel.OptionButton
        Dim table() As REVERSEDATA
        Dim i%, j%, k%, lastLine%
     
        ReDim table(shTable(4).Range("F23") - 1)
        lastLine = shTable(4).Range("F24")
     
        ' Verouille les options buttons
        For i = LBound(ob) To UBound(ob)
            Set ob(i) = shTable(0).OptionButtons("Option Button " & i)
            ob(i).Enabled = False
        Next i
     
        UF_ProgressBar.SetValueMax shTable(4).Range("F23") * 6 ' (x6 car on lit 2x par feuille de travail (x3 feuilles de travail))
        UF_ProgressBar.SetTextLabel2 "0 %"
        SheetsUnprotect
     
        Rem Boucle les 3 feuilles de travail
        For j = 1 To 3
     
            Rem Lecture des données
            k = -1
            For i = c_firstLineProject To lastLine
     
                Incr k
                With shTable(j)
                    table(k).km = -.Cells(i, 2) ' Km (Double car jamais vide)
                    table(k).cumul = .Cells(i, 3) ' Cumul
                    table(k).rep = .Cells(i, 5) ' Repère
                    table(k).repTextColor = .Cells(i, 5).Font.Color ' Couleur texte repère
                    table(k).haRef = .Cells(i, 6) ' Hauteur : référence
                    table(k).haAv = .Cells(i, 7) ' Hauteur : avant bourrage
                    table(k).haAp = .Cells(i, 10) ' Hauteur : après bourrage
                    table(k).diRef = IIf(IsNum(.Cells(i, 12)), -.Cells(i, 12), "") ' Distance : référence
                    table(k).diAv = IIf(IsNum(.Cells(i, 13)), -.Cells(i, 13), "") ' Distance : avant bourrage
                    table(k).diAp = IIf(IsNum(.Cells(i, 17)), -.Cells(i, 17), "") ' Distance : après bourrage
                    table(k).deRef = IIf(IsNum(.Cells(i, 22)), -.Cells(i, 22), "") ' Dévers : référence
                    table(k).deAv = IIf(IsNum(.Cells(i, 25)), -.Cells(i, 25), "") ' Dévers : avant bourrage
                    table(k).deAp = IIf(IsNum(.Cells(i, 31)), -.Cells(i, 31), "") ' Dévers : après bourrage
                End With ' table(j)
     
                UF_ProgressBar.SetValue
     
            Next i
     
            Rem Écriture des données et recalcul des feuilles
            For i = c_firstLineProject To lastLine
     
                With shTable(j)
                    .Cells(i, 2) = table(k).km  ' Km
                    .Cells(i, 3) = IIf(IsNum(table(k).cumul), CDbl(table(k).cumul), "") 'CDbl(table(k).cumul)  ' Cumul
                    .Cells(i, 5) = table(k).rep ' Repère
                    .Cells(i, 5).Font.Color = table(k).repTextColor ' Couleur texte repère
                    Rem Hauteur
                    .Cells(i, 6) = table(k).haRef ' Référence
                    .Cells(i, 7) = table(k).haAv ' Avant bourrage
                    .Cells(i, 10) = table(k).haAp ' Après bourrage
                    HeightCalculate .Cells(i, 8), .Cells(i, 7), .Cells(i, 6) ' Correction 0
                    HeightCalculate .Cells(i, 9), .Cells(i, 7), .Cells(i, 6), .Range("I7") ' Correction ??
                    HeightCalculate .Cells(i, 11), .Cells(i, 10), .Cells(i, 6) ' Résultat
                    Rem Distance
                    .Cells(i, 12) = table(k).diRef ' Référence
                    .Cells(i, 13) = table(k).diAv ' Avant bourrage
                    .Cells(i, 17) = table(k).diAp ' Après bourrage
                    DistanceCalculate .Cells(i, 15), .Cells(i, 13), .Cells(i, 12) ' Correction
                    DistanceCalculate .Cells(i, 19), .Cells(i, 17), .Cells(i, 12) ' Résultat
                    Rem Dévers
                    .Cells(i, 22) = table(k).deRef ' Référence
                    .Cells(i, 25) = table(k).deAv ' Avant bourrage
                    .Cells(i, 31) = table(k).deAp ' Après bourrage
                    CantCalculate .Cells(i, 28), .Cells(i, 25), .Cells(i, 22) ' Correction
                    CantCalculate .Cells(i, 34), .Cells(i, 31), .Cells(i, 22) ' Résultat
                    CantArrows .Cells(i, 22)
                    CantArrows .Cells(i, 25)
                    CantArrows .Cells(i, 31)
                End With ' table(j)
     
                Incr k, -1
                UF_ProgressBar.SetValue
     
            Next i
     
        Next j
     
        Rem Si on est pas en mode admin, on verouille les feuilles
        If shTable(4).Range("F1") <> 1 Then _
            SheetsProtect
     
        ' Déverouille les options buttons
        For i = LBound(ob) To UBound(ob)
            ob(i).Enabled = True
            Set ob(i) = Nothing
        Next i
     
        Erase table
        Unload UF_ProgressBar
     
        Application.EnableEvents = True
        Application.screenUpdating = True
     
    End Sub
    Alors bien sûr, en réalité j'ai plus de deux cases d'options mais je les ai toutes désactivées et celles dont je parle sont groupées ensemble et les quatre autres sont ensemble dans un autre groupe.

  5. #5
    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
    Salut,

    Si tu veux "désactiver" un gestionnaire d'évènement, il te faut définir des indicateurs (variables booléennes) au niveau de la feuille / formulaire / classe où l'évènement se produit.
    Si l'indicateur est à True, on traite l'evennement.
    S'il est à faux, on ne fait rien.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private DoDoubleClick As Boolean
     
    Public Sub MyButton_DoubleClick()
        If DoDoubleClick Then
           '// Do something
        End If
    End Sub
    PS:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Application.screenUpdating = False
        Application.EnableEvents = False
    Tu n'as pas besoin de ces instructions pour l'instant, retire les et attèles toi à produire le comportement souhaité.
    Je ne pense d'ailleur pas que tu en aies besoin tout court.

  6. #6
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 615
    Billets dans le blog
    67
    Par défaut
    Bonjour,

    J'imagine que si une des cases d'option est déjà désactivée au début alors on sort de la procédure (car procédure déjà en cours d'exécution ?) :

    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
    Public Sub ReverseWorkDirectionType0(ByRef shTable() As Excel.Worksheet)
        Dim ob(1 To 6) As Excel.OptionButton
        Dim table() As REVERSEDATA
        Dim i%, j%, k%, lastLine%
     
        ' Verouille les options buttons
        For i = LBound(ob) To UBound(ob)
            Set ob(i) = shTable(0).OptionButtons("Option Button " & i)
            if ob(i).Enabled = False then exit sub ' on sort si désactivé -> proc. déjà en cours
            ob(i).Enabled = False
        Next i
     
        ' Reste du code..
     
    end sub
    Quelque chose comme ça..
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 20/05/2010, 13h15
  2. double click sur un bouton
    Par gdpasmini dans le forum Windows
    Réponses: 7
    Dernier message: 10/05/2006, 14h38
  3. [VBA-E] Double-Click sur une cellule
    Par boosty dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/04/2006, 15h12
  4. [MFC] Detection d'un double click sur un slider
    Par bennnun dans le forum MFC
    Réponses: 4
    Dernier message: 01/03/2006, 08h07
  5. simuler un double click sur une liste dans un dbgrid
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 1
    Dernier message: 01/09/2005, 10h45

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