condition de "départ"

J

JJ

Guest
Bonjour,
J'ai dans une macro une boucle Do While...Loop
A l'interieur de cette boucle des lignes 5000 à 1 en remontant je fais une action tant que la boucle n'est pas atteinte.
donc:

C=5000
Do While T < 01:00:00
T=T+Cells(C,1)
mon action (remise à zéro de cellules)
C=C-1
Loop

Je n'arrive pas à faire débuter mon action avec une condition de départ, (par défaut la remise à zéro commence en bas de tableau jusqu a une durée T=1H)

je voudrais remettre à zéro des cellules seulement à partir du moment ou la cellule de la colonne 4 contiendrait par ex la date 01/12/2005 et ensuite remise à zéro en remontant tant que la boucle Do While n'est pas atteinte (1Heure).

Comment rajouter cette condition, avez vous une idée?
merci
JJ
 

ZZR09

XLDnaute Occasionnel
Bonjour jj, le forum,

Si j'ai bien compris, tu ne lances ton action qu'après une condition, cela pourrait donner :

C=5000
Do While C <=1
If cells(C,4)=01/12/2005 then
Do While T < 01:00:00
T=T+Cells(C,1)
cells(C,1)= 0:0:0
C=C-1
loop
End if
Loop

j'ai adapté à ta première idée.
J'ai juste rajouté une condoition vérifiant sur la plage nommée et en remontant que la date est égale à 01/12/2005.

Je ne l'ai pas testé, tu me diras si ça fonctionne!

A+
 

ZZR09

XLDnaute Occasionnel
Re,

Je viens de tester ... et de mofifier tout ce qu'avais fait : ça ne fonctionnait pas du tout. :eek:

voilà autre chose :

Code:
Sub test()
Dim c As Integer 'n° ligne'
Dim tm As Date ' heure référence'
Dim dt As String 'date sélectionnée'
Dim dtdpt As String ' date de départ (cellule)'

dt = InputBox('Indiquez la date', 'Date', '01/12/2005')
c = 3000

Do While c >= 1
If CDate(Cells(c, 2)) = DateValue(dt) Then
    dtdpt = 'A' & CStr(c)
    Do While tm < TimeValue('01:00:00')
    
    If c = 0 Then
        MsgBox 'Le tems 01:00:00 n'a pas été dépassé :' & CStr(tm) & ' est atteint en partant de la cellule ' & dtdpt & ' jusqu'à la cellule A1', vbInformation, 'Fini'
        Range('A1').Select
        Exit Sub
    End If
    tm = tm + Cells(c, 1)
    Cells(c, 1) = TimeValue('00:00:00')
    c = c - 1
    Loop
    MsgBox 'Le temps ' & CStr(tm) & ' est atteint en partant de la cellule ' & dtdpt & ' jusqu'à la cellule A' & CStr(c), vbInformation, 'Fini'
    Range('A1').Select
    Exit Sub
End If
c = c - 1
Loop

C'est testé sur le fichier joint.

A+
;) [file name=add_heures.zip size=49840]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/add_heures.zip[/file]
 

Pièces jointes

  • add_heures.zip
    48.7 KB · Affichages: 21
  • add_heures.zip
    48.7 KB · Affichages: 27
  • add_heures.zip
    48.7 KB · Affichages: 15
J

JJ

Guest
Bonjour je me doutais bien que ce ne serait pas aussi simple que ça!
la macro est beaucoup plus compliquée, je vais l'écrire et la tester au bureau lundi.
Merci beaucoup.

Petite question: dans cette macro j'ai donc une durée fixe (ici 1H)
je voudrais trouver la ligne de macro qui me creerait une variable ' temps' en fonction d'une variable 'jour' (règle de 3)
Comment l'adapter en sachant que la forme est < '01:00:00'

ex:
Si j'ai 10 pour la variable 'jour' (que j'ai calculée precedemment)pour 30 jours:
je fais un calcul pour temps= '01:00:00'/30 *10 jours = 20 minutes

mais le probleme pour ramener à ma macro c'est que le résultat doit etre sous la forme Do While...<'00:20:00'
Avez vous une idée?
merci
JJ
 

ZZR09

XLDnaute Occasionnel
Re:condition de \"départ\"

Re,

En fait pour indiquer une heure, il suffit de rentrer l'instruction :

TimeValue('00:20:00')
le temps est une chaîne de caractères.

