Option Explicit
Dim InitFait As Boolean, InitDico As Boolean
Dim w As Workbook
Dim f1 As Worksheet, f2 As Worksheet, f3 As Worksheet, f4 As Worksheet
Dim r1, r2, r3, r4
Dim d As Object
Sub Initialisation_Generale()
Set w = ThisWorkbook
Set f1 = w.Sheets("B1"): Set f2 = w.Sheets("B2")
Set f3 = w.Sheets("B3"): Set f4 = w.Sheets("B4")
r1 = f1.Range("a5:d366"): r2 = f2.Range("a5:d366")
r3 = f3.Range("a5:d366"): r4 = f4.Range("a5:d366")
InitFait = True
End Sub
Sub Initialisation_Dictionnaire()
Dim i As Integer
Set d = CreateObject("scripting.dictionary")
For i = LBound(r1) To UBound(r1): d(r1(i, 1)) = i: Next i
InitDico = True
End Sub
Sub Recherche()
Dim i As Integer, j As Integer
Dim tableau
With Sheets("MO")
For i = 16 To .[b65000].End(xlUp).Row
Select Case .Cells(i, 2).Value
Case "P ou FP"
tableau = r1
Case "P/FP"
tableau = r2
Case "HP/UHX"
tableau = r3
Case "GP ou KP"
tableau = r4
End Select
For j = 14 To 39 Step 5
On Error Resume Next
.Cells(i, j).Offset(, 1).Value = tableau(d(.Cells(i, j).Value), 2)
.Cells(i, j).Offset(, 2).Value = tableau(d(.Cells(i, j).Value), 3)
Next j
Next i
End With
End Sub
Sub Recherche_Ca_Cs()
If Not InitFait Then Initialisation_Generale
If Not InitDico Then Initialisation_Dictionnaire
Recherche
End Sub
Sub Masquer_Colonnes()
Dim j As Integer
With Sheets("MO")
For j = 15 To 40 Step 5
.Columns(j).Resize(, 2).Hidden = True
Next j
End With
End Sub
Sub Afficher_Colonnes()
Dim j As Integer
With Sheets("MO")
For j = 15 To 40 Step 5
.Columns(j).Resize(, 2).Hidden = False
Next j
End With
End Sub
Sub Nettoyer_Ca_Cs()
Dim i As Integer, j As Integer
With Sheets("MO")
i = .[b65000].End(xlUp).Row
For j = 15 To 40 Step 5
.Cells(16, j).Resize(i, 2).ClearContents
Next j
End With
End Sub