Problème boucle for
Bonjour,
Voici mon problème : Je voudrais faire une boucle for permettant d'exécuter certaine instruction pour la colonne T à partir de la ligne 2.
L'objectif est le suivant : Lorsque toute les valeurs pour une même ligne allant de la colonne D à S sont saisie je voudrais que au changement de cellule entre S et T, apparaissent dans la colonne T "OK" si toute les cellules situées dans l'intervalle sont verte ou "NOK" si une plusieurs cellules sont rouges.
Si "NOK" un msgbox indique de refaire les mesures sur la ligne suivante. A la fin de cette nouvelle ligne de mesure si toute les valeurs sont verte "OK", rien à faire de particulier si je n'es poursuivre le programme. Si encore rouge "NOK" msgbox "appeler le responsable".
PS : Je pense qu'utiliser le n° de produit colonne "C" est une bonne idée pour savoir si il s'agit d'un produit mesuré pour la première ou deuxième fois.
Un début de programme pour répondre à cette problématique, mais je ne comprend pas ce qui cloche...
Public Sub ValidateList(ByVal irow%)
Dim Plage As Range
Dim Cel As Range
Dim I As Integer
Dim Total As Integer
With ActiveSheet: Set Plage = .Range(.Cells(3, 4), Cells(3, 19)): End With
For Each Cel In Plage
'I = I + 1
'If Cel.Interior.ColorIndex = 4 Then Total = Total + 1
'If Total <> I Then MsgBox "Mesure fausse, veuillez refaire les mesures !", vbCritical + vbOKOnly, "Validation des mesures"
If Cel.Interior.ColorIndex = 4 Then
MsgBox ("Mesure correcte")
ActiveCell.Value = "OK"
Else
MsgBox ("Mesure fausse !")
ActiveCell.Value = "NOK"
End If
Exit Sub
Next Cel
End Sub
Fichier joint :
Merci d'avance
Bonjour,
Une piste. A mettre dans la procédure événementielle "Workbook_SheetSelectionChange()" :
'si colonne T
If Target.Column = 20 Then
'appelle la Sub...
Call ValidateList(Target.Row)
'...puis inscrit par défaut OK dans la cellule de la colonne T
Cells(ActiveCell.Row, 20).Value = "OK"
'boucle
For I = 4 To 19
'si la couleur de la cellule en cours est différente de vert, NOK et fin !
If Cells(ActiveCell.Row, I).Interior.ColorIndex <> 4 Then
Cells(ActiveCell.Row, 20).Value = "NOK"
Exit For
End If
Next I
End If
Bonjour et merci !
Cela répond parfaitement à la première partie de ma problématique ! Reste maintenant à réussir à identifier grace au N° de lot si le message qui apparait ( 1 er fois ) demande de remesurer tout le produit ou si (2nd fois) le message indique d'appeler un responsable.
Je vous tiens au courant des progrès merci beaucoup !
Comment différencies-tu la première mesure de la seconde ?
Dans l'idée de mémoriser si la mesure est la première ou non, on peut inscrire une valeur dans la cellule en colonne U avec le format ";;;" afin que la valeur ne soit pas visible dans la cellule :
'si colonne T
If Target.Column = 20 Then
'appelle la Sub...
Call ValidateList(Target.Row)
'...puis inscrit par défaut OK dans la cellule de la colonne T
Cells(ActiveCell.Row, 20).Value = "OK"
'rétabli
Cells(ActiveCell.Row, 21).Value = ""
Cells(ActiveCell.Row, 21).NumberFormat = ";;;"
'boucle
For I = 4 To 19
'si la couleur de la cellule en cours est différente de vert, NOK et fin !
If Cells(ActiveCell.Row, I).Interior.ColorIndex <> 4 Then
Cells(ActiveCell.Row, 20).Value = "NOK"
With Cells(ActiveCell.Row, 21)
.NumberFormat = ";;;" 'avec ce format la valeur n'est visible que dans la barre de formule
'si la cellule en colonne U est vide, inscrit 1,
'si elle n'est pas vide donc, seconde série de mesure message !
If .Value = "" Then .Value = 1 Else MsgBox "Appeler-moi le directeur !"
End With
Exit For
End If
Next I
End If
Bonjour Theze,
T'as solution ne correspond pas, je m'explique : Comme tu le dis pour savoir si la série de mesure est la première je souhaite utiliser le N° de lot qui se situe en colonne "C".
La première fois que le produit est mesurer, le numéro de lot va apparaitre qu'une fois dans la colonne "C" mais si il faut mesurer à nouveau ce lot car à la fin message disant "Mesure incorrecte", je souhaite comparer le numéro de lot avec celui de la ligne précédente et si le numéro de lot et le même et que le résultat des mesures est toujours non satisfaisant alors cette fois le message sera " Appeler moi le directeur ! "
J'espère être clair ! merci d'avance
Bonjour,
De cette façon peut être ?
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim I As Integer
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
If Target.Count > 1 Then Exit Sub
Application.EnableEvents = False
If Target = "" Then
Call Position
Else
'si colonne T
If Target.Column = 20 Then
'appelle la Sub...
Call ValidateList(Target.Row)
'...puis inscrit par défaut OK dans la cellule de la colonne T
Cells(ActiveCell.Row, 20).Value = "OK"
'boucle
For I = 4 To 19
'si la couleur de la cellule en cours est différente de vert, NOK et fin !
If Cells(ActiveCell.Row, I).Interior.ColorIndex <> 4 Then
Cells(ActiveCell.Row, 20).Value = "NOK"
'contrôle la valeur de la cellule de la ligne active en colonne C avec la cellule du dessus
If Cells(ActiveCell.Row, 3).Value = Cells(ActiveCell.Row - 1, 3).Value Then MsgBox "Appeler-moi le directeur !"
Exit For
End If
Next I
End If
End If
Application.EnableEvents = True
End Sub
Bonjour,
Merci de votre réponse cela fonctionne parfaitement après une légère adaptation
Je cloture le sujet
Bonne journée
Bonjour,
Content de t'avoir aidé