Récupérer numéro ligne sélectionnée après filtre Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
M
Mim
Nouveau venu
Nouveau venu
Messages : 8
Inscrit le : 28 janvier 2017
Version d'Excel : 2013FR

Message par Mim » 28 janvier 2017, 14:28

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
p
pierre.jy
Membre dévoué
Membre dévoué
Messages : 500
Appréciation reçue : 1
Inscrit le : 26 février 2016
Version d'Excel : 2010

Message par pierre.jy » 28 janvier 2017, 14:41

Bonjour,

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

un fichier c'est bien mais une description de celui-ci et du fonctionnement souhaité directement sur le forum c'est mieux ;) pensez as mon smartphone ;)

M
Mim
Nouveau venu
Nouveau venu
Messages : 8
Inscrit le : 28 janvier 2017
Version d'Excel : 2013FR

Message par Mim » 28 janvier 2017, 18:08

- 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
Avatar du membre
Jean-Eric
Fanatique d'Excel
Fanatique d'Excel
Messages : 15'118
Appréciations reçues : 492
Inscrit le : 27 août 2012
Version d'Excel : O365 32 bits

Message par Jean-Eric » 28 janvier 2017, 19:52

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
Jean-Eric

Je ne réponds pas aux M.P. non sollicités.
M
Mim
Nouveau venu
Nouveau venu
Messages : 8
Inscrit le : 28 janvier 2017
Version d'Excel : 2013FR

Message par Mim » 29 janvier 2017, 08:54

Bonjour,
Effectivement le filtre fonctionne nettement mieux comme ça :D
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
Avatar du membre
Jean-Eric
Fanatique d'Excel
Fanatique d'Excel
Messages : 15'118
Appréciations reçues : 492
Inscrit le : 27 août 2012
Version d'Excel : O365 32 bits

Message par Jean-Eric » 29 janvier 2017, 10:59

Bonjour,
Toujours pas spécialiste de la chose, mais j'ose... :oops:
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
Jean-Eric

Je ne réponds pas aux M.P. non sollicités.
M
Mim
Nouveau venu
Nouveau venu
Messages : 8
Inscrit le : 28 janvier 2017
Version d'Excel : 2013FR

Message par Mim » 29 janvier 2017, 11:41

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?
Modifié en dernier par Mim le 29 janvier 2017, 13:27, modifié 1 fois.
Avatar du membre
Jean-Eric
Fanatique d'Excel
Fanatique d'Excel
Messages : 15'118
Appréciations reçues : 492
Inscrit le : 27 août 2012
Version d'Excel : O365 32 bits

Message par Jean-Eric » 29 janvier 2017, 11:46

Re,
Elimine la ligne Erase tbl...
Cdlt.
Jean-Eric

Je ne réponds pas aux M.P. non sollicités.
M
Mim
Nouveau venu
Nouveau venu
Messages : 8
Inscrit le : 28 janvier 2017
Version d'Excel : 2013FR

Message par Mim » 29 janvier 2017, 13:27

Parfait :D
Merci beaucoup pour votre aide!
Bonne journée
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message