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.

118test.xlsm (114.36 Ko)

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

178masque-jw.zip (10.13 Ko)

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.

Rechercher des sujets similaires à "macro afficher masquer lignes"