Salut Dhumkazaar et le forum
J'ai une petite question qui me turlupine... pourquoi les débutants veulent réinventer le VBA ?
Sub Bouton1_QuandClic(contrainte)
Ce n'est pas une macro que tu crées, non ? C'est une macro qu'excel crée et qu'il lie au Bouton1 ? et tu lui colles un argument qui est le nom d'une macro sub. M'étonne pas qu'Excel fasse un kk nerveux
.
J'avoue que mes maigres connaissances du VBA ne me permettent de comprendre ce que tu veux faire.
1 2 3
| Sub contrainte(c, d)
If Cells(c, d).value = ...Then contrainte = OUI"
End Sub |
??? Déjà, je ne suis pas sûr de ce que tu veux faire. Créer une macro alors que tu pourrait l'avoir directement...
Regarde dans l'aide la différence entre Sub (macro qui effectue des actions) et Function (macro qui retourne un résultat)
1 2 3
| Function Contrainte(c as long, d as integer) as string
If Cells(c, d).value = "OUI" Then Contrainte = "OUI"
End Function |
Ça me semble toujours aussi redondant, mais chacun sa méthode.
En épurant un peu ton code, voilà ce qu'il en ressort :
1 2 3 4 5 6 7 8 9 10 11
| If Cells(a, b).value <> ""Then
For c = 1To2
For d = 3To5
If contrainte = "OUI"Then
.........
Next d
Next c
endif
endif |
Si Excel comprend, c'est que c'est une nouvelle version dont je n'ai pas entendu parler !
Tu ouvres une boucle (D), tu fais un test (le second If), tu clôtures ta boucle (next d), tu clôtures ton test.
Il y en a déjà un qui voulait ouvrir plusieurs Sub et les finir par un unique End.
Tu te dis débutant en VBA, alors commence par faire des exmples simples qui correspondent à ce que te dit l'aide.
Une instruction qui à besoin d'un End (sub, Function, If, Select Case, whith...) est un bloc "insécable". Il peut contenir un ou plusieurs autres bloc, mais pas le début d'un autre.
Les indentations ne servent pas "à faire joli". Elles permettent de s'y retrouver dans les différents blocs.
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
| Sub Bouton1_QuandClic()
Dim minia As Integer
Dim maxia As Integer
Dim minib As Integer
Dim maxib As Integer
Dim a As Long
Dim b As Integer
minia = 6
maxia = 7
minib = 3
maxib = 5
Randomize
a = Int((maxia - minia + 1) * Rnd + minia)
b = Int((maxib - minib + 1) * Rnd + minib)
Cells(3, 1) = a
Cells(3, 2) = b
If Cells(a, b).Value <> "" Then
For c = 1 To 2
For d = 3 To 5
If contrainte = "OUI" Then Cells(a, b).Value = Cells(c, 1)
Next d
Next c
End If
End Sub |
J'ai pas trop touché à ton code (je l'ai même pas testé), ne sachant pas quel en est le but. Juste corrigé les erreurs flagrantes.
Mais avec les indentations, tu sais à chaque instructions où tu te trouves, dans quelle boucle, dans quel test.
A+
Partager