Modifier tableau suivant choix

Y compris Power BI, Power Query et toute autre question en lien avec Excel
o
ozone083
Jeune membre
Jeune membre
Messages : 19
Inscrit le : 17 janvier 2020
Version d'Excel : 2016

Message par ozone083 » 17 janvier 2020, 16:33

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 :roll:
* 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 !!
Exemple Tableau.xlsm
(84.53 Kio) Téléchargé 5 fois
E
Ergotamine
Membre fidèle
Membre fidèle
Messages : 362
Appréciations reçues : 18
Inscrit le : 26 juin 2016
Version d'Excel : 365

Message par Ergotamine » 18 janvier 2020, 13:29

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 :mrgreen: ).

Bon WE !
Copie de Exemple Tableau.xlsm
(90.6 Kio) Téléchargé 2 fois
Avatar du membre
curulis57
Passionné d'Excel
Passionné d'Excel
Messages : 3'719
Appréciations reçues : 217
Inscrit le : 4 janvier 2016
Version d'Excel : 2016 FR / 2019 FR

Message par curulis57 » 18 janvier 2020, 14:00

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! |k)
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,
8-)
A+
Ozone.xlsm
(89.83 Kio) Téléchargé 3 fois
E
Ergotamine
Membre fidèle
Membre fidèle
Messages : 362
Appréciations reçues : 18
Inscrit le : 26 juin 2016
Version d'Excel : 365

Message par Ergotamine » 18 janvier 2020, 14:04

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 :mrgreen:
Avatar du membre
curulis57
Passionné d'Excel
Passionné d'Excel
Messages : 3'719
Appréciations reçues : 217
Inscrit le : 4 janvier 2016
Version d'Excel : 2016 FR / 2019 FR

Message par curulis57 » 18 janvier 2020, 14:15

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 :oops: ) 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... :lole:

8-)
A+
Avatar du membre
curulis57
Passionné d'Excel
Passionné d'Excel
Messages : 3'719
Appréciations reçues : 217
Inscrit le : 4 janvier 2016
Version d'Excel : 2016 FR / 2019 FR

Message par curulis57 » 18 janvier 2020, 14:22

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)

8-)
A+
E
Ergotamine
Membre fidèle
Membre fidèle
Messages : 362
Appréciations reçues : 18
Inscrit le : 26 juin 2016
Version d'Excel : 365

Message par Ergotamine » 18 janvier 2020, 14:33

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

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 :cry:
Avatar du membre
curulis57
Passionné d'Excel
Passionné d'Excel
Messages : 3'719
Appréciations reçues : 217
Inscrit le : 4 janvier 2016
Version d'Excel : 2016 FR / 2019 FR

Message par curulis57 » 18 janvier 2020, 14:39

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! :lole:

8-)
A+
E
Ergotamine
Membre fidèle
Membre fidèle
Messages : 362
Appréciations reçues : 18
Inscrit le : 26 juin 2016
Version d'Excel : 365

Message par Ergotamine » 18 janvier 2020, 14:53

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 :lol: ), mais tu as très largement enrichi le code en le simplifiant logiquement ..

Bravo à toi !
Avatar du membre
curulis57
Passionné d'Excel
Passionné d'Excel
Messages : 3'719
Appréciations reçues : 217
Inscrit le : 4 janvier 2016
Version d'Excel : 2016 FR / 2019 FR

Message par curulis57 » 18 janvier 2020, 16:56

Mais, non, mais, non, pas tant que ça! :lol:
Bon, descends du parapet, maintenant, tu vas finir par te faire mal! :lol:

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

8-)
A+
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message