Indice en dehors de la plage.....help

Messages postés
190
Date d'inscription
vendredi 4 juin 2004
Statut
Membre
Dernière intervention
29 avril 2009
- - Dernière réponse : ecranbleu27
Messages postés
190
Date d'inscription
vendredi 4 juin 2004
Statut
Membre
Dernière intervention
29 avril 2009
- 3 avril 2007 à 05:41
bjr
j'ai un soucis "erreur 9 indice en dehors de la plage"....
sur ma machine ou j' ai vb6, je n'ai pas d'erreur
lorsque j'installe le prog sur la deuxieme machine, j'ai l'erreur.

je suppose que cela vient de cette partie de mon code,
(plus de ce qui est en bleu, car avant je ne l'avais pas encore programmé et je n'avais pas d'erreur....)
ou je fais une somme d'heures , avec plusieurs moyennes :

atab est déclaré en string
heure et minute en integer
j'ai mis une gestion d'erreur qui me dis  bien que ca se passe par là.....


<hr />

Set AdoStatS = New ADODB.Recordset
    strSQL = "SELECT  * FROM  sortie "
    AdoStatS.Open strSQL, cnn, adOpenDynamic, adLockOptimistic, adCmdText
 
 
  If AdoStatS.RecordCount = 0 Then Exit Sub
  With AdoStatS
  While Not (.EOF)
  X = .Fields(3)



           filteredExpression = replaceMinutesByCents(Replace(X, ",", "."))
           If cEval.Evaluate(Replace(filteredExpression, BASE10_SYMBOL, "")) <> "" Then
              result = cEval.Evaluate(Replace(filteredExpression, BASE10_SYMBOL, ""))
             sommecolonne = sommecolonne + result
             Else
             TxtR(4) = ""
           End If
            .MoveNext
 Wend
            
            VAR2 = Format(Int(sommecolonne) + (sommecolonne - Int(sommecolonne)) * 0.6, "0.00")
            ATAB = Split(VAR2, ".")
            HEURE = HEURE + Val(ATAB(0))
            MINUTE = MINUTE + ATAB(1)            If MINUTE 6 Then VAR2 (HEURE + 1)
           
            TxtR(4) = Format(VAR2, "0.00")
            TxtR(4).Visible = True
           
            AdoStatS.Resync
'MOYENNE PAR SORTIES
sommecolonne = "0"
result = "0"
HEURE = "0"
MINUTE = "0"
Y = VAR2 / TxtR(0)
X = Format(Y, "0.00")
    ATAB = Split(X, ".")
            HEURE = Val(ATAB(0))
            MINUTE = MINUTE + ATAB(1)
            MINUTE = MINUTE / 1.66666666666667
                TxtR(3) = Format((HEURE + (MINUTE / 100)), "0.00")
                             
     






<hr />merci d'avance
Afficher la suite 

17 réponses

Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
Tu fais un split sur un séparateur décimal qui risque de ne pas être présent dans 2 cas de figure :

1) cas d'une machine dont la localisation est telle qu'un autre séparateur que le tien est utilisé
2) cas d'un nombre entier (mais non car je vois que tu formates à 2 décimales avant le split)

si le séparateur (le tien) n'est pas trouvé (localisation différente) , le tableau résultant de ton split n'a qu'un seul élément (0) et l'élément (1) est donc hors limites de ton tableau !
Commenter la réponse de jmfmarques
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
J'ajoute quand même qu'il existe des méthodes plus orthodoxes pour transformer un nombre de minutes en heures et minutes .... non ?
Commenter la réponse de jmfmarques
Messages postés
190
Date d'inscription
vendredi 4 juin 2004
Statut
Membre
Dernière intervention
29 avril 2009
1
0
Merci
merci pour cette rapidité,
comment puis-je résoudre ce pb?

