VBA - Arbre des causes

Bonjour à tous.

Je suis en train de créer un "Arbre de causes", que je cherche à automatisé via VBA.

VBA n'étant pas mon fort, j'ai essayé d'utiliser les IA pour m'aider dans ma tache. Mais ça commence à bloquer, et je pense avoir besoin d'aider

Le fichier (en pièce jointe) est assez clair je pense, mais voici quelques explication en plus.

Lorsque je coche sur "une case à cocher", j'indique que ma "Cause Racine" est trouver, et j'efface tous ce qui suit. (bordure, texte, case à cocher suivante, etc.)

Exemple :

- je coche la "Cause 1", j'efface les Cause 1.1 à 1.4, ainsi que les Cause 1.1.1 à 1.4.3

- Je coche la cause 1.1, je n'efface que les causes 1.1.1 à 1.1.3.

- Et bien sûr (le problème est ici), lorsque je décoche ma case, je réaffiche ce qui a été effacé au préalable.

Le top en bonus, serait un bouton "reset", qui décoche automatiquement tous, et remettent l'ensemble des éléments en place. Bon ça, je devrait pouvoir trouver de moi même en fouillant un peu.

Si vous avez une idée, je suis preneur svp

Si mes explications ne sont pas assez claire, n'hésitez pas à me le dire également

Merci d'avance au expert VBA qui pourront m'aider

Bonne journée

Bonjour Anthony,

Personnellement je pense que vouloir faire ça en automatique est une hérésie... la méthode ne sera pas bonne

Un peu de lecture (au cas où)
https://www.manager-go.com/ressources-humaines/dossiers-methodes/arbre-des-causes

Nota : Pensez à supprime toutes les données personnelle de vos fichiers quand vous les déposez... En utilisant le centre de confidentialité d'Excel
Sinon, on connait votre nom et la société dans laquelle vous travaillez

Bonne chance

Bonsoir,

si le but n'est que visuel alors je vous propose de masquer les zones voulues avec des shapes que vous rendrez visibles ou non en fonction des coches.

Le fichier joint ne gère que la coche sur fond jaune le 1.1 avec le shape "ZoneCause11".
Le fichier :

Il suffit dans votre code de remplacer la définition de la plage par le nom du shape correspondant :

image

puis dans le module de classe :

image

C'est juste une idée...

@ bientôt

LouReeD

Edit : avec le fichier c'est mieux !

Je ne comprends pas bien la logique de cet arbre. Vous écrivez :

 je coche la "Cause 1", j'efface les Cause 1.1 à 1.4, ainsi que les Cause 1.1.1 à 1.4.3

Il me semble que ce sont les branches 2, 3 et 4 qu'il faudrait couper.

- Je coche la cause 1.1, je n'efface que les causes 1.1.1 à 1.1.3.

Là, ce serait les branches 2, 3, 4, 1.2, 1.3, 1.4 qu'il faudrait couper.

Bonjour a tous, et merci pour vos retour.

@LouReeD : En effet, l'idée est uniquement visuel.

Sur demande, on ma demander de construire un "arbre de cause type", et visuellement je masque ce qui ne m'intéresse pas, pour ne laisser qui les branches utile.

l'idée étant, à la fin, d'en faire un impression PDF, afin de l'intégrer ensuite dans un rapport

@Optimix : en fait la logique, c'est un peu de faire les 5 pourquoi, (mise à part que je suis partie sur 4 éléments au début). J'ai appeler mes éléments "cause", mais j'aurai peut être dût les appeler "raison 1", "raison" 2, etc....
sachant que plusieurs causes peuvent être à l'origine de mon problème initiale
Du coup, dans mes causes 1 à 4, je renseigne que 4 premières raisons qui ont conduit à mon problème.
Une fois que celle-ci sont renseigné, je regarde.

