Récupérer numéro ligne sélectionnée après filtre

Bonjour,

Voici le résultat obtenu sur une feuille de calcul filtrée en VBA (Les chiffres sont les numéros réels de lignes de la feuille de données):

1 Dupont

3 Durand

52 Martin

Cette sélection filtrée aliment une ComboBox1:

Dupont

Durand

Martin

> Je cherche une procédure ComboBox1_Change () qui me retourne le numéro réel de la ligne (pas son index)

Exemple: Si je sélectionne "Martin" je souhaite obtenir "52"

Si je me suis bien exprimé pouvez-vous me proposer une piste?

Avec mes remerciements

Bonjour,

comment rempli-tu ton combobox, et celui-ci il est situé ou ?

  • Le ComboBox est sur un formulaire
  • L'alimentation de ma ComboBox se fait par le code ci-dessous , qui ne fonctionne pas correctement .
Il m'affiche toutes les réponses alors que ma feuille est bien filtrée...

je n'arrive pas à utiliser la fonction .SpecialCells(xlCellTypeVisible) avec le code ci-dessous

Private Sub UserForm_Initialize()
'Effacement des filtres
    Sheets("Approvisionnement").AutoFilterMode = False

'Selection.AutoFilter

    Sheets("Approvisionnement").Range("A1:M6500").AutoFilter Field:=6, Criteria1:="FAUX"

' Alimentation de ComboBox1
Dim j As Long 'déclare la variable J

' Affecter une valeur à une variable 
  Set Ws = Sheets("Approvisionnement")
'On stocke le nom de la feuille "Approvisionnement" dans une variable nommée WS
  With Me.ComboBox1
    For j = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row
      .AddItem Ws.Range("A" & j
  Next j
  End With

Bonjour,

Pa spécialiste de la chose, mais essaie ainsi :

Private Sub UserForm_Initialize()
Dim ws As Worksheet
Dim rng As Range, Cell As Range
    Application.ScreenUpdating = False
    Set ws = Worksheets("Approvisionnement")
    With ws
        .AutoFilterMode = False
        .Cells(1).CurrentRegion.AutoFilter Field:=6, Criteria1:="FAUX"
        With .AutoFilter.Range
            On Error Resume Next
            Set rng = .Offset(1, 0).Resize(.Rows.Count - 1, 1) _
                      .SpecialCells(xlCellTypeVisible)
            On Error GoTo 0
        End With
    End With
    If rng Is Nothing Then
        '
    Else
        For Each Cell In rng
            Me.ComboBox1.AddItem Cell.Value
        Next Cell
    End If
    ws.ShowAllData
    Set rng = Nothing: Set ws = Nothing
End Sub

Bonjour,

Effectivement le filtre fonctionne nettement mieux comme ça

En utilisant cette méthode, le ComboBox est alimenté par les données répondant au critère, mais l'index du ComboBox ne correspond pas au numéro de la ligne avant filtrage.

Si dessous le code testé lors de la sélection d'une valeur du ComboBox:

Private Sub ComboBox1_Change()
Set ws = Sheets("Approvisionnement")
Dim Ligne As Long
Dim i As Integer
  If Me.ComboBox1.ListIndex = -1 Then Exit Sub
  Ligne = Me.ComboBox1.ListIndex + 1
  MsgBox Ligne
End Sub

Bonjour,

Toujours pas spécialiste de la chose, mais j'ose...

Option Explicit

Dim tbl()

Private Sub ComboBox1_Change()
Dim n
    n = Application.VLookup(ComboBox1.Value, tbl, 2, False)
    MsgBox n
    Erase tbl
End Sub

Private Sub UserForm_Initialize()
Dim ws As Worksheet
Dim rng As Range, Cell As Range
Dim I As Long
    Application.ScreenUpdating = False
    Set ws = Worksheets("Approvisionnement")
    With ws
        .AutoFilterMode = False
        .Cells(1).CurrentRegion.AutoFilter Field:=6, Criteria1:="FAUX"
        With .AutoFilter.Range
            On Error Resume Next
            Set rng = .Offset(1, 0).Resize(.Rows.Count - 1, 1) _
                      .SpecialCells(xlCellTypeVisible)
            On Error GoTo 0
        End With
    End With
    If rng Is Nothing Then
        '
    Else
        ReDim tbl(1 To rng.Cells.Count, 1 To 2): I = 1
        For Each Cell In rng
            tbl(I, 1) = Cell.Value
            tbl(I, 2) = Cell.Row
            Me.ComboBox1.AddItem Cell.Value
            I = I + 1
        Next Cell
    End If
    ws.ShowAllData
    Set rng = Nothing: Set ws = Nothing
End Sub

On se rapproche de la vérité!

La procédure ComboBox1_Change() fonctionne la première fois, mais si je change aussitôt la valeur du ComboBox j'ai une erreur d'execution '5' sur la ligne :n = Application.VLookup(ComboBox1.Value, tbl, 2, False)

Peut-être faut-il initialiser à nouveau le formulaire?

Re,

Elimine la ligne Erase tbl...

Cdlt.

Parfait

Merci beaucoup pour votre aide!

Bonne journée

Rechercher des sujets similaires à "recuperer numero ligne selectionnee filtre"