ai-je bien compris que le séparateur ; c'est le point ou virgule que l'on peut paramétrer dans les options régionales ou linguistiques...
si je fais une condition avec un "replace" est ce que cela peut le faire?
Commenter la réponse de ecranbleu27
Messages postés
190
Date d'inscription
vendredi 4 juin 2004
Statut
Membre
Dernière intervention
29 avril 2009
1
0
Merci
oups ! nos messages se sont croisés...
surement qu'il existe des moyens plus orthodoxes...
mais celui-ci  marche,
vb je l'aprends au fur et a mesure, et je suis preneur et a l'écoute des conseils que l'on pourrait me donner....
j'apprends en regardant les codes mais ne suis pas du tout issu du monde informatique
Commenter la réponse de ecranbleu27
Messages postés
190
Date d'inscription
vendredi 4 juin 2004
Statut
Membre
Dernière intervention
29 avril 2009
1
0
Merci
--> jmfmarques
bon, effectivement,
je viens de changer les param linguistiques , cad la virgule en point
et là plus d'erreur.....
merci de m'avoir mis sur la voie sans me donner la solution, c'est à moi de la trouver,
n'est-il pas?
d'ailleur il me semble que c'est comme cela que vs procedez ds vos réponses,
n'y voyez pas une attaque , mais j'ai eu souvent l'occasion de lire vos réponses
sur developpez. ;;;.....(vs n'etes pas prof par hasard??)

et donc je ne suis pas surpris de votre intervention ....
cela n'empeche que si il y a d'autres solutions pour travailler les heures , je ne demande qu' a apprendre......

cordialement
patrik
Commenter la réponse de ecranbleu27
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
Bon...
Nous allons t'aider donc (bien que je n'aie jamais été "prof" de ma vie...) :

Sis-nous ce que contient très exactement ceci avant tout formatage, s'il te plait.

Int(sommecolonne) + (sommecolonne - Int(sommecolonne))