- Si l'une des 4 raisons est "valable" (ou du moins répond l'une des causes), je coche sa case, et le reste de la branche se masque ou disparait (donc oui, pour ma cause 1, j'efface toute les cause 1.1 à 1.4 (+ les sous cause 1.1.1 à 1.1.3; 1.2.1 à 1.2.3; ........ ; 1.4.1 à 1.4.3).

- Ensuite, je regarde les 3 autres causes. Si l'une d'elle n'est pas valable (ou ne répond pas précisément à à la raison de mon problème), alors je relance mes 4 causes (4 ou raison).
Exemple, Si la cause 2 n'est pas valable en état, alors je continu l'analyse avec les cause 2.1 à 2.4.

Ensuite dans la même logique, si par exemple ma cause 2.1 me convient, je coche sa case, et j'efface le reste de sa branche à savoir les causes 2.1.1 à 2.1.3

je sais pas si j'ai réussis à être suffisamment clair dans mes explications

J'ai essayer au début sans VBA (en utilisant juste de la mise en forme conditionnelle), mais je n'arrivai pas à effacer également les cases, du coup le visuel été pas top.

image

Bonjour,

C'est purement visuel, Ok, mais l'idée des shapes qui masquent, point d'avis ?

Pour ce qui est de votre fichier en MFC, l'idée serait de le reprendre avec un peu de VBA et surtout en évitant les objets Case à cocher.

En effet si vous jouez avec la police Windings des caractère "simulent" ce type de case et comme c'est du "texte" avec vos MFC il vous sera possible de les passer en couleur de police blanche donc invisibles... Le VBA sera là pour gérer les double clic gauche sur ces cellule contenant ces case à cocher textuelle afin de les rendre cochée ou pas.

Un fichier pour la gestion des cases à cocher simulées (seule la cellule E3 est gérée) :

Vous voyez que la gestion est simple car les cellules comportant les case à cocher fond partie d'une même "zone" appelée "Clic", ensuite un code VBA événementiel surveille le double clic, s'il est détecté et qu'il est en intersection avec la zone Clic alors on test la valeur de la cellule cliquée, si c'est égale à "Q" alors on décoche en mettant un "£" sinon on coche en mettant un "Q". Ensuite il suffit de mettre la cellule à droite à VRAI ou à FAUX en fonction de la valeur et les MFC se baseront sur cette valeur comme doit le faire votre fichier en MFC. Ce Vrai/Faux sera en police blanche afin de ne pas apparaitre.

Mais ne l'ayant pas je ne peux vous faire l'adaptation exemple...

@ bientôt

LouReeD

Une autre idée. Je n'ai développé que les Causes 1.1 à 1.4 et 1.11 à 1.14.
Je vous laisse continuer si cette solution nous convient. Ce n'est qu'une idée.

Bonjour,

idée de simplification du code d'Optimix que je salue :

Private Sub chKC1_Click()
    Application.ScreenUpdating = False
    If chKC1.Value = True Then
        Vider 1, 1
        chkC11.Value = True
        chkC12.Value = True
        chkC13.Value = True
        chkC14.Value = True
    Else
        Remplir 1, 1
        chkC11.Value = False
        chkC12.Value = False
        chkC13.Value = False
        chkC14.Value = False
    End If
End Sub

Sub Vider(x As Byte, y As Byte)
    Select Case y
        Case 1:
            Sheets("OFF").Range("H1:L19").Offset(x - 1, 0).Copy Destination:=Sheets("Arbre Causes").Range("H1:L19").Offset(x - 1, 0)
        Case 2:
            Sheets("OFF").Range("M1:T4").Offset(x - 1, 0).Copy Destination:=Sheets("Arbre Causes").Range("M1:T4").Offset(x - 1, 0)
    End Select
End Sub

Sub Remplir(x As Byte, y As Byte)
    Select Case y
        Case 1:
            Sheets("ON").Range("H1:L19").Offset(x - 1, 0).Copy Destination:=Sheets("Arbre Causes").Range("H1:L19").Offset(x - 1, 0)
        Case 2:
            Sheets("ON").Range("M1:T4").Offset(x - 1, 0).Copy Destination:=Sheets("Arbre Causes").Range("M1:T4").Offset(x - 1, 0)
    End Select
End Sub

Nul besoin de sélectionner une feuille et une plage pour la copier, l'instruction .copy destination:= est simple, le Application.ScreenUpdating ne nécessite pas un True en fin de procédure.

Je n'ai mis ici qu'une partie du code... ceci ne remplace pas tout le code fourni par Optimix !

@ bientôt

LouReeD

Bonjour LouReed. Well done. Ca faisait un bail !

Bonjour,

On ne test pas un boulean pour affecté la même valeur a un autres boolean.

With chKC1
        Vider 1, 1
        chkC11.Value = .Value
        chkC12.Value = .Value
        chkC13.Value = .Value
        chkC14.Value = .Value
End with

Maintenant si l'idée est de faire un TreeView alors prends en un vrai

Bonsoir,

je reprend mon idée basé sur les MFC puisque vous avez un fichier dans ce style, mais que les checkbox restant apparent ne vous plaisent pas.
Dans cette reprise j'ai modifié le double clic par un simple clic, c'est plus simple, il suffit pour que cela fonctionne de déplacer le cellule active afin de pouvoir recliquer sur la même cellule et lancer le code VBA.

Le fichier :

@ bientôt

LouReeD

Rechercher des sujets similaires à "vba arbre causes"