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

Excel Discussion :

faire un Vlookup dans un classeur fermé pour trouver une valeur de correspondance [XL-2016]


Sujet :

Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2018
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Philippines

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2018
    Messages : 73
    Points : 52
    Points
    52
    Par défaut faire un Vlookup dans un classeur fermé pour trouver une valeur de correspondance
    Bonjour
    Encore un petit problème, en faisant des recherche j'ai trouve un bout de code qui répondrais à mes besoins (merci Theze pour la solution dans le forum)

    Je dois faire la correspondance entre des catégories . Pour cela j'ai créer une table de correspondance qui entre autre sert à d'autres petites chose +- 600 ligne 11 colonnes.

    en première colonne la catégorie origine trié en ordre croissant, en colonne 8 la valeur de correspondance que je recherche.

    J'appel donc la procédure Theze que j'ai un peu simplifier (pas de recherche de fichier par méthode .show le nom du fichier est fixe et invariable)

    L'APPEL à la procedure dans le même module

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        Public sRacine As String ' est défini beaucoup plus haut dans le code et dans un autre module, il est transmis aux différents modules     
     
        Dim Valeur_Cherchee_Tab As Long ' a ce niveau j'ai fait plusieurs essais avec long string variant ets aucun n'a donné de résultats
     
        Valeur_Cherchee_Tab = Mid(Prod_import.Range("D" & Ind_lig).Value, 1, 4)         ' valeur recherchée
        Call Cher_Cat(sRacine, Valeur_Cherchee_Tab)                                       ' appel de la procédure avec sRacine (le programme peut être installé sur différent disque 
                                                                                                                   mais à la racine
    procédure et fonction

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    Sub Cher_Cat(sRacine, Valeur_Cherchee_Tab)
     
        Dim Plage As Range
        Dim MonDossier As String
        Dim Classeur As String
        Dim Feuille As String
        Dim ValCherchee As Variant ' cette variable a été teste avec les mêmes caractéristiques variant long string
        Dim Valeur
        Dim IndexColonne As Integer
        Dim Exact As Boolean
     
        MonDossier = sRacine & "\" & "MG_TAB_Conv_Cat.xlsx" 'Dossier()
    '                                                        If MonDossier = "FAUX" Then Exit Sub
     
        'sépare le chemin et le nom du classeur
        Classeur = Right(MonDossier, Len(MonDossier) - (InStrRev(MonDossier, "\")))
        MonDossier = Left(MonDossier, (InStrRev(MonDossier, "\")))
     
        Feuille = "csv-catgories-2202-fr"
        Set Plage = Range("A1:K663")
        ValCherchee = Valeur_Cherchee_Tab
        IndexColonne = 8
        Exact = False 'false pour correspondance exacte
     
        Valeur = RECHERCHE_VERT(MonDossier, _
                                Classeur, _
                                Feuille, _
                                ValCherchee, _
                                Plage, _
                                IndexColonne, _
                                Exact)
     
        MsgBox Valeur
     
    End Sub
     
     
     
    Public Function RECHERCHE_VERT(Chemin As String, _
                                   Classeur As String, _
                                    Feuille As String, _
                                    ValRecherchee As Variant, _
                                    TabMatrice As Range, _
                                    ColonneIndex As Integer, _
                                    ValExacte As Boolean)
     
        Dim Valeur
        Dim Exact As String
     
        Select Case ValExacte: Case False: Exact = "FALSE": Case Else: Exact = "TRUE": End Select
     
        Valeur = ExecuteExcel4Macro("VLOOKUP(""" & ValRecherchee & _
                                             """,'" & Chemin & _
                                             "[" & Classeur & _
                                             "]" & Feuille & _
                                             "'!" & TabMatrice.Address(1, 1, xlR1C1) & _
                                             "," & ColonneIndex & _
                                             "," & Exact & ")")
     
        If IsError(Valeur) Then
             RECHERCHE_VERT = "Aucune valeur correspondante à '" & ValRecherchee & "' !"
         Else
             RECHERCHE_VERT = Valeur
        End If
     
    End Function
    Le résultat:
    les appels, le traitement se font sans problèmes. j'ai verifier avec l'espion ValRecherchee, Chemin, Classeur, Feuille,.... TOUTES LES VARIABLES SON CORRECTEMENT INITIALISEES !!!!!!!!!!!

    et j'ai un retour 2042 valeur non trouvée alors que j'ai bien en 2eme ligne de ma table la valeur cherchée

    Merci à ceux qui peuvent m'aider

  2. #2
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 905
    Points
    55 905
    Billets dans le blog
    131
    Par défaut
    Salut.

    Pour moi, Il n'y a qu'une bonne solution, c'est d'importer tes données dans ton classeur et de travailler en local. Comme tu travailles en 2016,tu pourrais utiliser PowerQuery qui te permettrait un RECHERCHEV graphique et plus rapide que la fonction Excel. Tu peux aussi, plus classiquement, importer tes données dans une feuille de ton classeur actif puis travailler localement avec RECHERCHEV ou INDEX/EQUIV...

    Perso, je conseille de fuir comme la peste les formules InterClasseurs. C'est tout sauf une bonne idée de travailler avec des références externes dans les formules.

  3. #3
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2018
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Philippines

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2018
    Messages : 73
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Salut.

    Pour moi, Il n'y a qu'une bonne solution, c'est d'importer tes données dans ton classeur et de travailler en local. Comme tu travailles en 2016,tu pourrais utiliser PowerQuery qui te permettrait un RECHERCHEV graphique et plus rapide que la fonction Excel. Tu peux aussi, plus classiquement, importer tes données dans une feuille de ton classeur actif puis travailler localement avec RECHERCHEV ou INDEX/EQUIV...

    Perso, je conseille de fuir comme la peste les formules InterClasseurs. C'est tout sauf une bonne idée de travailler avec des références externes dans les formules.
    Merci Pierre

    En fait c'est ce que je fais pour travailler sur les CSV DATA que je fusionne sur un identifiant, j'ai 2 feuilles de travail Une cible et une d'import des CSV que j'ouvre sélectionne mes données pour ma cible et ferme en boucle depuis mon répertoire d'import.

    Mais je voulais tester autre chose histoire de voir les possibilités de limiter la charge mémoire pour d'autres besoins que j'ai

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

Discussions similaires

  1. Iterer dans un tableau dimensionnel pour ajouter une valeur a chaque index
    Par Hemoroide dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 05/08/2018, 15h35
  2. [XL-2010] Vlookup dans un classeur fermé externe en VBA
    Par Caro Baz dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/09/2016, 12h24
  3. Réponses: 2
    Dernier message: 12/09/2014, 21h31
  4. [MySQL] requete pour faire un select dans toutes les tables pour trouver le titre
    Par japhettchabao dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 12/09/2014, 20h02
  5. Réponses: 4
    Dernier message: 03/12/2009, 11h50

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