Bonjour
Je recherche de l'aide pour une Macro VBA.
Je suis actuellement en auto-formation vba depuis 2 jours ( je suis donc débutant ), et je me suis donné comme challenge de créer une table de vérité.
le fonctionnement :
- On rentre le nombre de vecteur d'entré et celui des sorties
- On rentre dans un tableau le nom des vecteurs d'entrées et le nom des vecteurs de sorties
( Je suis à ce niveau là du programme )
(Résultat)
Vecteur_E1 Vecteur_E2 Vecteur_S1 0 0 VIDE 0 1 VIDE 1 0 VIDE 1 1 VIDE
Ce que je recherche actuellement c'est une manière de créer des conditions directement sur la page excel pour que ça me renvoie le résultat de la sortie.
(exemple : Vecteur_E1 & Vecteur_E2 -> Vecteur_S1 = True / Vecteur_E1 Or Vecteur_E2 -> Vecteur_S1 = True
Auriez-vous des indications sur ce sujet ?
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135 Sub GenerationTableVerite() ' rentrer le nombre de var e en B3, le nombre var s D3, les noms var e en B6 -> B22, les noms var s en D6 -> D22 ' Indice par défaut Dim i As Long ' nombre de variable en sortie ( b3 ) Dim MaxVarETab As Long ' Indice qui gère le nombre de variable en sortie ( d3 ) Dim MaxVarSTab As Long ' Dim iLesLignes As Long ' Dim iUneLigne As Long ' Dim VarE As Long ' Dim iDepart As Long ' Indice de début de génération des variables de sortie, elles suivent la fin de génération des variables d'entrées Dim DebutVarS As String ' Dim iEtat As String MaxVarETab = Range("B3").Cells.Value MaxVarSTab = Range("D3").Cells.Value ' Suppression lignes Range("F2", Range("Z2").End(xlDown)).Rows.Clear ' bloque l'affichage Application.ScreenUpdating = False Range("F2").Cells.Value = Range("B6").Cells.Value ' Récupère le noms des variables entrantes du tableau de la colonne B et les écrits For j = 0 To MaxVarETab - 2 Range("G2").End(xlToLeft).Offset(0, 1 + j).Cells.Value = Range("B" & 7 + j, "B22").Cells.Value Next ' Gère ecriture varS If MaxVarETab = 1 Then DebutVarS = "G2" End If If MaxVarETab = 2 Then DebutVarS = "G2" End If If MaxVarETab = 3 Then DebutVarS = "H2" End If If MaxVarETab = 4 Then DebutVarS = "I2" End If If MaxVarETab = 5 Then DebutVarS = "J2" End If If MaxVarETab = 6 Then DebutVarS = "K2" End If If MaxVarETab = 7 Then DebutVarS = "L2" End If If MaxVarETab = 8 Then DebutVarS = "M2" End If If MaxVarETab = 9 Then DebutVarS = "N2" End If If MaxVarETab = 10 Then DebutVarS = "O2" End If If MaxVarETab = 11 Then DebutVarS = "P2" End If If MaxVarETab = 12 Then DebutVarS = "Q2" End If If MaxVarETab = 13 Then DebutVarS = "R2" End If If MaxVarETab = 14 Then DebutVarS = "S2" End If If MaxVarETab = 15 Then DebutVarS = "T2" End If If MaxVarETab = 16 Then DebutVarS = "U2" End If If MaxVarETab = 17 Then DebutVarS = "V2" End If ' Récupère le noms des variables de sortie du tableau de la colonne L For j = 0 To MaxVarSTab - 1 Range(DebutVarS).End(xlToLeft).Offset(0, MaxVarETab + j).Cells.Value = Range("D" & 6 + j, "D22").Cells.Value Next ' Sortie procédure si le nombre de variable d'entrée vaut 0 If MaxVarETab = 0 Then Exit Sub ' Indice de départ du tableau de Karnaugh iDepart = MaxVarETab + 5 ' Nombre total de ligne du tableau selon les variables d'entrées iLesLignes = (2 ^ MaxVarETab) - 1 ' Nombre total de variable d'entrée MaxVarETab = MaxVarETab - 1 ' Boucle de parcours des lignes selon le nombre total de 2 ^ variables entrées For iUneLigne = 0 To iLesLignes ' Boucle de génération des 0 et des 1 selon le nombre de variable d'entrée For VarE = 0 To MaxVarETab If (iUneLigne And (2 ^ VarE)) > 0 Then iEtat = "1" Else iEtat = "0" End If ' écriture des 0 et des 1 Feuil1.Cells(iUneLigne + 2 + 1, iDepart - VarE) = iEtat Next VarE Next iUneLigne ' Modification du style d'écriture With Range("F3", "Z900000") .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter End With ' active l'affichage Application.ScreenUpdating = True ' Message box indiquant si ça s'est bien passé MsgBox "Génération terminée" End Sub
J'espère avoir été clair, et je reste présent dès que je le peux pour répondre.
Je vais continuer de chercher de mon coté.
Merci d'avance.
Partager