Problème écriture cellule

Fermé
josh - 10 juin 2010 à 14:41
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 - 10 juin 2010 à 23:48
Bonjour,

j'ai 9 feuilles excel, 3 modules
dans chaque code de feuille j'ai l'évenement ;

Private Sub Worksheet_Change(ByVal Target As Range)
Call type
Call alerte1
Call alerte2
End Sub

dans le module type j'ai plusieurs conditions qui colorisent des cellules, écrivent du texte dans les cellules:
Exemple :

public sub type

Dim lig As Long
For lig = 2 To [A65535].End(xlUp).Row

If Cells(lig, 1) <> "" Then

Cells(lig, 2) = "Ouverture "

Dans alerte 1 j'ai une macro qui permet de soustraire une date antèrieur(écrite dans la colonne H) à celle de la date du jour et si la différence est supèrieur à 96h on écrit la valeur "en retard" dans la colonne AB.



Public Sub Alerte1()

Application.EnableEvents = False
Dim date96 As Date
Dim datejour As Date

date96 = 96
datejour = Now

Dim lig As Long
For lig = 2 To [H65535].End(xlUp).Row

If Cells(lig, 8) - datejour > date96 / 24 A Then
Cells(lig, 28) = "en retard"
Exit For
End If
Next lig
Application.EnableEvents = True
End Sub

dans Alerte 2 j'ai la mm chose mais permet de soustraire une date supèrieur(écrite dans la colonne H) à celle de la date du jour et si la différence est supèrieur à 96h on écrit la valeur "en retard" dans la colonne AB.


Public Sub Alerte2()

Application.EnableEvents = False
Dim date96 As Date
Dim datejour As Date

date96 = 96
datejour = Now

Dim lig As Long
For lig = 2 To [H65535].End(xlUp).Row

If datejour - Cells(lig, 8) > date96 / 24 A Then
Cells(lig, 28) = "en retard "
Exit For
End If
Next lig
Application.EnableEvents = True
End Sub


Le problème :
Lorsque j'entre une date dans la celluleH32 et qu'elle dépasse 96h par rapport à la date d'aujourdh'ui, au lieu d'écrire en retard dans AB32, il l'écrit en AB1. je ne comprends pas pourquoi, j'ai essayé de supprimé exit for, déplacer les modules etc mais toujours le mm problème.

Merci de m'aider
A voir également:

2 réponses

eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
10 juin 2010 à 20:00
Bonsoir,

Tu devrais déposer un fichier exemple sur cijoint.fr et coller ici le lien fourni.
Précise ce que tu saisis et où

eric
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 11/06/2010 à 00:45
Bonjour,

1°) Je suppose que tes macros sont sur un modue général ? mais nulle part tu ne spécifie sur quel page écrire, mais je ne pense pas que ça joue à conséquence puisque ça vient toujours de la feuille active.
2°)A chaque fois que tu modifie une cellule tu relit toutes les lignes, c'est pas un gros problème si tu n'a que quelques lignes mais si ton classeur commence à être plus important ça va être galère entre chaque modif de cellule quel qu'elle soit.
Essaye plutôt avec ce code, à mettre dans chaque feuilles

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim S
    'Pour éviter erreur quand ont copie un bloc.
    S = Split(Target.Address, ":"): If UBound(S) > 0 Then Exit Sub

    If Target.Column = 1 Then 
        If Target.Value <> "" Then Target.Offset(0, 1) = "Ouverture" 
    ElseIf Target.Column = 8 Then 
        If Target.Value <> "" Then 
            If (Target.Value - Now) * 24 > 96 Or _ 
            (Now - Target.Value) * 24 > 96 Then Target.Offset(0, 20) = "Retard" 
        End If 
    End If 
End Sub


En remplacement de tes appel macros.
A chaque modif de la colonne 1 et 8 les calculs sont fait et éventuellement la ligne est modifiée comme tu veux, pas besoin de plus.
A+
Edit : Modif du code pour la troisième macros
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cogne à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
0