Macro pour afficher et masquer des lignes
onjour,
Je me tourne vers ce forum d'experts en programmation VBA et surtout vers des personnes qui ont la gentillesse de bien vouloir m'aider.
Mon problème est le suivant: je suis en train de réaliser un questionnaire dynamique.
La question 3 propose 6 réponses possibles (plusieurs choix possibles) sous forme de cases à cocher.
Les 3 premières tickboxs affichent les questions de la partie 2 (lignes 44 à 59).
La box 4 affiche la partie 3 (lignes 60 à 75)
Les 2 dernières boxs affichent la partie 4 (lignes 76 à 97)
Lorsque le questionnaire est vierge, on ne doit voir apparaître que les 3 premières questions.
Enfin les questions situées des parties 2, 3 et 4 sont composées de cases à cocher et de groupements de cases d'options.
Or, mes tentatives d'élaborations de macro pour le problème ci dessus me font apparaître des erreurs d'affichage car je ne fais que masquer/apparaître des lignes mais pas les objets qui sont situés sur ces lignes. Comment remédier à ce problème.
Je joins mon fichier anonymisé.
Merci beaucoup pour votre aide.
Je n'ai accès qu'à Excel 2003, je ne peux malheureusement pas executer ton fichier.
Je sais qu'en utilisant les contrôles ActiveX plutôt que ceux que tu as utilisé, tu peux les lier à une cellule et les masquer en même temps que la ligne.
Pour ce faire, clic droit, format de contrôle, propriétés et déplacer et dimensionner avec les cellules.
Merci mais les boutons activeX ne me permettent pas d'attribuer un valeur au bouton : si j'ai 4 boutons sur la meme ligne et que je ne peux répondre qu'à une seule option, avec les boutons formulaire j'attribue facilement une valeur à chaque bouton (1,2,3,4).
A tout hasard je te fais apparaitre mon code de macro que j'ai "essayé" de mettre en place:
'Case à cocher 67
Sub Caseàcocher67_Cliquer()
If ActiveSheet.Shapes("Case à cocher 67").OLEFormat.Object.Value = 1 Then
Worksheets("Questionnaire").Rows("60:97").EntireRow.Hidden = True 'Ligne qui fait disparaître
Else
Worksheets("Questionnaire").Rows("43:97").EntireRow.Hidden = False 'Ligne qui fait apparaître
End If
End Sub
'Case à cocher 68
Sub Caseàcocher68_Cliquer()
If ActiveSheet.Shapes("Case à cocher 68").OLEFormat.Object.Value = 1 Then
Worksheets("Questionnaire").Rows("60:97").EntireRow.Hidden = True 'Ligne qui fait disparaître
Else
Worksheets("Questionnaire").Rows("43:97").EntireRow.Hidden = False 'Ligne qui fait apparaître
End If
End Sub
'Case à cocher 69
Sub Caseàcocher69_Cliquer()
If ActiveSheet.Shapes("Case à cocher 69").OLEFormat.Object.Value = 1 Then
Worksheets("Questionnaire").Rows("60:97").EntireRow.Hidden = True 'Ligne qui fait disparaître
Else
Worksheets("Questionnaire").Rows("43:97").EntireRow.Hidden = False 'Ligne qui fait apparaître
End If
End Sub
'Case à cocher 70
Sub Caseàcocher70_Cliquer()
If ActiveSheet.Shapes("Case à cocher 70").OLEFormat.Object.Value = 1 Then
Worksheets("Questionnaire").Rows("60:75").EntireRow.Hidden = True
Else
Worksheets("Questionnaire").Rows("44:59").EntireRow.Hidden = False
Worksheets("Questionnaire").Rows("76:97").EntireRow.Hidden = False
End If
End Sub
'Case à cocher 71
Sub Caseàcocher71_Cliquer()
If ActiveSheet.Shapes("Case à cocher 71").OLEFormat.Object.Value = 1 Then
Worksheets("Questionnaire").Rows("44:75").EntireRow.Hidden = True
Else
Worksheets("Questionnaire").Rows("76:97").EntireRow.Hidden = False
End If
End Sub
'Case à cocher 72
Sub Caseàcocher72_Cliquer()
If ActiveSheet.Shapes("Case à cocher 72").OLEFormat.Object.Value = 1 Then
Worksheets("Questionnaire").Rows("44:75").EntireRow.Hidden = True
Else
Worksheets("Questionnaire").Rows("76:97").EntireRow.Hidden = False
End If
End Sub
Je n'utilise que trop rarement les boutons formulaire.
Mais ce qu'un bouton formulaire peut faire, un activeX le fera aussi.
Pour masquer les lignes tu peux utiliser le même code, on peut même le simplifier
Je te mets un exemple vite fais de ce qu'il est possible de faire.
Je ne sais pas si ca peux répondre à tes attentes
Merci pour ce bout de code mais il ne respecte pas forcement ce que je veux faire (notamment la condition si tickbox 1 est vrai alors tickbox2 est fausse).
Vous avez utilisé des objets activex mais est ce que le fait de nommer la ligne à faire disparaitre peut marcher avec des outils formulaire?
Merci
Le code pour masquer les lignes reste le même que ce soit pour du activeX ou du formulaire.
Tu verras que si tu cliques sur les cases que j'ai nommées ligne1 et 2, il est impossible de cocher les deux.
J'ai mis les deux case à cocher en ligne 1 & uniquement pour te montrer qu'il est possible de les masquer avec les lignes, celles-ci ne sont pas programmées.