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 :

Macro pour case d'option


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    Par défaut Macro pour case d'option
    Bonjour,

    je suis novice en VBA.
    Voici mon problème : je souhaite réaliser une feuille excel de correction de controles sur laquelle il y a les n° de question, le nombre de points associés. Il s'agit de résultats assez binaires (en fait plutot ternaires) et j'ai créé en face de chaque question un "groupbox" contenant 3 "checkbox" (max, med et min).

    Je veux que quand je coche max, la totalité des points soit allouée, med : la moitié et min : aucun.
    Jusque la pas compliqué : j'associe à chaque checkbox une macro (simpliste)

    Mais, lorsqu'il y a 50 questions, je ne veux pas avoir à créer une macro max_quest1, med_quest1, min_quest1, max_quest2, med_quest2, ... jusqu'à 50 (en terme de gain de temps, c'est pas ce qu'on fait de mieux.

    Ce que je souhaiterais serait de faire uniquement 3 macro qui reconnaissent le groupbox (et donc la question) depuis laquelle elles ont été appelée pour ainsi savoir où aller chercher la valeur de la question et où aller écrire la résultat

    Peut-être est-il possible d'associer un groupbox à une case (et donc une adresse de cellule qui servirait de base logique à l'algo) ou autre ?


    Je vous remercie de l'attention que vous portez à ma petite question

    Merci

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut Alfred15 et bonne et heureuse année à tous
    Sur des contrôles (Zone de groupe, Case d'option) issus de la barre d'outils formulaire, sur un module général (ceux qui apparaissent dans le dossier "Module")
    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
    Sub test()
    Dim X, Y
    Dim Nom As String, Cel As Range
    Set X = ActiveSheet.Shapes(Application.Caller)
    Nom = X.AlternativeText
    MsgBox Nom
    Set Cel = X.TopLeftCell
    Nom = Cel.Address(0, 0)
    MsgBox Nom
    For Each Y In ActiveSheet.Shapes
        If Y.TopLeftCell.Address <> X.TopLeftCell.Address Then
            If Not Intersect(X.TopLeftCell, Range(Y.TopLeftCell, Y.BottomRightCell)) Is Nothing Then
                Nom = Y.AlternativeText
                MsgBox Nom
                Exit For
            End If
        End If
    Next Y
    End Sub
    Je travaille directement sous VBE avec la fenêtre "variables locales" en mode pas-à-pas. J'ai mis des boîtes de dialogue pour visualiser directement le résultat sur la feuille. On se retrouve donc avec une seule macro (Test) qui donne successivement l'intitulé de la case d'option cliquée, l'adresse de la cellule en dessous (haut-gauche) du contrôle et l'intitulé de la zone de groupe : Il faut que la zone de groupe engloble la cellule en haut et à gauche de la case d'option pour que ça marche.
    Pour les Groupes/Options, il suffit de faire du copier/coller et la macro reste affectée aux nouveaux contrôles.

    Comme je n'avais pas trop d'éléments, je me suis contenté de ça. Pour gérer les Maxi/inter/mini, je suggère un Select Case

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    Par défaut
    Bonsoir, et bonne année à vous également

    Merci pour cette réponse claire nette et précise. J'ai bien étudié votre code et il me semble avoir tout compris.
    Ce me paraît en effet tout à fait adéquat.


    Néanmoins, comme je suis un peu faignant, j'avais pensé automatiser la création des groupbox et des 3 cases à cocher en fonction du nombre de questions présentes.

    J'ai donc réalisé le prototype suivant qui fonctionne pour 9 questions (j'adapterai plus tard à une variable : c'est encore dans mes cordes me semble-t-il)



    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
    Sub Bouton_Valide_Exo()
        Dim i As Byte
     
     
        For i = 1 To 9
     
                With Feuil1
     
                Set Group = .GroupBoxes.Add(.Cells(i + 8, 5).Left, .Cells(i + 8, 5).Top + 0.1 * .Cells(i + 8, 5).Height, 3 * .Cells(i + 8, 5).Width, 0.8 * .Cells(i + 8, 5).Height)
                Set BMax = .OptionButtons.Add(.Cells(i + 8, 5).Left, .Cells(i + 8, 5).Top + 0.1 * .Cells(i + 8, 5).Height, .Cells(i + 8, 5).Width, 0.8 * .Cells(i + 8, 5).Height)
                Set BMed = .OptionButtons.Add(.Cells(i + 8, 6).Left, .Cells(i + 8, 5).Top + 0.1 * .Cells(i + 8, 5).Height, .Cells(i + 8, 6).Width, 0.8 * .Cells(i + 8, 5).Height)
                Set BMin = .OptionButtons.Add(.Cells(i + 8, 7).Left, .Cells(i + 8, 5).Top + 0.1 * .Cells(i + 8, 5).Height, .Cells(i + 8, 7).Width, 0.8 * .Cells(i + 8, 5).Height)
                End With
     
                Group.Name = "Groupe " & i
                Group.Text = "Question" & i
                BMax.Text = "Max"
                BMed.Text = "Med"
                BMin.Text = "Min"
                BMax.LinkedCell = Feuil1.Cells(i + 8, 2)           
     
     
        Next i
     
        Feuil1.Shapes("Groupe " & 3).Delete
        Feuil1.Shapes("Groupe " & 2).Text = "Alfred"
     
    End Sub

    Certaines choses fonctionnent :
    - positions régulières des groupbox et checkbox
    - noms corrects des objets
    - liens entre les checkbox d'un même groupe

    Mais d'autres non :
    - l'attribution dynamique des cellules liées par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BMax.LinkedCell = Feuil1.Cells(i + 8, 2)
    - le changement ultérieur d'un nom (inutile ici, certes, mais j'aimerais comprendre mon erreur toute de même) par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Feuil1.Shapes("Groupe " & 2).Text = "Alfred"
    alors que la commande à mes yeux presque identique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Feuil1.Shapes("Groupe " & 3).Delete
    fonctionne très bien...



    Bref je manque encore de beaucoup de recul sur ce langage.

    Merci beaucoup

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/03/2015, 15h26
  2. [XL-2007] Macro pour selectionner et copier une forme (cercle) dans une case
    Par pit22 dans le forum Macros et VBA Excel
    Réponses: 23
    Dernier message: 27/01/2014, 09h59
  3. [XL-2007] Macro à partir d'une case d'option (formulaire)
    Par guigol dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 23/02/2013, 12h55
  4. Réponses: 1
    Dernier message: 20/05/2011, 18h19
  5. [VBA-E] Probleme Macro pour gérer des cases à cocher
    Par bibiche2184 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 09/06/2006, 18h03

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