en précisant ce que ce chiffre représente exactement (je crois comprendre qu'il s'agit d'un nombre de minutes ? .? ?)
Commenter la réponse de jmfmarques
Messages postés
190
Date d'inscription
vendredi 4 juin 2004
Statut
Membre
Dernière intervention
29 avril 2009
1
0
Merci
avant tt formatage.....?????
si il n'y a pas d'heures c'est que le recordset est vide donc je sors......
Commenter la réponse de ecranbleu27
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
ce que je veux savoir, c'est, quand des valeurs y figurent, ce qu'il y a dans :
Int(sommecolonne) + (sommecolonne - Int(sommecolonne))
un simple :
msgbox  Format(Int(sommecolonne) + (sommecolonne - Int(sommecolonne))
juste avant
 VAR2 = Format(Int(sommecolonne) + (sommecolonne - Int(sommecolonne)) * 0.6, "0.00")
te permettra de le savoir !

C'est ce que j'attends de savoir pour te répondre ...
Commenter la réponse de jmfmarques
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
rdon :
msgbox  int(sommecolonne) + (sommecolonne - Int(sommecolonne))
Commenter la réponse de jmfmarques
Messages postés
190
Date d'inscription
vendredi 4 juin 2004
Statut
Membre
Dernière intervention
29 avril 2009
1
0
Merci
bon, là,
la nuit porte conseil, je ne lache pas l'affaire, demain matin , je vois cela
je te  tiens au courant....
j'suis plus du matin.....
Commenter la réponse de ecranbleu27
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
Regarde :

je viens de "bâtir" 2 petits exemples ...
L'un correspond probablement à yon cas
L'autre est plus évolué.

Dans tous les cas : leur examen attentif devrait t'ouvrir certains horizons (je l'espère) !

Private Sub Command1_Click()
  nombreminutes = 612
  minutes = nombreminutes Mod 60
  heures = nombreminutes \ 60
  MsgBox heures & " heures " & " et " & minutes & " minutes"
End Sub



Private Sub Command2_Click()
  time1 = "03:40:20"
  time2 = "22:25:41"
  heures = Hour(time1) + Hour(time2)
  minutes = Minute(time1) + Minute(time2)
  secondes = Second(time1) + Second(time2)
  jours = 0
  ajustons secondes, minutes, 60
  ajustons minutes, heures, 60
  ajustons heures, jours, 24
  MsgBox jours & " jours " & heures & " heures " & minutes & " minutes " & secondes & " secondes "
End Sub



Private Sub ajustons(quoi, quoiavant, combien)
  quoiavant = quoiavant + (quoi \ combien)
  quoi = quoi Mod combien
End Sub
Commenter la réponse de jmfmarques
Messages postés
190
Date d'inscription
vendredi 4 juin 2004
Statut
Membre
Dernière intervention
29 avril 2009
1
0
Merci
merci
je vais potasser, et j'espere y voir plus clair.....
je te tiens au courant

patrik
Commenter la réponse de ecranbleu27
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
15
0
Merci
Porte attention au signe de division de jmf ...
"" donne un résultat différent de "/"

MPi
Commenter la réponse de cs_MPi
Messages postés
190
Date d'inscription
vendredi 4 juin 2004
Statut
Membre
Dernière intervention
29 avril 2009
1
0
Merci
bjr
c'est ce que je me dis , hier soir, "tiens la barre de la div est ds l'autre sens..." et puis j'ai fermé ......
Commenter la réponse de ecranbleu27
Messages postés
190
Date d'inscription
vendredi 4 juin 2004
Statut
Membre
Dernière intervention
29 avril 2009
1
0
Merci
Première chose et dans l'ordre:


je rajoute donc:
msgbox (Int(sommecolonne) + (sommecolonne - Int(sommecolonne))
juste avant
 VAR2 = Format(Int(sommecolonne) + (sommecolonne - Int(sommecolonne)) * 0.6, "0.00")
dans mon code comme prévu,
je saisi un enregistrement avec comme valeur : 2.00 (donc deux heures)
ca c'est dans un form "SAISIE",
mes "stats" elles sont ds un form "STAT"
je mets des points d'arrets autour de "msgbox  Format(Int(sommecolonne......"

j'ai bien le msgbox qui s'ouvre , mais le mess affiché est :
      (int(sommecolonne) + (sommecolonne - Int(sommecolonne))
et pas de valeur, par contre la valeur de "atab" sur la ligne suivante est bien de "2.00"
ainsi que ds la boucle qui précede ( elle est de 2 , sans formatage 0.00)
et mon form "STAT" affiche bien les données.

maintenant je vais regarder les exemples donnés.....
Commenter la réponse de ecranbleu27
Messages postés
190
Date d'inscription
vendredi 4 juin 2004
Statut
Membre
Dernière intervention
29 avril 2009
1
0
Merci
les deux exemples:

ma première analyse est que j'ai l'impression d'avoir un soucis avec la déclaration de mes variables.....
VAR2 es déclaré en variant
HEURE et MINUTE en integer

premier exemple :
si j'ai bien compris le "" renvois les chiffres avant la virgule de la division....(génial....)
mais pour cas , il faut savoir tout d'abord que la personne qui saisit , saisit une durée dans le form "SAISIE" ,
cad si il tape : 1.50 , ce n'est pas une heure et demie mais bien une heure et 50 minutes.

donc pour que mon VAR2 soit bien exprimé il faut que je transforme l'exemple 1 en :
 nombreminutes = 612
  minutes = nombreminutes Mod 60
  heures = nombreminutes \ 60
  MsgBox heures & " heures " & " et " & minutes & " minutes"
Commenter la réponse de ecranbleu27
Messages postés
190
Date d'inscription
vendredi 4 juin 2004
Statut
Membre
Dernière intervention
29 avril 2009
1
0
Merci
oups ca a dérapé, donc en



 nombreminutes = VAR2 *60
  'minutes = nombreminutes Mod 60
  heures = nombreminutes \ 60
  minute=format((VAR2 - heure) * 100, "0")
  MsgBox heures & " heures " & " et " & minutes & " minutes"



lorsque je calcule le total des durées saisies.


dans le deuxième partie de mon code ou je calcule une moyenne "Y",
Y=VAR2 / txtr(0)           ' VAR2=total des durées et txtr(0) = nb de saisies.

l'exemple reste valable avec :
  Y=VAR2 / txtr(0)                   'Y as string
  X=format(Y ,"0.00")               'X as string  
   nombreminutes = X * 60
  minutes = nombreminutes Mod 60
  heures = nombreminutes \ 60
  MsgBox heures & " heures " & " et " & minutes & " minutes"

mais comment puis-je être sûr que ca marchera ds ts les cas......???
autre info la saisie de la durée de la form "SAISIE" se fait ds un textbox dataformat "heure" et datafield "duree" (qui ds la table ACCESS est en texte).

mais effectivement, le premier exemple est beaucoup plus simple que mon "atab",
pour le deuxieme exemple , ca ne marche pas......je pense qu'a la vue de toutes mes variables qui sont déclarées dans tous les sens....

voilà, j'y suis depuis 3 h ce matin il est 5H30 , ce que vous les "spécialistes" vous voyez en 2 sec, ben.......

merci de me dire si je suis a coté de la plaque, bon je vais allez boire mon troisieme café et vous souhaite un bon réveil.....
Commenter la réponse de ecranbleu27