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

Blocage boucle FOR NEXT en SINGLE

21 réponses
Avatar
Papyjac
Bonjour,

Je suis en version V2003

J'exécute le code simple suivant :

Sub TestSingle()
'_Appel de la fonction
Call TestBoucle(1000000#)
Call TestBoucle(10000000#)
Call TestBoucle(100000000#)
End Sub

Private Sub TestBoucle(Max As Single)
'_Boucle de traitement
Dim U_I As Single ' Indice
For U_I = 1 To Max Step 1
Next
MsgBox Max & " boucles effectuées"
End Sub

La 1ère et la 2ème boucle sont correcte
La 3ème boucle se bloque sur le NEXT avec U_I= 1,677722E+07

Il ne s'agit pas d'un plantage, mais d'un blocage

Bon, ce code ne sert à rien, mais c'est pas une raison pour bloquer

C'est un problème connu ?

--
Papyjac

10 réponses

1 2 3
Avatar
Thom
Bonjour,

Je confirme le "blocage", je n'ai pas de plantage, mais le text n'arrive pas
à paser les
1,677722E+07 et non les 3,402823E38 promis dans les spécifications VBA

Parcontre, j'ai fait l'essai avec une variable long ou variant, il n'y a pas
de soucis.

J'ai aussi fait la conversion de 100000001 en single et là aussi ça passe...
Etrange

Thomas


"Papyjac" a écrit dans le message de
news:
Bonjour,

Je suis en version V2003

J'exécute le code simple suivant :

Sub TestSingle()
'_Appel de la fonction
Call TestBoucle(1000000#)
Call TestBoucle(10000000#)
Call TestBoucle(100000000#)
End Sub

Private Sub TestBoucle(Max As Single)
'_Boucle de traitement
Dim U_I As Single ' Indice
For U_I = 1 To Max Step 1
Next
MsgBox Max & " boucles effectuées"
End Sub

La 1ère et la 2ème boucle sont correcte
La 3ème boucle se bloque sur le NEXT avec U_I= 1,677722E+07

Il ne s'agit pas d'un plantage, mais d'un blocage

Bon, ce code ne sert à rien, mais c'est pas une raison pour bloquer

C'est un problème connu ?

--
Papyjac


Avatar
Papyjac
Bonjour Thom,

Et merci de me confirmer que je ne suis pas fou

J'ai aussi testé en DOUBLE : c'est OK

Mystère

--
Papyjac


"Thom" a écrit :

Bonjour,

Je confirme le "blocage", je n'ai pas de plantage, mais le text n'arrive pas
à paser les
1,677722E+07 et non les 3,402823E38 promis dans les spécifications VBA

Parcontre, j'ai fait l'essai avec une variable long ou variant, il n'y a pas
de soucis.

J'ai aussi fait la conversion de 100000001 en single et là aussi ça passe...
Etrange

Thomas


"Papyjac" a écrit dans le message de
news:
> Bonjour,
>
> Je suis en version V2003
>
> J'exécute le code simple suivant :
>
> Sub TestSingle()
> '_Appel de la fonction
> Call TestBoucle(1000000#)
> Call TestBoucle(10000000#)
> Call TestBoucle(100000000#)
> End Sub
>
> Private Sub TestBoucle(Max As Single)
> '_Boucle de traitement
> Dim U_I As Single ' Indice
> For U_I = 1 To Max Step 1
> Next
> MsgBox Max & " boucles effectuées"
> End Sub
>
> La 1ère et la 2ème boucle sont correcte
> La 3ème boucle se bloque sur le NEXT avec U_I= 1,677722E+07
>
> Il ne s'agit pas d'un plantage, mais d'un blocage
>
> Bon, ce code ne sert à rien, mais c'est pas une raison pour bloquer
>
> C'est un problème connu ?
>
> --
> Papyjac





Avatar
Mousnynao
Bonjour,

À mon humble avis :

L'utilisation du mot réservé MAX est douteux !

Private Sub TestBoucle(Max As Single)

Pourraît faire apparaître des comportements fantomatique !

mousnynao

"Papyjac" a écrit :

Bonjour Thom,

Et merci de me confirmer que je ne suis pas fou

J'ai aussi testé en DOUBLE : c'est OK

Mystère

--
Papyjac


"Thom" a écrit :

> Bonjour,
>
> Je confirme le "blocage", je n'ai pas de plantage, mais le text n'arrive pas
> à paser les
> 1,677722E+07 et non les 3,402823E38 promis dans les spécifications VBA
>
> Parcontre, j'ai fait l'essai avec une variable long ou variant, il n'y a pas
> de soucis.
>
> J'ai aussi fait la conversion de 100000001 en single et là aussi ça passe...
> Etrange
>
> Thomas
>
>
> "Papyjac" a écrit dans le message de
> news:
> > Bonjour,
> >
> > Je suis en version V2003
> >
> > J'exécute le code simple suivant :
> >
> > Sub TestSingle()
> > '_Appel de la fonction
> > Call TestBoucle(1000000#)
> > Call TestBoucle(10000000#)
> > Call TestBoucle(100000000#)
> > End Sub
> >
> > Private Sub TestBoucle(Max As Single)
> > '_Boucle de traitement
> > Dim U_I As Single ' Indice
> > For U_I = 1 To Max Step 1
> > Next
> > MsgBox Max & " boucles effectuées"
> > End Sub
> >
> > La 1ère et la 2ème boucle sont correcte
> > La 3ème boucle se bloque sur le NEXT avec U_I= 1,677722E+07
> >
> > Il ne s'agit pas d'un plantage, mais d'un blocage
> >
> > Bon, ce code ne sert à rien, mais c'est pas une raison pour bloquer
> >
> > C'est un problème connu ?
> >
> > --
> > Papyjac
>
>
>


Avatar
Thom
Bonjour Mousnynao,
Dans mes tests, j'ai simplifié au maximun en faisant :

Public Sub Test()
Dim i as Single
For i = 0 to 100000000
Next
End Sub

... et ça ne fonctionne pas non plus
:-(

"Mousnynao" a écrit dans le message de
news:
Bonjour,

À mon humble avis :

L'utilisation du mot réservé MAX est douteux !

Private Sub TestBoucle(Max As Single)

Pourraît faire apparaître des comportements fantomatique !

mousnynao

"Papyjac" a écrit :

Bonjour Thom,

Et merci de me confirmer que je ne suis pas fou

J'ai aussi testé en DOUBLE : c'est OK

Mystère

--
Papyjac


"Thom" a écrit :

> Bonjour,
>
> Je confirme le "blocage", je n'ai pas de plantage, mais le text
> n'arrive pas
> à paser les
> 1,677722E+07 et non les 3,402823E38 promis dans les spécifications VBA
>
> Parcontre, j'ai fait l'essai avec une variable long ou variant, il n'y
> a pas
> de soucis.
>
> J'ai aussi fait la conversion de 100000001 en single et là aussi ça
> passe...
> Etrange
>
> Thomas
>
>
> "Papyjac" a écrit dans le message
> de
> news:
> > Bonjour,
> >
> > Je suis en version V2003
> >
> > J'exécute le code simple suivant :
> >
> > Sub TestSingle()
> > '_Appel de la fonction
> > Call TestBoucle(1000000#)
> > Call TestBoucle(10000000#)
> > Call TestBoucle(100000000#)
> > End Sub
> >
> > Private Sub TestBoucle(Max As Single)
> > '_Boucle de traitement
> > Dim U_I As Single ' Indice
> > For U_I = 1 To Max Step 1
> > Next
> > MsgBox Max & " boucles effectuées"
> > End Sub
> >
> > La 1ère et la 2ème boucle sont correcte
> > La 3ème boucle se bloque sur le NEXT avec U_I= 1,677722E+07
> >
> > Il ne s'agit pas d'un plantage, mais d'un blocage
> >
> > Bon, ce code ne sert à rien, mais c'est pas une raison pour bloquer
> >
> > C'est un problème connu ?
> >
> > --
> > Papyjac
>
>
>




Avatar
Papyjac
Bonjour Mousnynao,

Effectivement max la menace aurait pu frapper, mais en l'occurence j'ai
remplacé par pMax : C'est pareil

encore merci

--
Papyjac


"Mousnynao" a écrit :

Bonjour,

À mon humble avis :

L'utilisation du mot réservé MAX est douteux !

Private Sub TestBoucle(Max As Single)

Pourraît faire apparaître des comportements fantomatique !

mousnynao

"Papyjac" a écrit :

> Bonjour Thom,
>
> Et merci de me confirmer que je ne suis pas fou
>
> J'ai aussi testé en DOUBLE : c'est OK
>
> Mystère
>
> --
> Papyjac
>
>
> "Thom" a écrit :
>
> > Bonjour,
> >
> > Je confirme le "blocage", je n'ai pas de plantage, mais le text n'arrive pas
> > à paser les
> > 1,677722E+07 et non les 3,402823E38 promis dans les spécifications VBA
> >
> > Parcontre, j'ai fait l'essai avec une variable long ou variant, il n'y a pas
> > de soucis.
> >
> > J'ai aussi fait la conversion de 100000001 en single et là aussi ça passe...
> > Etrange
> >
> > Thomas
> >
> >
> > "Papyjac" a écrit dans le message de
> > news:
> > > Bonjour,
> > >
> > > Je suis en version V2003
> > >
> > > J'exécute le code simple suivant :
> > >
> > > Sub TestSingle()
> > > '_Appel de la fonction
> > > Call TestBoucle(1000000#)
> > > Call TestBoucle(10000000#)
> > > Call TestBoucle(100000000#)
> > > End Sub
> > >
> > > Private Sub TestBoucle(Max As Single)
> > > '_Boucle de traitement
> > > Dim U_I As Single ' Indice
> > > For U_I = 1 To Max Step 1
> > > Next
> > > MsgBox Max & " boucles effectuées"
> > > End Sub
> > >
> > > La 1ère et la 2ème boucle sont correcte
> > > La 3ème boucle se bloque sur le NEXT avec U_I= 1,677722E+07
> > >
> > > Il ne s'agit pas d'un plantage, mais d'un blocage
> > >
> > > Bon, ce code ne sert à rien, mais c'est pas une raison pour bloquer
> > >
> > > C'est un problème connu ?
> > >
> > > --
> > > Papyjac
> >
> >
> >


Avatar
michdenis
Passer une variable de type "Single" pour une boucle
utilisant des nombres entiers n'est sûrement pas la
découverte du siècle !



"Papyjac" a écrit dans le message de
news:
Bonjour,

Je suis en version V2003

J'exécute le code simple suivant :

Sub TestSingle()
'_Appel de la fonction
Call TestBoucle(1000000#)
Call TestBoucle(10000000#)
Call TestBoucle(100000000#)
End Sub

Private Sub TestBoucle(Max As Single)
'_Boucle de traitement
Dim U_I As Single ' Indice
For U_I = 1 To Max Step 1
Next
MsgBox Max & " boucles effectuées"
End Sub

La 1ère et la 2ème boucle sont correcte
La 3ème boucle se bloque sur le NEXT avec U_I= 1,677722E+07

Il ne s'agit pas d'un plantage, mais d'un blocage

Bon, ce code ne sert à rien, mais c'est pas une raison pour bloquer

C'est un problème connu ?

--
Papyjac
Avatar
Papyjac
Bonjour Michdenis

Non, c'est juste volontaire, et c'est curieux car

ça marche en DOUBLE
ça marche en SINGLE pour 100000
ça marche en SINGLE pour 1000000

S'il ne veut pas compter, il peut dire dépassement de capacité, erreur
donnée, quelque chose, même en anglais


--
Papyjac


"michdenis" a écrit :

Passer une variable de type "Single" pour une boucle
utilisant des nombres entiers n'est sûrement pas la
découverte du siècle !



"Papyjac" a écrit dans le message de
news:
Bonjour,

Je suis en version V2003

J'exécute le code simple suivant :

Sub TestSingle()
'_Appel de la fonction
Call TestBoucle(1000000#)
Call TestBoucle(10000000#)
Call TestBoucle(100000000#)
End Sub

Private Sub TestBoucle(Max As Single)
'_Boucle de traitement
Dim U_I As Single ' Indice
For U_I = 1 To Max Step 1
Next
MsgBox Max & " boucles effectuées"
End Sub

La 1ère et la 2ème boucle sont correcte
La 3ème boucle se bloque sur le NEXT avec U_I= 1,677722E+07

Il ne s'agit pas d'un plantage, mais d'un blocage

Bon, ce code ne sert à rien, mais c'est pas une raison pour bloquer

C'est un problème connu ?

--
Papyjac




Avatar
michdenis
Essaie ceci :

'---------------------------
Sub test()
Dim A As Integer
Dim B As Integer
Dim C As Long

A = 32000
B = 5000
C = A + B
End Sub
'---------------------------

Refais la même sub en déclarant toutes
tes variables "As Long"... tu y vois une différence ?



"Papyjac" a écrit dans le message de
news:
Bonjour Michdenis

Non, c'est juste volontaire, et c'est curieux car

ça marche en DOUBLE
ça marche en SINGLE pour 100000
ça marche en SINGLE pour 1000000

S'il ne veut pas compter, il peut dire dépassement de capacité, erreur
donnée, quelque chose, même en anglais


--
Papyjac


"michdenis" a écrit :

Passer une variable de type "Single" pour une boucle
utilisant des nombres entiers n'est sûrement pas la
découverte du siècle !



"Papyjac" a écrit dans le message de
news:
Bonjour,

Je suis en version V2003

J'exécute le code simple suivant :

Sub TestSingle()
'_Appel de la fonction
Call TestBoucle(1000000#)
Call TestBoucle(10000000#)
Call TestBoucle(100000000#)
End Sub

Private Sub TestBoucle(Max As Single)
'_Boucle de traitement
Dim U_I As Single ' Indice
For U_I = 1 To Max Step 1
Next
MsgBox Max & " boucles effectuées"
End Sub

La 1ère et la 2ème boucle sont correcte
La 3ème boucle se bloque sur le NEXT avec U_I= 1,677722E+07

Il ne s'agit pas d'un plantage, mais d'un blocage

Bon, ce code ne sert à rien, mais c'est pas une raison pour bloquer

C'est un problème connu ?

--
Papyjac




Avatar
Jacques-A
Thom a écrit :
Bonjour Mousnynao,
Dans mes tests, j'ai simplifié au maximun en faisant :

Public Sub Test()
Dim i as Single
For i = 0 to 100000000
Next
End Sub

... et ça ne fonctionne pas non plus
:-(

"Mousnynao" a écrit dans le message de
news:
Bonjour,

À mon humble avis :

L'utilisation du mot réservé MAX est douteux !

Private Sub TestBoucle(Max As Single)

Pourraît faire apparaître des comportements fantomatique !

mousnynao

"Papyjac" a écrit :

Bonjour Thom,

Et merci de me confirmer que je ne suis pas fou

J'ai aussi testé en DOUBLE : c'est OK

Mystère

--
Papyjac


"Thom" a écrit :

Bonjour,

Je confirme le "blocage", je n'ai pas de plantage, mais le text
n'arrive pas
à paser les
1,677722E+07 et non les 3,402823E38 promis dans les spécifications VBA

Parcontre, j'ai fait l'essai avec une variable long ou variant, il n'y
a pas
de soucis.

J'ai aussi fait la conversion de 100000001 en single et là aussi ça
passe...
Etrange

Thomas


"Papyjac" a écrit dans le message
de
news:
Bonjour,

Je suis en version V2003

J'exécute le code simple suivant :

Sub TestSingle()
'_Appel de la fonction
Call TestBoucle(1000000#)
Call TestBoucle(10000000#)
Call TestBoucle(100000000#)
End Sub

Private Sub TestBoucle(Max As Single)
'_Boucle de traitement
Dim U_I As Single ' Indice
For U_I = 1 To Max Step 1
Next
MsgBox Max & " boucles effectuées"
End Sub

La 1ère et la 2ème boucle sont correcte
La 3ème boucle se bloque sur le NEXT avec U_I= 1,677722E+07

Il ne s'agit pas d'un plantage, mais d'un blocage

Bon, ce code ne sert à rien, mais c'est pas une raison pour bloquer

C'est un problème connu ?

--
Papyjac














Bonjour,

Avez-vous tenté de vérifier durant la boucle (attention, je ne suis pas
certain de ne pas avoir mélanger les langages) ?

dim I As Single
M000
K=M
for i= K to 100E6
M = M+1
if i .NE. M print "Déraillement : " i " diffère de " m
next


Jacques
Avatar
Jacquouille
Salut Papy
Faut jamais contrarier ni les femmes, ni Excel.
S'il ne veut pas, ...ben tu le laisses. -)
Je ne comprends pas ton "MAX".
Tu le définis comme single.
Mais où prend-il sa valeur?
De plus, l'emploi de ce mot (qui est une fonction excel) n 'est-il pas
dangereux ????

--
Bien amicalmement,
"Le vin est au repas ce que le parfum est à la femme."

Jacquouille.

"Papyjac" a écrit dans le message de
news:
Bonjour,

Je suis en version V2003

J'exécute le code simple suivant :

Sub TestSingle()
'_Appel de la fonction
Call TestBoucle(1000000#)
Call TestBoucle(10000000#)
Call TestBoucle(100000000#)
End Sub

Private Sub TestBoucle(Max As Single)
'_Boucle de traitement
Dim U_I As Single ' Indice
For U_I = 1 To Max Step 1
Next
MsgBox Max & " boucles effectuées"
End Sub

La 1ère et la 2ème boucle sont correcte
La 3ème boucle se bloque sur le NEXT avec U_I= 1,677722E+07

Il ne s'agit pas d'un plantage, mais d'un blocage

Bon, ce code ne sert à rien, mais c'est pas une raison pour bloquer

C'est un problème connu ?

--
Papyjac


1 2 3