Bonjour à la communauté,
Je vais essayer d'être le plus clair possible, j'essaye de trouver une logique de code qui me permette, à partir des éléments de l'image numéro n°1 (liens verts entre Entrée/Sortie et liens oranges entre Sortie/Entrée) d'automatiser la construction de l'arbre des Entrées/Sorties (image n°2). Cela me permettant de récupérer un ordre de traitement des entrées et sorties en fonction de leur position (image n°3). J'insiste sur le fait que mon but est d'automatiser le traitement et non pas de le faire analytiquement.
Mon idée est de prendre le premier "domino" vert de la liste ("E1, S1" dans l'exemple de l'image n°1) comme base et de dérouler la logique domino (comme sur image n°2) vers la droite pour arriver jusqu'à la sortie finale (S25 dans l'exemple sur l'image n°2). En effet, pour une valeur de sortie d'un domino vert donnée, il n'y qu'un seul domino orange qui correspond. Cela permet de trouver le bout de la ficelle en somme.
De la sortie finale, le but est de repartir vers la gauche en étant exhaustif cette fois-ci et en affectant aux entrées et sorties considérées un niveau correspondant à leur place (S25 --> niveau 1, E33 --> niveau 2, etc.). Je précise que l'ordre dans un niveau n'a aucune importance.
J'avais aussi pensé à mettre en place un système de compteur prenant en compte le nombre de dominos à traiter car il faut que l'automatisation prenne en compte la construction et le traitement de plusieurs branches (2ème branche de l'exemple : image n°4) donc d'éviter l'oubli de dominos. Je précise que l'utilisation d'un domino dans une branche traitée antérieurement ne doit pas empêcher l'utilisation de ce même domino dans une branche future (besoin de traiter le domino dans son niveau le plus bas s'il apparaît à plusieurs niveaux).
Quelques précisions :
- Les cellules oranges "CU1" "CU2" et "EX" ne sont pas à traiter dans l'automatisation de l'arbre car ces infos seront récupérés via les dominos verts
- Les cellules jaunes notifées "REPET'" indique qu'il y a répétition d'un même schéma cependant ce même schéma devra être pris en compte dans l'automatisation car son niveau peut être inférieur à un précédent
image n°1 :
image n°2 :
image n°3 :
image n°4 :
Mon questionnement vis à vis de la communauté est multiple. Tout d'abord, ma logique est-elle rélisable compte-tenu de mes contraintes ? Pensez-vous à une logique de code plus simple ? Plus largement ce que je veux faire est-il réalisable ?
J'ai commencé à coder la reconnaissance des entrées et sorties notées sur les dominos afin de les assembler en partant du vert, 1er de la liste et je suis actuellement en train d'essayer de faire une boucle me permettant d'arriver à S25 dans l'exemple. Encore beaucoup de travail j'en ai conscience !
J'ai arbitrairement commencé la 1ère branche en cells(200, 200), la cells(43,9) correspond au nombre de domino orange à traiter et la cells(43,7) aux verts. Les listes commencent en cells(45,7) et cells(45, 9).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70 Sub liens() increm4 = 1 '1ERE ITERATION Cells(200, 200) = Cells(45, 7) 'J'ai ValsortieV = SX ou SXX If InStr(Cells(200, 200), ",") = 3 And Len(Cells(200, 200)) = 6 Then ValsortieV = Mid(Cells(200, 200), 5, 2) ElseIf InStr(Cells(200, 200), ",") = 3 And Len(Cells(200, 200)) = 7 Then ValsortieV = Mid(Cells(200, 200), 5, 3) ElseIf InStr(Cells(200, 200), ",") = 4 And Len(Cells(200, 200)) = 7 Then ValsortieV = Mid(Cells(200, 200), 6, 2) ElseIf InStr(Cells(200, 200), ",") = 4 And Len(Cells(200, 200)) = 8 Then ValsortieV = Mid(Cells(200, 200), 6, 3) 'Valeur sortie de la 1ère case verte End If 'récupérée dans ValsortieV 'J'ai ValsortieO = SX ou SXX For i = 0 To Cells(43, 9) - 1 'Pour toutes les cases orange If InStr(Cells(45 + i, 9), ",") = 3 Then 'Recherche valeur de sortie orange ValsortieO = Mid(Cells(45 + i, 9), 1, 2) ElseIf InStr(Cells(45 + i, 9), ",") = 4 Then ValsortieO = Mid(Cells(45 + i, 9), 1, 3) 'Valeur sortie de case orange récupérée End If 'dans ValsortieO If ValsortieO = ValsortieV Then 'Si sortie correspondante trouvée fait ça : Cells(200 + increm4, 200 + increm4) = Cells(45 + i, 9) increm4 = increm4 + 1 End If Next i 'Sinon continue de chercher avec la prochaine case 'ETAT : 1ère case orange rattachée 'N IEME ITERATION 'J'ai ValentreeO = Ex ou EXX If InStr(Cells(200 + increm4 - 1, 200 + increm4 - 1), ",") = 3 And Len(Cells(200 + increm4 - 1, 200 + increm4 - 1)) = 6 Then ValentreeO = Mid(Cells(200 + increm4 - 1, 200 + increm4 - 1), 5, 2) ElseIf InStr(Cells(200 + increm4 - 1, 200 + increm4 - 1), ",") = 3 And Len(Cells(200 + increm4 - 1, 200 + increm4 - 1)) = 7 Then ValentreeO = Mid(Cells(200 + increm4 - 1, 200 + increm4 - 1), 5, 3) ElseIf InStr(Cells(200 + increm4 - 1, 200 + increm4 - 1), ",") = 4 And Len(Cells(200 + increm4 - 1, 200 + increm4 - 1)) = 7 Then ValentreeO = Mid(Cells(200 + increm4 - 1, 200 + increm4 - 1), 6, 2) ElseIf InStr(Cells(200 + increm4 - 1, 200 + increm4 - 1), ",") = 4 And Len(Cells(200 + increm4 - 1, 200 + increm4 - 1)) = 8 Then ValentreeO = Mid(Cells(200 + increm4 - 1, 200 + increm4 - 1), 6, 3) End If 'Valeur entrée de case orange dans ValentreeO For i = 0 To Cells(43, 7) - 1 'Pour toutes les cases vertes If InStr(Cells(45 + i, 7), ",") = 3 Then 'Recherche valeur d'entrée verte correspondante ValsortieO = Mid(Cells(45 + i, 9), 1, 2) ElseIf InStr(Cells(45 + i, 9), ",") = 4 Then ValsortieO = Mid(Cells(45 + i, 9), 1, 3) 'Valeur sortie de case orange récupérée End If 'dans ValsortieO Next End Sub
Je dis d'avance merci à toute personne qui tentera de me repondre car j'ai conscience de la singularité de mon problème. Je serai ravi d'apporter des précisions si je n'ai pas été assez clair.
Partager