si tm est cette variable, obtenue à partir d'une règle de trois, l'instruction est la suivante :

TimeValue(CStr(tm)).

CStr est une instruction qui converti une expression en variable chaîne de caractères (String). Même s'en est déjà une!

A+


;)

Message édité par: zzr09, à: 10/12/2005 15:00
 
J

JJ

Guest
Bonjour ZZR09
J'essaye d'adapter ta macro (qui marche !) à ma macro (qui a un problème déjà au niveau de la règle de 3)

La variable jour a été calculé et fonctionne (nombre de jours)

j'ai écrit:

T = TimeValue('01:00:00')
résultat = Format((T/30) * jour,'hh:mm:ss')

la macro marque 'incompatibilité de type?
je devrais obtenir la variable résultat (avec une valeur de '00:20:00' pour 10jours par ex)
ou je me suis trompé?
merci et bon dimanche
JJ
 

ZZR09

XLDnaute Occasionnel
Bonsoir jj, le forum

voici une variante de ma macro : En fait j'ai juste intriduit le nombre de jours avec un inputbox. :)

Le problème de l'inputbox c'est qu'il fourni une variable String ... convertie en integer avec l'instruction
CInt :
jour=Cint(inputbox( ...))

on peut donc l'utiliser comme un nombre pour la multiplication ( et contourner ainsi le problème 'd'incompatibilité de type'. :p


A+
;)

voici les modifs, après avoir déclaré la variable jour as integer (j'aurai pu la déclérer comme Byte : 256 auraient été suffisants)

Code:
dt = InputBox('Indiquez la date', 'Date', '01/12/2005')
jour = CInt(InputBox('indiquez le nombre de jours comptabilisés', '/ jours', '10'))
c = 3000

Do While c >= 1
If CDate(Cells(c, 2)) = DateValue(dt) Then
    dtdpt = 'A' & CStr(c)
    Do While tm < TimeValue('01:00:00') / 30 * jour
    
    If c = 0 Then
        MsgBox 'Le temps ' & TimeValue('01:00:00') / 30 * jour & 'n'a pas été dépassé :' & CStr(tm) & ' est atteint en partant de la cellule ' & dtdpt & ' jusqu'à la cellule A1', vbInformation, 'Fini'
        Range('A1').Select
 
J

JJ

Guest
Bonsoir ZZR09,

J'ai du mal avec cette macro....un aspirine serait la bienvenue!!!
je ne comprends pas ton dernier message , sauf que l'inputbox transforme jour en variable string pour faire la regle de 3.

Mon probleme c'est que ma variable 'jour' je l'ai calculée dans ma macro juste avant par :
InputBox saisir la date.....(ta variable dt)
jour=Now()-dt

et j'ai donc ma variable 'jour' donc je ne peux pas rajouter un InputBox , alors que j'ai deja le nombre de jours?

Et à quoi correspond le 'A ' en rouge apres dtdpt? est ce la colonne A donc une?

Encore merci pour ton aide et bonne semaine
JJ
 
Z

ZZR09

Guest
bonjour JJ, le forum,

si le jour est déjà calculé et déclaré comme variable de type integer ou byte, tu peux supprimer ma ligne de commande

Code:
jour = CInt(InputBox('indiquez le nombre de jours comptabilisés', '/ jours', '10'))

il faut ensuite remplacer :
Code:
       MsgBox 'Le temps ' & TimeValue('01:00:00') / 30 * jour & 'n'a pas été dépassé :' & CStr(tm) & ' est atteint en partant de la cellule ' & dtdpt & ' jusqu'à la cellule A1', vbInformation, 'Fini'
par :
Code:
       MsgBox 'Le temps ' & jour & ' n'a pas été dépassé :' & CStr(tm) & ' est atteint en partant de la cellule ' & dtdpt & ' jusqu'à la cellule A1', vbInformation, 'Fini'

Si ça ne fonctionne toujours pas, le mieux et le plus facile pour moi serait que tu me joignes un exemple de ton fichier (avec des données et des dates bidons) zippé à moins de 50ko.

Cela me permettrait de mieux comprendre ce que tu veux faire.

Sinon, pour le 'A' en rouge dans le code, c'est effectivement pour lui indiquer l'adresse de la colonne à prendre en compte; la première en l'occurence.

A+
;)
 

Discussions similaires

Statistiques des forums

Discussions
312 432
Messages
2 088 368
Membres
103 835
dernier inscrit
Jaco24