IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

recherche dans tableau structuré [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Mars 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2013
    Messages : 72
    Par défaut recherche dans tableau structuré
    Bonjour,
    J’ai bien compris l’utilité des tableaux structurés, mais même après avoir lu et relu les tuto’s conseillés, 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.
    Nom : Capture.PNG
Affichages : 1298
Taille : 22,8 Ko

    Voici une partie du code utilisé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    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.
    Je me doute que je dois travailler avec l’objet listrow mais là je bloque ( :-

    Merci d’avance pour votre aide

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 141
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour une recherche multiple, soit on choisi d'effectuer une recherche séquentielle soit on utilise la méthode Find mais alors on utilise FindNext

    Un exemple ci-dessous d'une fonction générique nommée FindList qui renvoie la liste des éléments trouvés en fonction des paramètres. Les méthodes utilisées sont Find et FindNext

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Function FindList(TableName As String, SearchColumn As String, LookUpValue As Variant, ColumnReturn As String) As Variant
      ' Arguments
      '   TableName     Nom de la table
      '   SearchColumn  Nom de la colonne où effectuer la recherche
      '   LookupValue   Valeur cherchée
      '   ColumnReturn  Nom de la colonne où les valeurs à retourner se trouvent
      ' Philippe Tulliez (www.magicoffice.be)
      ' Vers 1.1
      Dim oList As ListObject ' Table structurée
      Dim oRange As Range     ' Plage de recherche
      Dim c As Range          ' Cellule trouvée
      Dim fr As Long          ' Première ligne trouvée
      Dim cr As Long          ' Ligne trouvée
      Dim t As Variant        ' Table renvoyée
      Dim Flag As Boolean
      Dim e As Long
      Set oList = Range(TableName).ListObject
      Set oRange = oList.ListColumns(SearchColumn).DataBodyRange
      '
      With oRange
        Set c = oRange.Find(What:=LookUpValue, After:=.Cells(.Cells.Count), LookAt:=xlWhole, LookIn:=xlValues)
        Do While Not c Is Nothing And Flag = False
           cr = c.row - .row + 1
           If e Then ReDim Preserve t(e) Else ReDim t(e): fr = cr
           t(e) = oList.ListColumns(ColumnReturn).DataBodyRange.Cells(cr).Value
           e = e + 1
           Set c = .FindNext(c)
           Flag = (fr = c.row - .row + 1)
        Loop
      End With
      FindList = t
      Set oList = Nothing: Set oRange = Nothing: Set c = Nothing
    End Function
    Exemple d'une procédure qui l'invoque
    Dans cet exemple nous cherchons la liste des éléments trouvés dans la colonne nommée Rue de la table nommée t_Commune, voir illustration, du code postal 1050 se trouvant dans la colonne nommé Code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Sub TestFindList()
      Const SearchValue As Variant = 1050  ' Valeur cherchée
      Dim t As Variant
      Dim e As Long
      Dim Msg As String
      t = FindList("t_Commune", "Code", SearchValue, "Rue")
      Msg = "Liste des rues du code postal : " & SearchValue & vbCrLf
      If IsArray(t) Then
         For e = 0 To UBound(t)
           Msg = Msg & vbCrLf & t(e)
         Next
       Else
         Msg = Msg & vbCrLf & "Pas trouvé le code "
      End If
      MsgBox Msg
    End Sub
    Illustration de la table nommée t_Commune

    Nom : 220722 Recherche rues.png
Affichages : 1287
Taille : 14,0 Ko
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 1 020
    Par défaut
    Bonjour,
    Je n'ai pas de PC sous la main pour tester mais de mémoire Find ne marche pas sur les lignes filtrées (masquées), vous confirmez ?
    Et pour travailler avec les tableaux structurés je vous conseille les fonctions génériques du tutoriel que vous trouverez dans ma signature (l'avant dernière).
    https://laurent-ott.developpez.com/t...ux-Structures/
    Bonne programmation.

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 141
    Billets dans le blog
    53
    Par défaut
    Bonjour Laurent,
    Je n'ai pas de PC sous la main pour tester mais de mémoire Find ne marche pas sur les lignes filtrées (masquées), vous confirmez ?
    Effectivement la recherche avec la méthode Find ne fonctionne pas si la valeur cherchée se trouve dans les lignes masquées par le filtre. En revanche la recherche séquentielle fonctionne.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Mars 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2013
    Messages : 72
    Par défaut
    Bonjour,

    merci à vous deux pour les informations.
    Mon problème est résolu, cela n'a pas été sans mal..

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2016] Recherche erreur #N/A dans tableau structuré
    Par Jeanvaljean44 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 27/03/2018, 14h49
  2. Recherche dans une Structure d'éléments semblables
    Par bernard6 dans le forum MATLAB
    Réponses: 1
    Dernier message: 27/07/2007, 14h28
  3. fonction recherche dans tableau javascript
    Par calitom dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 27/11/2006, 15h51
  4. Recherche dans une structure XML::Simple
    Par nicolargo dans le forum Modules
    Réponses: 1
    Dernier message: 04/09/2006, 19h17
  5. Recherche dans Tableau de point
    Par Platypus dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 30/08/2005, 18h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo