Macro VBA - Table de vérité
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
Code:
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 |
Auriez-vous des indications sur ce sujet ?
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é. :D
Merci d'avance.