Re-Bonjour le forum !

Cette fois-ci, je n'ai vraiment pas trouvé la solution... Je vous mets les 2 codes en brut et vous explique leurs fonctionnements, ainsi que l'endroit où ça bloque.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Private Sub ComboBox1_Change()
    Dim CBG As Range, cellule As Range
    Dim derLig As Integer
 
    ComboBox2.Clear
 
    derLig = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
 
    Range("A2:A" & derLig).AutoFilter
 
    Range("A2").AutoFilter Field:=13, Criteria1:=ComboBox1.Value, visibledropdown:=True
 
    Set CBG = Range("C2:C" & derLig).Offset(0).SpecialCells(xlCellTypeVisible)
 
    For Each cellule In CBG
        ComboBox2.AddItem (cellule.Value & " - " & Cells(cellule.Row, 4).Value)
    Next
End Sub
Private Sub ComboBox2_Change()
    Dim CodeBG As String
    Dim derLig As Integer
    Dim FP As Range
 
    derLig = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
 
    CodeBG = Left(ComboBox2.Value, 4)
    Range("A2").AutoFilter Field:=3, Criteria1:=CodeBG, visibledropdown:=True
 
    If derLig > 1 Then
        Set FP = Range("C2:C" & derLig).Offset(0).SpecialCells(xlCellTypeVisible)
        TB1.Text = Cells(FP.Row, 1).Value
        TB2.Text = Cells(FP.Row, 12).Value
        TB1.Enabled = False
        TB2.Enabled = False
    End If
End Sub
NB1 : Le second code ne comprenait pas du tout la partie avec la variable derLig à l'origine, je l'ai rajoutée par après lorsque l'erreur était déjà existante pour savoir si ça me comptait la ligne ou non.
Le premier code a pour objectif de :
  • Vider la ComboBox2
  • Déterminer la dernière ligne non vide et l'attribuer à la variable derLig
  • Revenir au filtre général en sélectionnant toute la table
  • Filtrer en fonction du résultat de la Liste Déroulante de la ComboBox1
  • Définir une nouvelle plage de cellules en fonction des résultats du filtre
  • Générer la liste déroulante de la ComboBox2 grâce à cette plage



Le second code a pour objectif de :
  • Déterminer la dernière ligne non vide et l'attribuer à la variable derLig
  • Sortir le CodeBG qui correspond aux 4 caractères premiers caractères vers la gauche de la valeur dans la ComboBox2
  • Filtrer une seconde fois les résultats (déjà filtrés par le premier code) afin de n'afficher qu'une seule ligne - qui correspond au CodeBG
  • Définir une nouvelle plage, qui ici correspond à une ligne unique : résultat des filtres successifs
  • Attribuer à la TextBox1 et à TextBox2 leurs valeurs respectives
  • Verrouiller la modification à ces deux TextBox


Le problème
Tout se passe très bien lors de la première boucle, à savoir - Sélectionner dans la ComboBox1 PUIS sélectionner dans la ComboBox2. Le problème dans la réalisation du code (du coup dans ma réalisation à moi hihi) c'est que lorsque je décide, après avoir sélectionné au préalable une valeur dans la ComboBox2, de changer de nouveau ma variable dans la ComboBox1 grâce au menu déroulant, l'AutoFilter ne s'effectue pas et je me retrouve ainsi avec une page vide...Ce qui engendre indéniablement une erreur sur cette ligne :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
Set FP = Range("C2:C" & derLig).Offset(0).SpecialCells(xlCellTypeVisible)
Puisqu'il n'existe plus rien de visible. Néanmoins, l'AutoFilter s'est effectué en sous-marin puisque lorsque je l'ai effectué d'une autre façon (sans que ça corresponde à ce que je recherche), j'ai trouvé un résultat.

NB : Je perçois l'AutoFilter pendant une fraction de seconde avant qu'il ne disparaisse, visuellement parlant.

Pour faire une synthèse
Pb1 : AutoFilter "invisible"
Pb2 : Ligne "Set FP" renvoie une erreur puisque rien n'est visible

Question : Pourquoi le ComboBox2.Clear ne s'effectue-t-il pas lorsque je modifie la ComboBox1 avec la Liste Déroulante ? - ComboBox2.Clear est dans la Private Sub ComboBox1_Change()

Solution envisageable : Serait-il possible, puisqu'il n'y a qu'une ligne de résultat affichée, de sortir les résultats directement grâce au numéro de ligne associé ?

Je vous remercie pour l'attention portée à ma demande !

Je vous souhaite à tous une agréable fin de journée