Private Sub Worksheet_Change(ByVal Target As Range)
Dim col As Integer, nbBundle As Integer, LastCol As Integer
Dim i As Integer, lastBundle As Integer, prevLastBundle As Integer
Dim ws As Worksheet
Set ws = Me
' Vérifier si la modification concerne la ligne 1
If Intersect(Target, Rows(1)) Is Nothing Then Exit Sub
Application.EnableEvents = False ' Désactiver les événements pour éviter les boucles
col = Target.Column ' Récupérer la colonne modifiée
nbBundle = Int(Target / 20) ' Nombre de paquets de 20
LastCol = ws.Cells(ws.Rows.Count, col).End(xlUp).Row ' Dernière ligne remplie dans la colonne
' Nettoyer les anciennes valeurs
ws.Cells(5, col).Resize(LastCol).ClearContents
ws.Cells(5, col - 1).Resize(LastCol).ClearContents
' Trouver le dernier numéro de bundle utilisé dans la colonne précédente
If col > 2 Then
prevLastBundle = Application.WorksheetFunction.Max(ws.Cells(5, col - 1).Resize(LastCol))
If IsError(prevLastBundle) Then prevLastBundle = 0
Else
prevLastBundle = 0
End If
' Initialiser le premier bundle pour cette colonne à la suite du dernier utilisé
lastBundle = prevLastBundle
' Remplir les cellules avec 20 et numéro de bundle
For i = 1 To nbBundle
ws.Cells(4 + i, col) = 20
ws.Cells(4 + i, col - 1) = lastBundle + 1
lastBundle = lastBundle + 1
Next i
' Ajouter le reste s'il y en a un
If nbBundle * 20 <> Target Then
ws.Cells(4 + i, col) = Target - nbBundle * 20
ws.Cells(4 + i, col - 1) = lastBundle + 1
lastBundle = lastBundle + 1
End If
Application.EnableEvents = True ' Réactiver les événements
End Sub
J'ai trouver un vba via ai , mais mon seul probleme ce que le num bundle de la taille suivante doit etre le suivant de la taille precedente.