Tableau structuré

Bonjour,
J’ai bien compris l’utilité des tableaux structurés, mais cela reste pour moi un vrai chemin de croix.
Mon problème :
Je dispose de 2 bases de données dans un même workbook.
- une contenant les données CP et commune,
- l’autre les noms de rue de chaque commune.
-
Pour extraire CP et commune je ne rencontre pas de problème
Pour isoler les rues correspondant aux CP souhaité, j’ai créé une table T_Datas contenant les données que je souhaitais exploiter dans l’immédiat.

Voici une partie du code utilisé.

Private Sub rue_Change()

    Dim ligne As Long
    Dim f2 As ListObject
    Dim lcs As ListColumn
    Dim row As ListRow
    Dim r As Range
    Dim rg As Range
    Dim trouv

    Set f2 = Sheets("BDD_rues").ListObjects(1)
    Set lcs = f2.ListColumns(1)
    Set row = f2.ListRows

    ligne = lcs.DataBodyRange.Find(what:=CP).row

    trouv = False

      Do While Cells(ligne, 3).text <> ""
            If Cells(ligne, 3).text = CP Then trouv = True
                If trouv Then
                   If Cells(ligne, 3).text <> CP Then Exit Do
                   Me.rue.AddItem Cells(ligne, 3).text
                End If
            ligne = ligne + 1
      Loop

    Me.rue.DropDown
    Set f2 = Nothing
    Set lcs = Nothing

End Sub

Si je parviens à trouver la première position du CP souhaité dans la colonne » PKANCODE » impossible pour moi de récupérer le nom de la rue situé dans la colonne « STRAATNM » ainsi que toutes les autres rues liées au même code postal.

Merci d’avance pour votre aide

Bonsoir,

ci-dessous un code qui devrait fonctionner

Private Sub rue_Change()

    Dim f2 As ListObject
    Dim lcs As ListColumn
    Dim i As Long
    Dim cell As Range, cell1 As Range

    Set f2 = [T_Datas].ListObject
    Set lcs = f2.ListColumns("PKANCODE")

    Set cell = lcs.DataBodyRange.Find(what:=CP)
    If Not cell Is Nothing Then
        Set cell1 = cell
        Do
            With f2
                i = cell.row - .HeaderRowRange.row
                Me.Rue.AddItem .ListColumns("STRAATNM").DataBodyRange(i)
            End With
            Set cell = lcs.DataBodyRange.FindNext(cell)
        Loop Until cell.Address = cell1.Address
    End If

    Me.Rue.DropDown
    Set f2 = Nothing
    Set lcs = Nothing

End Sub

NB : avec un tableau structuré, utiliser les noms de colonne afin de rendre le code invariant en cas de déplacement ou d'ajout de colonne.

Je ne sais comment vous remercier pour ce coup de main vraiment précieux.

Vu le temps que je cherche c'est vraiment appréciable.

Encore une question pour mon "éducation" personnelle

i = cell.row -

Comment faut-il comprendre cette ligne de code ? Je suis loin de maîtriser VBA mais ceci je ne l'ai jamais vu dans toutes mes recherches.

Encore merci.

"i = cell.row - .HeaderRowRange.row"

i = cell.row  donne à partir de la première ligne de la feuille, le numéro de ligne de la cellule trouvée par l'instruction Find. Pour trouver le numéro de ligne correspondant au tableau structuré, il faut y retirer le numéro de ligne de son entête (=1 si le tableau structuré est situé à partir de la première ligne de la feuille).
Rechercher des sujets similaires à "tableau structure"