Comment vérifier que la ligne active est dans un tableau structuré Excel?
Bonjour,
J'ai un tableau structuré que je peux parcourir pour effectuer des diverses opérations.
Je voudrais savoir comment faire pour déterminer si la ligne active de la feuille se trouve à l'intérieur de ce tableau. Cette aligne active est bien sûr soit sélectionnée au préalable dans la feuille soit on la récupère à partir de la cellule active.
Concrètement si mon tableau commence à la ligne 2 de la feuille (entête) et fini à la ligne 5 (dernière ligne) : 3 enregistrements avec ou sans donnée.
Si la cellule A6 est sélectionnée ou la ligne 6 de la feuille, comment peut-on déterminer que cette ligne 6 est comprise entre la ligne 1 du tableau (et non de la feuille) et la dernière ligne du tableau (et non de la feuille)?
Mon code suivant parcoure le tableau de la première ligne (1) à la dernière (rg.Rows.Count).
Dans l'exemple que j'ai pris :
- la ligne 1 du tableau correspond à la ligne 3 de la feuille
- la dernière ligne du tableau (rg.Rows.Count=3) correspond à la 5ème ligne de la feuille.
Donc je dois vérifier que la ligne active 6 est en dehors ou dans le tableau c'est à dire entre la ligne 3 de la feuille et la ligne 5 de la feuille.
Désolé si je ne suis pas clair et merci d'avance pour votre aide.
Private Sub cmdDeleteLine_Click()
Dim FL1 As Worksheet
Dim tbl As ListObject
Dim rg As Range
Dim r As Long
Dim idx As Integer, nb As Integer
idx = ActiveCell.Row
Set FL1 = Worksheets("Feuil1") '
Set tbl = FL1.ListObjects("Tab1")
Set rg = tbl.DataBodyRange
If Not rg Is Nothing Then
'On recupère tous les ID et Nom du tableau
For r = 1 To rg.Rows.Count
ID = rg(r, 1).Value
nom = rg(r, 2).Value
MsgBox nom & " " & ID
Next
'Comment déterminer si la ligne active est comprise entre 1 et rg.Rows.Count?
End If
End subbonjour,
je ne comprends pas le but final, mais un essai
Sub cmdDeleteLine_Click()
Dim c As Range
Set lo = Worksheets("Feuil1").ListObjects("Tableau1") 'le tableau
If lo.Parent.Name <> ActiveSheet.Name Then MsgBox "mauvaise feuille": Exit Sub 'feuille correcte
Set c = Intersect(lo.Range, ActiveCell.EntireRow) 'intersect avec le tableau et la ligne complète
If c Is Nothing Then MsgBox "ligne ne fait pas partie du tableau": Exit Sub
aa = Application.Transpose(Application.Transpose(c.Value)) 'le listrow de cette ligne
MsgBox "ligne " & c.Row & vbLf & Join(aa, vbLf)
End SubSalut,
Tu peux savoir si tu es dans un tableau structuré avec ce bout de code : ActiveCell.ListObject.Name en retour le nom du tableau, si en dehors alors le listObject est en Nothing et renvoi une erreur.
Test :
Dim t As ListObject
Set t = ActiveCell.ListObject
If Not t Is Nothing Then
MsgBox ActiveCell.ListObject.Name
Else
MsgBox "En dehors du tableau"
End IfVoilà tu as donc plusieurs solutions.