Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Une forêt d'ifs

7 réponses
Avatar
garnote
Bonsoir mes vous,

i , j et n sont des nombres entiers.
Est-ce possible de «conciser» les quatre if ?

...
n=?
i=?
j=?
If i < 1 Then i = n
If j < 1 Then j = n
If i > n Then i = 1
If j > n Then j = 1
...

Serge

7 réponses

Avatar
sabatier
ici, dans la forêt de baobabs, on ne concise pas, bwana : on excise...
jps

garnote a écrit:
Bonsoir mes vous,

i , j et n sont des nombres entiers.
Est-ce possible de «conciser» les quatre if ?

....
n=?
i=?
j=?
If i < 1 Then i = n
If j < 1 Then j = n
If i > n Then i = 1
If j > n Then j = 1
....

Serge




Avatar
chrisn
Bonjour,

garnote a écrit dans le message de news

If i < 1 Then i = n
If j < 1 Then j = n
If i > n Then i = 1
If j > n Then j = 1
...


Si i = -2, j = -3 et n= -5 que se passe-t-il ?
--
chrisn
mettre le bon fai, libertysurf pour me répondre

Avatar
garnote
Pour être plus précis, n est un entier positif
et i ainsi que j sont compris entre 0 et n+1.

Sub Exemple()
n = 5
i = 0
j = 3
If i < 1 Then i = n
If j < 1 Then j = n
If i > n Then i = 1
If j > n Then j = 1
'Nouveau i et nouveau j :
MsgBox i & " " & j
End Sub

Serge

"chrisn" a écrit dans le message de news:

Bonjour,

garnote a écrit dans le message de news

If i < 1 Then i = n
If j < 1 Then j = n
If i > n Then i = 1
If j > n Then j = 1
...


Si i = -2, j = -3 et n= -5 que se passe-t-il ?
--
chrisn
mettre le bon fai, libertysurf pour me répondre




Avatar
GD
Bonsour(®) Serge,
ci-dessous code un peu plus concis mais bof....
les "IF" deviennnent des "IIF" , je gagne juste sur les "THEN"
ton algorithme fait symetriquement exactement la même chose que le mien
;-)))
en A1 une valeur positive entiere puis lance la macro

Sub MagikSerge()
ordre = 1 + 2 * [A1].Value
[B2].Resize(52, 52).Clear
MsgBox "carré magique d'ordre " & ordre
Application.ScreenUpdating = False
debut = Application.WorksheetFunction.Ceiling(ordre / 2, 1)
Range("B2").Resize(ordre, ordre).Interior.Color = vbYellow
x = 2 + debut
y = 1 + debut
Cells(x, y) = 1
For i = 2 To ordre ^ 2
x = IIf(x + 1 > (ordre + 1), 2, x + 1)
y = IIf(y + 1 > (ordre + 1), 2, y + 1)
If Cells(x, y) > 0 Then x = x + 1: y = y - 1
y = IIf(y < 2, ordre + 1, y)
x = IIf(x > (ordre + 1), 2, x)
Cells(x, y) = i
Next
Application.ScreenUpdating = True
End Sub

;-)))
@+
Avatar
garnote
Je préfère ton code. Et si tu voyais à quelle vitesse mon
tchum peut remplir un carré magique, tu serais impressionné.
Il a même déjà construit un pair devant mes propres yeux qui
churent de leurs écailles :-)))

Serge

"GD" a écrit dans le message de news:

Bonsour(®) Serge,
ci-dessous code un peu plus concis mais bof....
les "IF" deviennnent des "IIF" , je gagne juste sur les "THEN"
ton algorithme fait symetriquement exactement la même chose que le mien
;-)))
en A1 une valeur positive entiere puis lance la macro

