Private Sub Worksheet_Activate()
Dim Plg As Range, Dc(), sDat(), i&, j&, x$
With Feuil1.Range("B9:B28") 'première colonne de données
Set Plg = .Resize(, .Cells(1, Columns.Count - .Column + 1).End(xlToLeft).Column + 3 - .Column)
End With
Dc = Array(0, Array("Code étab.", 0, 3, 2), Array("Nom étab.", 0, 0, 0), Array("Ville", 0, 1, 0), Array("Code postal", 0, 13, 1), Array("Adresse", 0, 12, 0), Array("Directeur", 0, 5, 2), Array("Tél.", 0, 15, 2), Array("Fax", 0, 17, 2), Array("Mail", 0, 19, 2), Array("Nb. classes", 1, 7, 2), Array("Nb. Eleves", 1, 9, 2), Array("Nb. mater.", 1, 11, 3), Array("Nb. élémentaire", 1, 12, 3), Array("Nb. specialisé", 1, 13, 3))
Dc(0) = UBound(Dc)
sDat = Extraction(Plg, Dc)
Cells.ClearContents
Cells(1, 1).Resize(UBound(sDat, 1), Dc(0)).Value = sDat
End Sub
Function Extraction(Plg As Range, Dc())
Dim sDat(), i&, j&, x$
ReDim sDat(0 To Plg.Columns.Count \ 3 + 1, 1 To Dc(0))
For j = 1 To Dc(0): sDat(0, j) = Dc(j)(0): Next
On Error Resume Next
For i = 1 To UBound(sDat, 1)
With Plg.Cells(1, 3 * i - 2)
For j = 1 To Dc(0)
x = Trim(.Offset(Dc(j)(2), Dc(j)(1)).Value)
Select Case Dc(j)(3)
Case 0: sDat(i, j) = x
Case 1: sDat(i, j) = Split(x)(0)
Case 2: sDat(i, j) = Trim(Split(x, ":")(1))
Case 3: sDat(i, j) = Val(Split(x)(0))
End Select
Next
End With
Next
On Error GoTo 0
Extraction = sDat
End Function