Remplacer une cellule sous condition

Bonjour,

en passant par une macro

je souhaite executer une formule dans une cellule rempli manuellement en heure.

j'ai deux cellules d'heure,

si la différence entre les deux heures est inferieur à 1h00 alors l'heure se modifie automatiquement

1h00 = 1/24 si je ne me trompe pas

ex: en E6 j'ai 12h30 et en G6 je tape 13h25

la macro que je souhaiterai :

si ( G6 - E6 ) < à 1/24

alors E6 + 1/24

sinon G6

cela fera donc apparaître en G6 13h30

et que cela s'applique pour toutes les cellules de la colonne G

Pensez vous que cela soit possible ?

Merci d'avance pour vos réponses

Bonjour,

1 heure = 0,0416666....

Pour éviter des calculs erronés il est préférable d'utiliser 1/24 pour représenter 1 heure.

D'autre part, la logique de ta formule est plutôt celle-ci :

=SI(G6-E6<1/24;E6+1/24;G6)

Note également que cela fonctionne si tu n'as jamais à passer d'avant minuit (23:...) à après minuit (00:...), car dans ce cas il vaut mieux apprécier la différence par l'expression : MOD(G6-E6;1).

Cordialement.

merci

salut

merci d'avoir repris ma condition dans la formule, je viens de la modifier.

les heures ne pourrons jamais dépasser 24h, chaque lignes correspondent à une journée

vous avez une solution à me proposer?

je suis bien embêté si vous n'avez aucune proposition à me faire ...

C'est pas résolu ??

non, je demande de l'aide pour établir cette formule en macro.

dans mon exemple, si j'écris en G6 "13:25" alors grace à la macro cela fera apparaître d'office en G6 "13:30".

Pour quoi faire en macro ? La formule est simpliste et elle fait le travail !

je dois mal me faire comprendre ..

dans la cellule G6 j'écris "13:25" donc je ne peux pas y mettre la formule

Délimite la plage concernée par l'opération.

c'est à dire?

Les réactions sont pas rapides !

Cela s'applique à G6, OK !

A quelles autres cellules encore ?

Cela ne peut s'appliquer à toutes ! Tu ne pourrais plus rien faire d'autre sur ta feuille !

oui comme tu dis

chacune des lignes corresponde à une journée.

les horaires que l'on rentre dans ces deux colonnes E et G correspondent au debut et à la fin d'une pause repas.

doucette formule s'applique à toute les cellules de la colonne G de la ligne 6 à 372.

Voici un procédure qui devrait faire ce que tu souhaite, à placer dans le module de la feuille concernée (raccourci pour y accéder : clic droit sur l'onglet de la feuille, et Visualiser le code dans le menu contextuel).

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim h
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Me.Range("G6:G372")) Is Nothing Then
        On Error GoTo erreur
        Application.EnableEvents = False
        If Target > 1 Then
            Target.ClearContents
        Else
            If Target.Offset(, -2) <> "" Then
                h = Target.Offset(, -2) + 1 / 24
                If CSng(Target) < h Then Target = h
            Else
                Target.ClearContents
            End If
        End If
        Application.EnableEvents = True
    End If
    Exit Sub
erreur:
    Target.ClearContents
    Application.EnableEvents = True
End Sub

Comme tu peux voir, c'est un peu moins simple qu'avec une formule (du moins pour s'assurer une maîtrise satisfaisante de l'opération.

La procédure ci-dessus prend en compte presque tous les cas de figure :

D'abord, elle est cadrée sur la plage en G que tu as indiquée, elle ne s'appliquera pas ailleurs.

Dans le cas prévu par ta demande, si tu tapes une heure en G, l'écart avec la valeur de E sur la même ligne est évalué, s'il est inférieur à une heure la valeur saisie sera modifiée de façon que l'écart corresponde à une heure, sinon elle est maintenue.

Maintenant, si tu saisis une valeur ne correspondant pas à une valeur horaire simple, nombre supérieur à 1 ou texte, la saisie sera effacée.

Si en colonne E, la cellule est vide, la saisie sera également effacée. De même si en E se trouve du texte.

Cela bloque donc presque toutes les saisies non conformes possibles. Presque, car cela ne bloquera pas la sasie si E contient une valeur numérique ne correspondant pas à une heure...

Rappel que l'heure est une valeur numérique de même type que la date, la partie entière représentant une date ou un nombre de jours, la partie décimale l'heure (fraction de jour).

Cordialement.

bonsoir, je vais tester ta macro

je reviens vous dire ce qu'il en est ...

merci

Rechercher des sujets similaires à "remplacer condition"