Bonjour,
Je suis stagiaire et je travaille sur la création d’un outil de planification de la prod. j’ai une idée génial en tete mais le problème c’est que j’arrive pas à la traduire en VBA.
L’idée est tres simple : j’ai plusieurs pièces à fabriquer pour chaque pièce j’ai 4 ou 5 étapes de fabrication, je veux faire un Check pour les étapes de fabrication d’une pièce numéro N avec une MFC, une fois toutes les étapes sont achevées le logiciel passe à la pièce numéro N+1 automatiquement.
Je serais reconnaissants à ceux qui peuvent m’aider.
Merci beaucoup et bon dimanche.
Bonjour,
Faudrait peut-être avoir un classeur de travail avec des données pour voir ce qui est possible de faire,
avec des explications claires et des exemples
exemple.xlsx (10,1 Ko)
Bonjour @Mimimathy ,
Voilà un exemple dans un classeur.
Supposant que je suis entraîne de fabriquer les 3 pièces mentionnées dans l’exemple.
quand je fasse mon suivi de fabrication je check ok si la tâche et faite et je mets en cours dans la tâche suivante.
la chaise et bientot fabriquée, je veux quand je valide la tâche de finition pour la chase avec un OK, le N de pièce change automatiquement vers N+1 = 4 dans mon exemple.
Merci
Bonjour,
A tester,
il suffit de taper “ok” en Maj ou Min dans les cellules de la colonne G, la ligne suivante passe à “En cours”
A la dernière “Phase”, le N° de la pièce augmente de 1 et les “Suivi” reparte à 0 sauf le premier qui passe à “En cours”
MODULE:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False 'False=Faux pour éviter que la macro tourne en boucle
Dim Plage, i%, j%, Dl%, Dl1%, Dl2
Dl = Range("F" & Rows.Count).End(xlUp).Row + 1 'n° de la dernière ligne non vide de la colonne F +1
'Pour définir la plage par rapport à la pièce
Dl1 = Range("D3").End(xlDown).Row 'n° de la dernière ligne non vide de la colonne D
Dl2 = Range("D" & Dl1).End(xlDown).Row - 1 ''n° de la dernière ligne non vide de la colonne D -1
If Not Intersect(Target, Range("G4:G" & Dl)) Is Nothing Then 'Si modification sur la colonne G
For i = 3 To Dl 'Boucle sur le tableau
Plage = Range(Cells(Dl1, 6).Address, Cells(Dl2, 6).Address) 'Sélection de la plage de la pièce
If LCase(Cells(Dl2, 7).Value) = "ok" Then 'Si la cellule de la derniere ligne de la pièce = ok ou OK
Cells(Dl1, 5) = Cells(Dl1, 5) + 1 'On ajoute 1 au N° de pièce
Range(Cells(Dl1, 7), Cells(Dl2, 7)) = "" 'on efface les "ok" dans la pièce
Cells(Dl1, 7) = "En cours" 'on place en cours en 1ère position
End If
'Boucle pour le passage entre "ok" , mise "En cours" ligne suivante
For j = 1 To Dl2
If LCase(Target.Value) = "ok" Then
If Target.Row = Dl - 1 Then Exit For
Target.Offset(1, 0).Value = "En cours"
End If
Next j
Dl1 = Dl2 + 1 'on redefinit la première ligne de la pièce suivante
If Dl1 = Dl Then 'Si Dl1 = Dl, on sort de la procèdure
Application.EnableEvents = True
Exit Sub
End If
Dl2 = Range("D" & Dl1).End(xlDown).Row - 1 'on redefinit la Dl de la pièce
If Dl2 > Dl Then 'si la Dl2 est sup. à la Dl on redefinit la Dl2 à Dl
Dl2 = Dl - 1
End If
Next i
End If
Application.EnableEvents = True
End Sub
Exemple.xlsm (20,9 Ko)
2 « J'aime »
Bonjour,
le travail est parfait est très bien détaillé, je vais changer seulement le en cours que se mets à la 1ere case automatiquement parce que la prode elle est cyclique sur 2 jours et je vais adapter l’exemple sur mon vrais tableau de 1200 lignes haha.
Problématique résolu grand merci.
1 « J'aime »