Debutant en VBA

Le
Guillaume
Bonjour

J'ai 5 valeurs dans A3 A4 A5 A6 et A6 qui sont respectivement 1 2 3 4 et 5
J'ai ecrit cette macro la (qui n'a aucun intéret que d'apprendre)

Option Explicit
Function RandomNumber(Lowest As Long, Highest As Long)
' Generates a random whole number within a given range
Randomize
RandomNumber = Int(Rnd * (Highest + 1 - Lowest)) + Lowest

End Function
Sub Comparaison()
Dim i As Integer
i = 0
Randomize

For i = 1 To 4
Label1:
Range("B3").Offset(0, i).Value = Int(Rnd * 19)
If Range("B3").Offset(0, i) = Range("A3").Value Or Range("A4").Value Or
Range("A5").Value Or Range("A6").Value Then GoTo Label1
Next

End Sub

Je pensais que la boucle tournerais tant que pour i=1 une valeur n'a pas été
touvée puis pour i=2 puis i=3 puis i=4 puis on sort de la boucle.

Or le programme fait tourner constamment des chiffres dans C3 mais ne
s'arrete jamais!!!
je ne comprend plus rien

Merci de m'aider
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jac
Le #20660551
Bonjour Guillaume,

et si tu essayais de faire ça simplement :

For i = 3 To 6
1 cells(i,2) = Int(Rnd * 19)
if cells(i,2) = cells(3,1) then goto 1
if cells(i,2) = cells(4,1) then goto 1
if cells(i,2) = cells(5,1) then goto 1
if cells(i,2) = cells(6,1) then goto 1
Next i

C'est sûr que c'est moins pro des des if imbriqués, et/ou de Or, mais
au moins c'est clair et net.

Dis-moi si ça résoud ton problème.

Jac

Guillaume a exprimé avec précision :
For i = 1 To 4
Label1:
Range("B3").Offset(0, i).Value = Int(Rnd * 19)
If Range("B3").Offset(0, i) = Range("A3").Value Or Range("A4").Value Or
Range("A5").Value Or Range("A6").Value Then GoTo Label1
Next


Alain
Le #20661251
Le If est mal construit et devrait plutôt ressembler a ceci:

If Range("B3").Offset(0, i) = Range("A3").Value Or _
Range("B3").Offset(0, i) = Range("A4").Value Or _
Range("B3").Offset(0, i) = Range("A5").Value Or _
Range("B3").Offset(0, i) = Range("A6").Value Then

Quoique ton code va fonctionner après avoir corriger le If l'utilisation du
GoTo est a proscrire car elle conduit à une construction mal structuré,
appelé dans le jargon "code spaghetti" et il y a toujours moyen de faire
sans...

Un exemple parmi tant d'autre de ce que ton code pourrait être sans GoTo:

Sub Comparaison()
Dim i As Integer, v As Variant
Randomize

For i = 1 To 4
Do While True
v = Int(Rnd * 19)
If v v Do
Loop
Range("B3").Offset(0, i).Value = v
Next
End Sub


"Guillaume" news:#
Bonjour

J'ai 5 valeurs dans A3 A4 A5 A6 et A6 qui sont respectivement 1 2 3 4 et 5
J'ai ecrit cette macro la (qui n'a aucun intéret que d'apprendre)

Option Explicit
Function RandomNumber(Lowest As Long, Highest As Long)
' Generates a random whole number within a given range
Randomize
RandomNumber = Int(Rnd * (Highest + 1 - Lowest)) + Lowest

End Function
Sub Comparaison()
Dim i As Integer
i = 0
Randomize

For i = 1 To 4
Label1:
Range("B3").Offset(0, i).Value = Int(Rnd * 19)
If Range("B3").Offset(0, i) = Range("A3").Value Or Range("A4").Value Or
Range("A5").Value Or Range("A6").Value Then GoTo Label1
Next

End Sub

Je pensais que la boucle tournerais tant que pour i=1 une valeur n'a pas
été touvée puis pour i=2 puis i=3 puis i=4 puis on sort de la boucle.

Or le programme fait tourner constamment des chiffres dans C3 mais ne
s'arrete jamais!!!
je ne comprend plus rien

Merci de m'aider



Nectoux Guillaume
Le #20661611
Je vais essayer ça ce soir. Merci a tous

"Alain"
Le If est mal construit et devrait plutôt ressembler a ceci:

If Range("B3").Offset(0, i) = Range("A3").Value Or _
Range("B3").Offset(0, i) = Range("A4").Value Or _
Range("B3").Offset(0, i) = Range("A5").Value Or _
Range("B3").Offset(0, i) = Range("A6").Value Then

Quoique ton code va fonctionner après avoir corriger le If l'utilisation
du GoTo est a proscrire car elle conduit à une construction mal structuré,
appelé dans le jargon "code spaghetti" et il y a toujours moyen de faire
sans...

Un exemple parmi tant d'autre de ce que ton code pourrait être sans GoTo:

Sub Comparaison()
Dim i As Integer, v As Variant
Randomize

For i = 1 To 4
Do While True
v = Int(Rnd * 19)
If v v Do
Loop
Range("B3").Offset(0, i).Value = v
Next
End Sub


"Guillaume" news:#
Bonjour

J'ai 5 valeurs dans A3 A4 A5 A6 et A6 qui sont respectivement 1 2 3 4 et
5
J'ai ecrit cette macro la (qui n'a aucun intéret que d'apprendre)

Option Explicit
Function RandomNumber(Lowest As Long, Highest As Long)
' Generates a random whole number within a given range
Randomize
RandomNumber = Int(Rnd * (Highest + 1 - Lowest)) + Lowest

End Function
Sub Comparaison()
Dim i As Integer
i = 0
Randomize

For i = 1 To 4
Label1:
Range("B3").Offset(0, i).Value = Int(Rnd * 19)
If Range("B3").Offset(0, i) = Range("A3").Value Or Range("A4").Value Or
Range("A5").Value Or Range("A6").Value Then GoTo Label1
Next

End Sub

Je pensais que la boucle tournerais tant que pour i=1 une valeur n'a pas
été touvée puis pour i=2 puis i=3 puis i=4 puis on sort de la boucle.

Or le programme fait tourner constamment des chiffres dans C3 mais ne
s'arrete jamais!!!
je ne comprend plus rien

Merci de m'aider





Publicité
Poster une réponse
Anonyme