Code pour ligne de tableau

Bonjour le forum

Un petit code pour retrouver ma ligne de recherche.

Sub recherche()
Dim cell As Range
Dim i As Integer
Set cell = Worksheets("listedenom").ListObjects("t_identite").Range.Find(Cells(3, 10))
i = cell.Row
MsgBox "ligne du nom trouvé : " & i
End Sub

Ce code me renvoie le n° de ligne que je peux traiter ultérieurement. Comme il s'agit d'un tableau structuré j'aurais aimé que mon code me renvoie l'index de la ligne dans le tableau afin que si le tableau est modifié ou change de place le code fonctionne toujours. Je n'ai pas trouvé de fonction qui pourrait assouvir ma demande pressante aussi je fais appel à une bonne âme.

7fcy-test.xlsm (19.13 Ko)

Bonjour,

Un test

5fcy-test.xlsm (19.44 Ko)

Bonjour,

Si j'ai bien compris, toujours vouloir récupérer le même N° de ligne même si le tableau occupe une autre place.

Sub recherche()
    Dim cell As Range
    Dim i As Integer
    Set cell = Worksheets("listedenom").ListObjects("t_identite").Range.Find(Cells(3, 10))
    i = cell.Row - Sheets("listedenom").ListObjects("t_identite").DataBodyRange.Row + 1
    MsgBox "ligne du nom trouvé : " & i
End Sub

Cdlt

Bonjour à toutes et tous,
Une autre proposition.
Cdlt.

2fcyspm30.xlsm (16.36 Ko)
Sub fcyspm30()
Dim ws As Worksheet, lo As ListObject, Cell As Range, lRow As Long
    Set ws = ActiveSheet
    Set lo = ws.Range("t_identite").ListObject
    With lo.DataBodyRange
        Set Cell = .Find(what:=ws.Cells(10, 3).Value, LookIn:=xlValues, lookat:=xlWhole)
    End With
    If Cell Is Nothing Then
        MsgBox ws.Cells(10, 3).Value & " n'existe pas !..."
    Else
        lRow = Cell.Row - lo.HeaderRowRange.Row
        MsgBox "listrow : " & lRow
    End If
End Sub

Bonjour …

Dans le code donné, i désigne la ligne du choix dans l’onglet mais pas celle dans le Tableau !

Pour avoir celle-ci (ou pas)

Sub recherche()
  Dim R As Range, i As Integer
  Set R = [t_identite[Nom]].Find([J3])
  If Not R Is Nothing Then
    i = R.Row - [t_identite].Row + 1 'ligne du Tableau, pas de l'onglet(R.row seul) 
    MsgBox "La ligne du Tableau du nom est : " & i, vbInformation, "Pour info ..."
 Else
   MsgBox "Le nom " & [J3] & " n'est pas dans la liste !", vbCritical, "Pour info ..."
 End If
End Sub

Merci pour les réponses. Je regarde toutes les propositions et je reviens

Re

Toutes vos propositions fonctionnent bien et se vallent largement à mon avis. J'aurais une toute petite préférence pour la proposition de Jean-Eric car elle fait appel à la ligne d'entête (HeaderRowRange). Comme je travaille sur ces fameux tableaux structurés ce sera mon choix mais je retiens d'autres éléments intéressants des autres propositions qui me serviront ultérieurement.

Re,
Merci de ce retour.
Un autodictate qui essaie d'être pédagogue !...
Pour une information plus conséquente sur les tableaux structurés (VBA), tu peux aller faire un tour sur developper.net (Excel) .
Cdlt.

Re…

Salut Jean-Eric.

« … elle fait appel à la ligne d'entête (HeaderRowRange). »

Mais tu l’as simplement avec [T_identite].Row !

Hé oui, cela faite partie des propriétés des Tableaux structurés.

C’est plus simple à écrire que ws.Range("t_identite").ListObject.HeaderRowRange.Row , non* ?

Bon courage pour la suite de tes découvertes sans oublier que sur ce Site tu peux trouver quantité d’informations avec exemples concernant ces Tableaux !

* le vocabulaire de base dévolu est explicite quand on le connait mais exige bien des d’efforts pour l’acquérir puis l'utiliser.

Bonjour,
@Ordonc,
Qui a codé ?

ws.Range("t_identite").ListObject.HeaderRowRange.Row

Peux-tu nous renseigner sur cette notation raccourcie et nous expliquer ses avantages (et désavantages) ?

[T_identite].Row

Cdlt.

Bonjour,

Désolé d'être à l'origine de cette petite polémique. Du coup j'ai fait un mélange de vos deux propositions. J'avais un petit problème avec la proposition de Jean Eric qui me produisait une erreur, mais j'ai gardé sa référence de l'entête pour la formule de ligne. Je vous joins mon travail et si vous pouviez me conseiller pour améliorer mon code j'en serais très content.

Cordialement

Bonjour à tous,

Une autre manière:

' exemple : on sélectionne la ligne du nom trouvé en colonne 1 (Nom) du tableau
' i correspond à l'index du ListRows du tableau
' i est nul si le nom n'est pas trouvé

Sub recherche()
Dim ts As ListObject, i&   ' i correspondond au Listrow
   Set ts = Worksheets("listedenom").ListObjects("t_identite")
   On Error Resume Next   'si le nom n'est pas trouvé, on poursuit
   i = 0: i = Application.Match([j3], ts.ListColumns(1).DataBodyRange, 0)
   On Error GoTo 0        'on réactive l'interception des erreurs
   If i > 0 Then ts.ListRows(i).Range.Select Else MsgBox [j3] & " : Pas trouvé!"
End Sub

Salut,Arturo83

Ton code initial:

Sub recherche()
Dim cell As Range
Dim i As Integer
Set cell = Worksheets("listedenom").ListObjects("t_identite").Range.Find(Cells(3, 10))
i = cell.Row
MsgBox "ligne du nom trouvé : " & i
End Sub

Si tu retranche 6 de i : ça devrait marcher "MsgBox "ligne du nom trouvé : " & i-6"

Essayes

Bonjour Abdu,

Si tu retranche 6 de i : ça devrait marcher "MsgBox "ligne du nom trouvé : " & i-6"

Ok, maintenant déplacez le tableau dans une autre zone comme demandé initialement par fcyspm30

j'aurais aimé que mon code me renvoie l'index de la ligne dans le tableau afin que si le tableau est modifié ou change de place le code fonctionne toujours

est-ce que ça fonctionne toujours?

Cdlt

Rechercher des sujets similaires à "code ligne tableau"