1 pièce(s) jointe(s)
Conditions avec les fonctions ET et OU
Bonjour à tous,
J'ai réalisé un fichier Excel pour des pilotes en usine de production mais après une semaine de test, je me suis rendu compte qu'il y avait encore certaines choses à revoir... Je me tourne donc vers vous et votre science infuse :) !
Après rajout d'une colonne "Fréquence", mon souhait serais:
Si la durée est mise ainsi que la Machine/Cause mais pas la fréquence, alors sur la feuille 'CalculsMacros' cette durée se rajoute à celle déjà présente (Durée totale) et que la fréquence augmente de +1 à la ligne correspondant à la Machine/Cause.
Si la fréquence est mise ainsi que la Machine/Cause (La durée dans ce cas n'est pas importante) alors sur la feuille 'CalculsMacros' la fréquence se rajoute à celle déjà présente et la durée totale augmente de 5min toujours à la ligne de la Machine/Cause.
Voici une partie de la macro de la feuille 'Saisie-pilote' qui me reportait la durée et rajoutait +1 à la fréquence:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| 'la macro se déclenche à chaque fois qu'une valeur est entrée dans une cellule de la feuille
Private Sub Worksheet_Change(ByVal Target As Range)
'définir les variables
Dim Ligne As Variant
Dim Plage As Range
Dim Cel As Range
Dim Chaine As String
'saisie en colonnes A à F non vides
If Target.Column < 7 And Application.CountA(Cells(Target.Row, 3).Resize(, 6)) = 10 Then
'concatène le nom de la machine avec le nom du problème
Chaine = Cells(Target.Row, 5) & Cells(Target.Row, 6)
With Sheets("CalculsMacros")
'on cherche sur la feuille "CalculsMacros" le numéro de ligne correspondant à l'évènement et au nom de la machine
Set Plage = .Range(.Cells(4, 2), .Cells(.Rows.Count, 2).End(xlUp))
For Each Cel In Plage
If Cel.Value & Cel.Offset(, 1).Value = Chaine Then
Ligne = Cel.Row
Exit For
End If
Next Cel
'on additionne le nombre de la colonne C de la feuille "saisie-pilote" dans la colonne E
' de la feuille "CalculsMacros"
.Cells(Ligne, 5) = .Cells(Ligne, 5) + Cells(Target.Row, 3)
.Cells(Ligne, 8) = .Cells(Ligne, 8) + 1
End With
End If
End Sub |
A noter que sur la ligne
Code:
1 2
| 'saisie en colonnes A à F non vides
If Target.Column < 7 And Application.CountA(Cells(Target.Row, 3).Resize(, 6)) = 10 Then |
j'ai mis le comptage = 10 pour ne pas que le reste de la macro s'effectue pour éviter les erreurs ou les abérations.
Merci de votre aide,
Cordialement
Blend
condition avec les fonction "et" "ou"
bonsoir,
je suis partis sur ma précédente proposition.
logique déduite de tes conditions
si fréquence <> "" alors
CMfrequence = CMfrequence + SPfrequence
CMduree = CMduree + 5
sinon
CMfrequence = CMfrequence + 1
CMduree = CMduree + SPduree
je ne comprends pas l'intéret du 10 puisque la macro fonctionne uniquement si target colonne 6 est reconnu.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 6 Then Exit Sub ' le target ne concerne que la colonne 6
Dim Ligne As Integer
Dim trouvé As Boolean
trouvé = False
'si toutes les colonnes de 3 à 6 sont renseignées
With Sheets("CalculsMacros")
'on cherche sur la feuille "CalculsMacros" la première ligne de la machine correspondant à l'évènement
Ligne = Application.Match(Cells(Target.Row, 5), .[A:A], 0) ' départ de la recherche
Do While .Cells(Ligne, 1) = Target.Offset(0, -1) ' "Autre" est traité comme un cas courant dans la boucle
If .Cells(Ligne, 3) = Target Then
If Target.Offset(0, -2) <> "" Then
.Cells(Ligne, 5) = .Cells(Ligne, 5) + 0.5
.Cells(Ligne, 8) = .Cells(Ligne, 8) + Cells(Target.Row, 4)
Else
.Cells(Ligne, 5) = .Cells(Ligne, 5) + Cells(Target.Row, 3)
.Cells(Ligne, 8) = .Cells(Ligne, 8) + 1
End If
trouvé = True
Exit Do
End If
Ligne = Ligne + 1
Loop
If trouvé = False Then
MsgBox " cas incompatible avec le choix dans une liste "
End If
End With
End Sub |
adapte le tout à ton goût.
Cordialement,
1 pièce(s) jointe(s)
conditions avec les fonctions ET et OU
Bonjour,
La gestion des heures est une horreur à laquelle je ne comprends rien.
Dans le code, j'ai modifié "0.5" par (timevalue("0:05").
Pour la seconde remarque, je ne vois pas que les fréquences se réinitialisent.
Enfin, pour parvenir au résultat, j'ai modifié :
- ta formule calcul du temps inutilement compliquée (*24) dans la feuille de saisie.
- le format du temps dans la feuille calcul.
essai le fichier joint.
1 pièce(s) jointe(s)
conditions avec les fonctions ET et OU
Bonjour,
Vois si cela peut convenir.
tu ne crois pas qu'il sera peut-être nécessaire à un moment de remettre les compteurs à 0 dans la feuille calcul ?
Cordialement,