Blocage boucle FOR NEXT en SINGLE

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Thom
Le #16630921
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" 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


Papyjac
Le #16630731
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" 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





Mousnynao
Le #16630901
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" > 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
>
>
>


Thom
Le #16630851
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" 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" > 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
>
>
>




Papyjac
Le #16631311
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" > > 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
> >
> >
> >


michdenis
Le #16632491
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" 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
Papyjac
Le #16632901
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" 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




michdenis
Le #16632881
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" 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" 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




Jacques-A
Le #16637031
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" 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" 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
Jacquouille
Le #16637001
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" 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


Publicité
Poster une réponse
Anonyme