Incrémentation++

josh -  
 josh -
Bonjour,

J'ai besoin d'aide par rapport au code ci-dessous :

Sub test

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

If Cells(lig, 10) = "0" Then
Cells(lig, 28) = "En attente"
Exit For
End If
Next lig
End Sub


Le problème c'est que quand je me place sur la ligne 34, que je tape 0 dans la colonne 10 (J), il marque en attente dans la colonne 28 mais à la ligne 1, comment faire correspondre le résultat "En attente" sur la même ligne ?
Exemple je tape 0 dans la colonne J34, donc "en attente" est écrit dans AB34

Merci d'avance a+!

4 réponses

pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 768
 
Salut,
Ton code est bon, mais :
tu fais une boucle de la ligne 2 à la dernière ligne Col J. En plus, dès que tu as "en attente" dans ta ligne tu sors de la boucle "Exit For". Alors ta macro se lance, teste la ligne 2 si J = 0 alors AB = "en attente" sort de la boucle et s'arrête...
2 choix donc :
- soit tu veux teste toutes tes lignes et alors supprime ta ligne de code : Exit For
Sub test
Dim lig As Long
For lig = 2 To [J65535].End(xlUp).Row
If Cells(lig, 10) = 0 Then
Cells(lig, 28) = "En attente"
End If
Next lig
End Sub

- Soit tu ne veux la lancer que pour la ligne ou tu as au préalable sélectionner la cellule en J :
Sub test
If ActiveCell = 0 Then
ActiveCell.Offset(0, 18) = "En attente"
End If
End Sub
0
josh
 
Le problème c'est que j'ai mon évenement worksheet_change dans la feuille et un call sur le code ci-dessus. j'ai supprimé exit for et toujours le même soucis.
J'ai supprimé le call et placé directement le code dans la feuille et tjrs pareil.
Une idée ?
0
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 768
 
non pas d'idée. Peux tu placer une copie de ton fichier, sans données confidentielles ici même via un service de pièce jointe tel que cjoint ou ci-joint.
0
josh
 
bonjour,
j'ai toujours le meme problème voici le code :

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
0
josh
 
personne?
0