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 :

Fonction MATCH dans une variable tableau [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de curt
    Homme Profil pro
    Ingénieur Etudes
    Inscrit en
    Mars 2006
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Etudes
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 579
    Par défaut Fonction MATCH dans une variable tableau
    Bonjour,
    Dans le cadre d’une reprise de feuille Excel, j’ai passé le traitement fait sur une feuille Excel dans une variable TABLEAU
    Initialement, je venais regarder si l’étiquette (= Entête) d’une colonne existait au moyen de la commande ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    column = WorksheetFunction.Match(Attributes(j).TagString, Range(Cells(2, 1), Cells(2, LastColumn)), False)
    ça fonctionne parfaitement si on a les valeurs sur la feuille.

    Pour optimiser le temps de traitement (voir tuto sur les variables tableau), j’essaye (en vain pour l’instant) d’avoir la même commande mais pour la variable TABLEAU
    Le début de la commande devrait être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     column = WorksheetFunction.Match(Attributes(j).TagString, Range(TABLEAU ???
    D’avance merci pour l’aide.

    Curt

  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 176
    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 176
    Billets dans le blog
    53
    Par défaut
    Bonjour Curt,
    Voici un petit exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub t2()
     Dim myTable As Variant, LookUpValue As String
     myTable = Range("A2:A15").Value
     LookUpValue = "E"
     MsgBox Application.WorksheetFunction.Match(LookUpValue, myTable, 0)
    End Sub
    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
    Membre Expert Avatar de curt
    Homme Profil pro
    Ingénieur Etudes
    Inscrit en
    Mars 2006
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Etudes
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 579
    Par défaut
    Bonsoir Philippe,

    le soucis que j'ai, c'est de mettre la plage "MY TABLE" dans ton exemple, qui représente la première ligne de ma variable TABLEAU
    Clairement, MYTable n'est pas le RANGE("A2:A15"), mais le RANGE(TABLEAU(LIGNE 1)

    Merci pour le début de piste en tout cas.
    Je continue à creuser.

    Curt

  4. #4
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    Bonsoir,

    Recherche d'un élément dans la colonne d'un Array à 1 dimension avec Application.Match()

    La recherche de la position d'un élément dans un tableau peut se faire avec Application.Match() (Equiv()). Dans une boucle, cette recherche n'est pas très rapide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub RecherchePositionElement()
      a = Array("aa", "bb", "cc", "dd", "ee")
      x = "cc"
      p = Application.Match(x, a, 0)
      MsgBox p
    End Sub
    On obtient 3

    Pour une recherche dans dans la première colonne d'un tableau 2D:

    aa 11
    bb 22
    cc 33
    dd 44

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub RecherchePositionElement2()
      a = [{"aa",11;"bb",22;"cc",33;"dd",44}]
      clé= "cc"
      p = Application.Match(clé, Application.Index(a, , 1), 0) ' Recherche dans colonne 1 du tableau a()
      MsgBox a(p, 2)
    End Sub
    On obtient 33

    Boisgontier

  5. #5
    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 176
    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 176
    Billets dans le blog
    53
    Par défaut
    Bonjour Curt,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub t3()
     Dim myTable As Variant, LookUpValue As String
     myTable = Range("A1:E1").Value
     LookUpValue = "Key"
     MsgBox Application.WorksheetFunction.Match(LookUpValue, myTable, 0)
    End Sub
    et aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub t3()
     Dim myTable As Variant, LookUpValue As String, rng As Range
     Set rng = Range("A1:E15")
     myTable = rng.Rows(1).Value
     LookUpValue = "Key"
     MsgBox Application.WorksheetFunction.Match(LookUpValue, myTable, 0)
    End Sub
    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

  6. #6
    Membre Expert Avatar de curt
    Homme Profil pro
    Ingénieur Etudes
    Inscrit en
    Mars 2006
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Etudes
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 579
    Par défaut
    Bonsoir et merci à vous deux,

    Encore une fois (mais merci pour ces pistes), les valeurs ne sont pas dans la feuille excel (sur la première ligne par exemple) - Tout est traité dans la variable tableau et à la fin, on recopie la variable tableau sur la feuille.

    Donc je voudrais pouvoir trouver dans quelle colonne de ma variable tableau se trouve la valeur recherchée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            column = WorksheetFunction.Match(Attributes(j).TagString, Range(TABLEAU(1, 5), TABLEAU(1, UBound(TABLEAU, 2))), False)
    C'est la partie en gras qui pose problème

    Encore merci pour le coup de main.
    Curt

  7. #7
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    -Match ne fonctionne que pour une colonne ou une ligne d'Array.
    -Pour la vitesse d'exécution,le + rapide est de parcourir tous les éléments de l'Array(variable tableau):


    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
     
    Sub Essai()
     Tbl = [{11,12,13;21,22,23;31,32,33;41,42,43}]   ' Array avec 4 lignes et 3 colonnes
     Position = RechPositionElement(Tbl, 33)
     MsgBox Position
     Position = RechPositionElement(Tbl, 32)
     MsgBox Position
    End Sub
     
    Function RechPositionElement(Tbl, valCherchée)
     Nlig = UBound(Tbl)
     NCol = UBound(Tbl, 2)
     For lig = 1 To Nlig
      For col = 1 To NCol
        If Tbl(lig, col) = valCherchée Then RechPositionElement = "Ligne:" & lig & "/Colonne:" & col: Exit Function
      Next col
     Next lig
    End Function
    Boisgontier
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. Comment insérer les valeurs d'une requete dans une variable tableau
    Par uptoditime dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 04/12/2007, 12h03
  2. Réponses: 3
    Dernier message: 28/09/2007, 16h58
  3. recherche dans une variable tableau
    Par le petit nicolas dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/05/2007, 12h41
  4. [Fonction]récuperer dans une variable le résultat d'une requete
    Par nejisama8 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 28/04/2007, 12h34
  5. [VBA-E]Recherche dans une variable tableau
    Par illight dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/12/2006, 17h50

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