condition durée

J

JJ

Guest
Bonsoir,
dans une macro Excel et une boucle, (temps as date)
C=3000 (= bas du tableau)
Do While temps < '02:00:00'
temps=temps+ Cell(C,1)
je fais une action
C=C+1
Loop
End..
le problème est que la durée peut etre inferieure a ces 2 heures et doonc la macro s'arrete (debogage-fin) car Excel ne peut pas aller jusqu a 2H s'il n'y a qu'1 heure par ex de durée cumulée dans la cellule 1
je voudrais qu'il ne bloque pas et continue
comment faire la condition
merci
bon WE
JJ
 

Charly2

Nous a quittés en 2006
Repose en paix
Bonjour JJ, bonjour à toutes et à tous :)

J'avoue ne pas trop comprendre l'intérêt de ta macro, mais c'est parce qu'il manque des informations, je pense.

Pourrais-tu joindre un fichier exemple ?

Amicalement
Charly
 
J

JJ

Guest
Bonsoir Charly
En fait la macro remonte de la ligne 3000 à 1 et remet certaines cellules à blanc jusqu a ce que la durée cumulée en col1 soit egale à 2H puis ne remet pas les cellules suivantes a blanc en remontant.

Mais si la durée est < a 2H en haut de tableau la macro plante!
Il suffirait simplement dans ce cas d'afficher un message utilisateur de style 'duree insuffisante' et d'aller a End Sub
comme ca les autres macros continueraient
Est ce facile?
Merci
Bonne soirée
JJ
 

Charly2

Nous a quittés en 2006
Repose en paix
Bonsoir JJ, bonsoir le forum,

Bon, j'avoue avoir toujours du mal à saisir ta demande :S

Le premier post :
dans une macro Excel et une boucle, (temps as date)
C=3000 (= bas du tableau)
Do While temps < '02:00:00'
temps=temps+ Cell(C,1)
je fais une action
C=C+1
Loop
End..

Questions :
1) quelle valeur contient le paramètre temps ?
2) Tu dis remonter de 3000 à 1 or la variable C est incrémentée à partir de 3000 (???) ; voir C = C + 1
3) pourquoi ajoutes-tu à temps la valeur des cellules Cells(C,1) ?

4) Aurais-tu un exemple de fichier avec ton code (en supprimant les données confidentielles)

Amicalement
Charly
 

Charly2

Nous a quittés en 2006
Repose en paix
Re,

Je crois que je viens de comprendre ta demande en relisant ton dernier post. En fait, je croyais que temps était un paramètre de ta procédure alors que c'est une variable !!!

Malgré tout, je ne comprends toujours pas pourquoi tu fais C = C + 1 pour remonter jusqu'à la ligne 1 (au lieu de C = C - 1)...

Enfin si j'ai bien compris, tu peux modifier ta boucle comme suit :

Do While temps < '02:00:00'
&nbsp;&nbsp;If C <1 then
&nbsp;&nbsp;&nbsp;&nbsp;MsgBox 'Durée insuffisante'
&nbsp;&nbsp;&nbsp;&nbsp;Exit Sub
&nbsp;&nbsp;End If
....

En espérant que cela réponde à ta demande :unsure:

Amicalement
Charly

Message édité par: Charly2, à: 20/11/2005 23:07
 
J

JJ

Guest
Bonjour Charly,
Oui tu as raison, c'est bien C=C-1 !!
je place le test correctement?:

je rajoute ce test (If C< à 2 (pas à 1?)
message
exit sub
end if
temps =temps+cell(c,1)
action
c=c-1
loop
end sub

mais je comlprends pas bien, car comment la macro pourra t elle savoir que la durée est < 1 si elle n'est pas arrivée jusqu ' en haut du tableau?
quelque chose m'échappe.....
merci et bonne semaine
JJ
 

Charly2

Nous a quittés en 2006
Repose en paix
Bonsoir JJ :)

Je confirme que le test est placé correctement.

C représentant la ligne traitée dans ton code, j'avais mis If C < 1 car
temps = temps + Cells(0, 1) entraîne une erreur...
Si tu as une ligne de titres, il faut effectivement que tu fasses If C < 2 Then...

Pour répondre à ta seconde question je pense que la première explication t'a éclairée car c'est ton code qui effectue le test sur la durée dans la boucle Do While temps etc. Ce que je t'ai proposé, c'est uniquement de sortir de la procédure (Exit Sub) si on est arrivé en haut du tableau avant le temps imparti.

En espérant avoir été clair :unsure:

Amicalement
Charly
 

Discussions similaires

Statistiques des forums

Discussions
312 345
Messages
2 087 450
Membres
103 546
dernier inscrit
mohamed tano