Sub MagikSerge()
ordre = 1 + 2 * [A1].Value
[B2].Resize(52, 52).Clear
MsgBox "carré magique d'ordre " & ordre
Application.ScreenUpdating = False
debut = Application.WorksheetFunction.Ceiling(ordre / 2, 1)
Range("B2").Resize(ordre, ordre).Interior.Color = vbYellow
x = 2 + debut
y = 1 + debut
Cells(x, y) = 1
For i = 2 To ordre ^ 2
x = IIf(x + 1 > (ordre + 1), 2, x + 1)
y = IIf(y + 1 > (ordre + 1), 2, y + 1)
If Cells(x, y) > 0 Then x = x + 1: y = y - 1
y = IIf(y < 2, ordre + 1, y)
x = IIf(x > (ordre + 1), 2, x)
Cells(x, y) = i
Next
Application.ScreenUpdating = True
End Sub

;-)))
@+




Avatar
DJ9B
Salut Serge !
C'est la vie de château ( d'if ) alors !
comme dirait Edmond ;o)) !

--
à tantôt !
DJ9B
e-mail :
Site : www.dj9b.fr.st
"garnote" a écrit dans le message de
news:ao0Ec.14026$
Je préfère ton code. Et si tu voyais à quelle vitesse mon
tchum peut remplir un carré magique, tu serais impressionné.
Il a même déjà construit un pair devant mes propres yeux qui
churent de leurs écailles :-)))

Serge

"GD" a écrit dans le message de news:

Bonsour(®) Serge,
ci-dessous code un peu plus concis mais bof....
les "IF" deviennnent des "IIF" , je gagne juste sur les "THEN"
ton algorithme fait symetriquement exactement la même chose que le mien
;-)))
en A1 une valeur positive entiere puis lance la macro

Sub MagikSerge()
ordre = 1 + 2 * [A1].Value
[B2].Resize(52, 52).Clear
MsgBox "carré magique d'ordre " & ordre
Application.ScreenUpdating = False
debut = Application.WorksheetFunction.Ceiling(ordre / 2, 1)
Range("B2").Resize(ordre, ordre).Interior.Color = vbYellow
x = 2 + debut
y = 1 + debut
Cells(x, y) = 1
For i = 2 To ordre ^ 2
x = IIf(x + 1 > (ordre + 1), 2, x + 1)
y = IIf(y + 1 > (ordre + 1), 2, y + 1)
If Cells(x, y) > 0 Then x = x + 1: y = y - 1
y = IIf(y < 2, ordre + 1, y)
x = IIf(x > (ordre + 1), 2, x)
Cells(x, y) = i
Next
Application.ScreenUpdating = True
End Sub

;-)))
@+








Avatar
garnote
Si si, stie :-)))

sg

"DJ9B" <enlevez-ç a écrit dans le message de news:
ODpa3#
Salut Serge !
C'est la vie de château ( d'if ) alors !
comme dirait Edmond ;o)) !

--
à tantôt !
DJ9B
e-mail :
Site : www.dj9b.fr.st
"garnote" a écrit dans le message de
news:ao0Ec.14026$
Je préfère ton code. Et si tu voyais à quelle vitesse mon
tchum peut remplir un carré magique, tu serais impressionné.
Il a même déjà construit un pair devant mes propres yeux qui
churent de leurs écailles :-)))

Serge

"GD" a écrit dans le message de news:

Bonsour(®) Serge,
ci-dessous code un peu plus concis mais bof....
les "IF" deviennnent des "IIF" , je gagne juste sur les "THEN"
ton algorithme fait symetriquement exactement la même chose que le
mien



;-)))
en A1 une valeur positive entiere puis lance la macro

Sub MagikSerge()
ordre = 1 + 2 * [A1].Value
[B2].Resize(52, 52).Clear
MsgBox "carré magique d'ordre " & ordre
Application.ScreenUpdating = False
debut = Application.WorksheetFunction.Ceiling(ordre / 2, 1)
Range("B2").Resize(ordre, ordre).Interior.Color = vbYellow
x = 2 + debut
y = 1 + debut
Cells(x, y) = 1
For i = 2 To ordre ^ 2
x = IIf(x + 1 > (ordre + 1), 2, x + 1)
y = IIf(y + 1 > (ordre + 1), 2, y + 1)
If Cells(x, y) > 0 Then x = x + 1: y = y - 1
y = IIf(y < 2, ordre + 1, y)
x = IIf(x > (ordre + 1), 2, x)
Cells(x, y) = i
Next
Application.ScreenUpdating = True
End Sub

;-)))
@+