Bonsoir Marius, bonsoir le forum,
En pièce jointe ton fichier modifié avec le code ci-dessous :
Private SA As Worksheet 'déclare la variable SA (onglet Source Auto)
Private R As Worksheet 'déclare la variable R (onglet RECAP)
Private DL As Long 'déclare la variable DL (Dernière ligne DL)
Private TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
Dim I As Long 'déclare la variable I (Incrément)
Dim D As Object 'déclare la variable D (Dictionnaire)
Set SA = Worksheets("Source Auto") 'définit l'onglet SA
Set R = Worksheets("RECAP") 'définit l'onglet R
DL = SA.Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne A de l'onglet SA
TV = SA.Range("A1:AJ" & DL) 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 4 To DL 'boucle sur toutes les lignes I du tableau des valeurs (en partant de la 4ème)
'aliment le dictionnaire D avec les caractères avant le tiret de la donnée ligne I colonne 1 (=> colonne A)
D(Split(TV(I, 1), "-")(0)) = Split(TV(I, 1), "-")(0)
Next I 'prochaine ligne de la boucle
Me.ComboBox1.List = D.keys 'alimente la ComboBox1 avec le liste des éléments du dictionnaire D sans doublon
End Sub
Private Sub cmdRapport_Click()
Dim PL1 As Integer
Dim PL2 As Integer
Dim PL3 As Integer
R.Range("B3:E7").ClearContents
R.Range("B9:E13").ClearContents
R.Range("B15:E19").ClearContents
R.Activate
For I = 4 To DL
If Split(TV(I, 1), "-")(0) = Me.ComboBox1.Value Then
PL1 = IIf(R.Range("B3").Value = "", 3, R.Range("B2").End(xlDown).Row + 1)
PL2 = IIf(R.Range("B9").Value = "", 9, R.Range("B8").End(xlDown).Row + 1)
PL3 = IIf(R.Range("B15").Value = "", 15, R.Range("B14").End(xlDown).Row + 1)
R.Cells(PL1, "B").Value = TV(I, 1)
R.Cells(PL1, "C").Value = Round(TV(I, 26), 2)
R.Cells(PL1, "D").Value = Round(TV(I, 27), 2)
R.Cells(PL1, "E").Value = Round(TV(I, 28), 2)
R.Cells(PL2, "B").Value = TV(I, 1)
R.Cells(PL2, "C").Value = Round(TV(I, 22), 2)
R.Cells(PL2, "D").Value = Round(TV(I, 34), 2)
R.Cells(PL2, "E").Value = Round(TV(I, 35), 2)
R.Cells(PL3, "B").Value = TV(I, 1)
R.Range(R.Cells(PL3, "C"), R.Cells(PL3, "E")).Value = Round(TV(I, 36), 2)
End If
Next I
Unload Me
End Sub
Private Sub btnvisualiser_Click()
Sheets("RECAP").Activate
Range("B3").Select
End Sub