Modifier tableau suivant choix

Bonjour

Je galère en VBA et ne sais pas trop comment faire....aussi merci aux experts pour votre aide.

J'ai un fichier Excel avec 2 onglets : l'un de paramètre, l'un de calculs.

Dans l'onglet Paramètres, je peux choisir le détail des calculs : pour cela il faut que je coche Toto1 ou/et Toto2....

Cela aura pour conséquence, dans l'onglet Calculs, de Grouper ou Dissocier la ligne concernée (si je coche, cela dissocie le bloc, si je ne sélectionne pas cela groupe le bloc) ; ainsi mon onglet devient plus lisible.

Ensuite, dans onglet Calculs, via un bouton identique à "Mise à Blanc", qu'on appelera TOTAL, je souhaite pouvoir ajouter deux colonnes après la colonne AN :

* la 1er colonne, dont titre sera CALCUL, sera rempli par un calcul fait à partir des valeurs présentes en AM (ex : A023 = AM23*2%+5) - si valeur présente en AM.

Et dans les cellules grises on devra retrouver la même formule que dans les autres cellules grise (ex : A015=sous.total(9;AO16:AO21).

Le nombre de ligne dans les sous groupes peut évoluer

* la 2eme colonne sera une colonne identique à AK (blanche sans valeur, même largeur)

Enfin je souhaite pouvoir supprimer les valeurs de certains colonnes (Mise à Blanc) : la macro a été faite sur l'onglet Calculs, je souhaiterai l'activer sur l'onglet Paramètre + cette macro devra supprimer les 2 colonnes ajouter précédemment (si elles sont présentes).

En espérant avoir été clair

Un fichier Exemple en pièce jointe avec le résultat attendu

Un grand merci pour votre aide et bon weekend !!

Salut,

J'ai des connaissances très limitées en VBA, mon code est surement loin d'être propre, mais en cherchant à droite à gauche après plusieurs heures, j'ai réussi à réaliser quelque chose (c'est en forgeant qu'on devient forgeron ).

Bon WE !

Salut Ergotamine,

j'avais marqué ce sujet que je ne connaissais pas, reportant son étude à plus tard.

Ton travail m'économise beaucoup d'énergie et à d'autres aussi, sans doute.

Mille mercis et félicitations pour cette recherche!

Je comprends, ô combien, que tu n'aies plus eu le courage de peaufiné ta découverte.

Aussi, si tu le permets, voici une version que je continuerai à travailler avant de chercher à créer ces fameux plans en VBA (Rows.Group).

Private Sub CheckBox1_Click()
Test_2 (1)
End Sub
Sub Test_2(ByVal iIdx%)
'
Dim iRow%
'
On Error Resume Next
With Worksheets("Calculs")
    iRow = .Range("B:B").Find(What:=CStr("TOTO" & iIdx + 1)).Row
    .Rows(iRow).ShowDetail = Worksheets("Parameters").OLEObjects("CheckBox" & iIdx).Object.Value
End With
On Error GoTo 0
'
End Sub

Bien à toi,

A+

4ozone.xlsm (89.83 Ko)

Salut curulis57,

Merci pour les compliments, venant de personnes maitrisant l'art naturellement ça me touche !

En fait je voulais trouver un code événementiel qui, quelque soit la checkbox cochée active la macro de groupage/dégroupage afin d'éviter les "checkbox 1_click etc ...) et juste d'avoir un seul checkbox_click.

Si tu as une idée je suis preneur !

Tu peux expliquer "iIdx" ? J'ai du mal à maîtriser le ByVal et l'ensemble du code ..

En tout cas ton code est bien plus léger ça soulage mes yeux

Salut Ergotamine,

pour cela, il faut créer un module de classe.

Je ne pourrais t'expliquer cela en termes techniques car je ne connais pas (non plus ) mais cela permet, en une macro (en gros, hein!) de gérer un événement ou l'autre de tout un ensemble de contrôles identiques.

La clâââsse, quoi!

Euh, bon, je n'y suis pas encore non plus...

A+

Ergotamine, pour ta demande d'explication du code.

Tu remarques que je passe un argument correspondant à l'index de la CheckBox.

Private Sub CheckBox2_Click()

Test_2 (2)

End Sub

C'est l'argument (byval - valeur) que reçoit la macro Test_2 dans iIdx (% = raccourci de Integer)

A+

Aie aie aie ça me donne mal a la tête il y a beaucoup trop d'astuce dans le code

Mais du coup quelle ligne du code regroupe si la checkbox n'est pas cochée ?

On Error GoTo 0

Car dans mon code j'ai bien le False mais dans le tien je ne vois rien

Très simple : j'utilise la propriété VALUE des CheckBox... qui se trouve être aussi la valeur utilisée par ShowDetail !

.Rows(iRow).ShowDetail = Worksheets("Parameters").OLEObjects("CheckBox" & iIdx).Object.Value

Tu as fait le plus dur en travaillant sur ce sujet : tu ne vas pas buter sur ça, j'espère!

A+

Mais oui !!!

False = 0 et True = 1 qu'est ce que je suis con !

J'ai fait la base (qui ne fonctionne plus si l'user n'utilise pas TOTO avec des chiffres croissants derrière ), mais tu as très largement enrichi le code en le simplifiant logiquement ..

Bravo à toi !

Mais, non, mais, non, pas tant que ça!

Bon, descends du parapet, maintenant, tu vas finir par te faire mal!

C'est en forgeant, disais-tu : je forge depuis '84! J'ai forcément attrapé un bon coup de marteau!

A+

Un grand merci à vous Curulis57 et Ergotamine pour votre aide

Je vois que vous êtes de sacrés experts en VBA.

Je vais regarder plus en détail votre méthode et vous poserai quelques questions de compréhension (si cela ne vous dérange pas)

Merci en tous les cas

Suis embêté ....

En effet j'ai crée des lignes "bidons" TOTO1, TOTO2,......et du coup il me semble que le code est adapté à cela avec notamment "CStr("TOTO" & iIdx + 1)).Row"

CEpendant si le titre de chaque ligne sont des châines de caractères qui sont très différentes entre elles, comment fait on ?

D'autre part, dans le calcul qui doit s'afficher dans la colonne CALCUL, je souhaite mettre un nom de cellule, dont la valeur est dans l'onglet Paramètres......ai essayé mais cela ne fonctionne pas :

.Cells(i, 41).Formula = "=AM" & i & "*(1+KNP)*'1+INM)"

Vraiment désolé

Un grand merci

(fichier modifié ci joint)

1ozone-ed1.xlsm (89.99 Ko)

M'en serait douté que ce n'était pas TOTO .. J'ai tenté quand même !

Et voilà en reprenant le merveilleux code de CURULIS

A noter que la dernière CheckBox ne fonctionne pas c'est normal, il faut que l'on ai ton nombre total de checkbox et surtout la valeur du dernier groupe.

Bonne soirée !

7ozone-ed2.xlsm (90.51 Ko)

Super merci pour la réactivité....et bien sur pour l aide.

Je m y replonge

Bonne soirée

"CheckBox ne fonctionne pas c'est normal, il faut que l'on ai ton nombre total de checkbox et surtout la valeur du dernier groupe."

Du coup, si je veux avoir un tableau évolutif et pouvoir ajouter des groupes (avec des noms autres que Toto7, Toto8), il faut que je modifie quoi ?

Merci pour l'aide

Lorsque je sélectionne toutes les "checkbox", certains ne se déplient pas...... .

Et si j'ajoute des lignes dans une partie, est ce que cela fonctionne toujours ce "grouper" "dissocier" ?

Merci

Salut Ozone,

Certaines ne se déplient pas car ton intitulé de checkbox n'est pas exactement le même que ce qu'il y a dans la cellule (le tm pour HEALTHHUB ..).

Pour l'ajout de ligne ça fonctionnera sans soucis.

Pour l'ajout de groupe :

Il faut que les numéro de checkbox soient dans le même ordre que les groupe de ta feuille calcul ET que l'intitulé des checkbox soit exactement le même que dans l'onglet DESIGNATION.

Pour le dernier groupe il faut rajouter une checkbox avec par exemple un espace, la masquer et mettre un espace dans la cellule B87.

Bon dimanche !

Salut Ozone,

Salut Ergotamine

Ça marche aussi puisque le code cherche la propriété CAPTION de chaque CheckBox !

A+

3ozone-ed2.xlsm (89.14 Ko)

Salut Curulis,

C'est sûr qu'en mettant l'intitulé des groupes en bas c'est plus simple, ça évite de chercher la checkbox n+1. A voir si ça convient aussi à l'auteur dans ce sens

Bonjour

Cela coince.....lorsque je coche, ce n'est pas le bon groupe de ligne qui est sélectionné

Il y'a comme un décalage

Comme je ne comprends pas trop cette syntaxe

On Error Resume Next

On Error GoTo 0

suis un peu bloqué...

Merci et désolé pour ces nombreuses sollicitations

(fichier ci joint)

2ozone-ed4.xlsm (711.93 Ko)
Rechercher des sujets similaires à "modifier tableau suivant choix"