Sub Copier_Base()
Dim TVar As Variant
Dim Der As Long
Dim Max As Integer, Deb As Integer
Dim Nbre As Integer, Lig As Integer
Dim i As Integer, j As Integer, k As Integer
Dim Onglet As String
Sheets("Base").Select
'Chercher la dernière ligne non vide en colonne B
Max = Range("B1", Range("B65535").End(xlUp)).Rows.Count
TVar = Range("B2:B" & Max).Value
Max = 0
'Max = nombre de cas où la cellule fournisseur n'est pas vide
For i = 1 To UBound(TVar)
If TVar(i, 1) <> "" Then Max = Max + 1
Next i
Lig = 2
'Boucler sur le nombre de cas
For k = 1 To Max
'Cherche à partir de la ligne Lig la prochaine ligne non vide en B
Der = Range("B" & Lig).End(xlDown).Row
'Vérifie que pour une ligne fournisseur (B) non vide, il y a une ligne produit non vide
If Range("B" & Lig) <> "" And Range("C" & Lig) <> "" Then
'ne sert que lorsque k = Max
If Der > 60000 Then Der = Range("B" & Max - 1).End(xlDown).Row
'Nbre : Nbre de lignes (de colonne C à colonne F) à traiter
Nbre = Der - Lig
If Nbre = 0 Then Nbre = 1
'prend le nom du fournisseur comme nom d'onglet
Onglet = CStr(Range("B" & Lig))
With Sheets(Onglet)
.Activate
'Première ligne libre dans le tableau récap du fournisseur
Deb = .Range("A1", Range("A65535").End(xlUp)).Rows.Count
Lig = Lig - 1
For i = 1 To Nbre
'Prend les valeurs de la ligne i, colonnes C à F
TVar = Sheets("Base").Range("C" & Lig + i & ":F" & Lig + i).Value
For j = 1 To 4
'Recopie les valeurs pour chaque ligne de 1 à Nbre
Cells(Deb + i, j) = TVar(1, j)
Next j
Next i
End With
'Lig = prochain cas où ligne non vide en B (Der)
Lig = Der
'si colonne produit est vide Lig = prochaine ligne non vide en B (Der)
Else
Lig = Der
End If
Sheets("Base").Select
Next k
End Sub