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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| Private Sub Worksheet_Change(ByVal Target As Range)
If Not Target.Column = 1 Then Exit Sub ' Ne réagir que si elle est située dans la première colonne
If IsEmpty(Target) Then Exit Sub ' Ne pas lancer la procédure lorsqu'on efface une cellule
If Not IsNumeric(Target) Then Exit Sub ' Ne réagir qu'à la saisie d'un numéro d'affaire
Debug.Print Target
' On dispose donc ici du numéro d'affaire
' Il reste à parcourir le document "Planning Montage.xls" pour trouver les données relatives à cette affaire et à les reporter en face
Dim w, planning As Workbook
For Each w In Application.Workbooks
If w.Name = "Planning Montage.xls" Then Set planning = w
Next w
If planning Is Nothing Then
'Le document n'était pas ouvert, donc il faut l'ouvrir
Application.Workbooks.Open Application.ActiveWorkbook.Path & "\" & "Planning Montage.xls"
Set planning = Workbooks("Planning Montage.xls")
End If
Dim planningSheet As Worksheet, r As Range, c As Range, premièreLigne As Integer, dernièreLigne As Integer
Dim semaineDébut As Integer, semaineFin As Integer
Set planningSheet = planning.Sheets("Planning")
Set r = planningSheet.Columns("A:A")
Set c = r.Find(What:=Target.Value, LookIn:=xlValues)
If c Is Nothing Then Exit Sub
' On ne travaille que si on a trouvé le n° d'affaire
' On va rechercher toutes les lignes qui comporte ce numéro d'affaire en colonne 1
premièreLigne = c.Row
Do
TrouverBornes c, semaineDébut, semaineFin
dernièreLigne = c.Row
Set c = r.FindNext(c)
Loop While Not c Is Nothing And c.Row <> premièreLigne
' On dispose maintenant des numéros de colonne dans lesquelles l'affaire commence (semaineDébut)
' et finit (semaineFin). Il reste à aller récupérer les numéros de semaine corresondants
' Ceux-ci se trouvent sur la ligne 1 du planning
semaineDébut = planningSheet.Cells(1, semaineDébut + 1)
semaineFin = planningSheet.Cells(1, semaineFin + 1)
Debug.Print semaineDébut, semaineFin
' Il ne reste plus qu'à les reporter à côté de la cellule dans laquelle on a tapé le numéro d'affaire
Target.Offset(0, 2) = semaineDébut
Target.Offset(0, 3) = semaineFin
' Attention : si on commence en semaine 4 et qu'on finit en semaine 8, il me semble que la durée est de 5 semaines
' et non de 4 comme vous l'avez indiqué dans votre document
' D'où le +1 final
' On ajoute 52 à tout cela pour permettre les calculs de durée avec un début en semaine 51 et la fin en semaine 2 par exemple
Target.Offset(0, 4) = (52 + semaineFin - semaineDébut + 1) Mod 52
Private Sub TrouverBornes(c As Range, ByRef semaineDébut As Integer, ByRef semaineFin As Integer)
Dim sem1 As Integer, sem2 As Integer
Dim i As Integer
i = 10
Do While i < 62
If IsNumeric(c.Offset(0, i)) And c.Offset(0, i) > 0 Then
If semaineDébut = 0 Or i < semaineDébut Then semaineDébut = i
If i > semaineFin Then semaineFin = i
End If
i = i + 1
Loop
End Sub |
Partager