VLookup - Fichier pour la recherche

didieraucun Messages postés 29 Date d'inscription samedi 30 juin 2007 Statut Membre Dernière intervention 2 janvier 2008 - 21 juil. 2007 à 23:19
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 - 23 juil. 2007 à 09:11
Bonsoir,
J'ai un petit code qui permet en double-cliquant sur une cellule de ramener la valeur de correspondance dans une table. (recherchev).

Mainteant je souhaite que mon fichier Toto.xls cherche dans Table.xls
Est il possible d'indiquer le chemin du fichier excel conteant la table
<hr size="2" width="100%" />
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)

Nomcell = ActiveCell.Address
Set Macell = Range(Nomcell)
'MsgBox Macell

On Error Resume Next
 
Set Plage = Sheets("Table").Range("A:B") ' nom du fichier pour la recherche  ?
rech = Application.WorksheetFunction.VLookup(Macell, Plage, 2, False)

    If rech <> "" Then
          MsgBox rech
          Else
          MsgBox "Rien trouvé"
    End If
   
End Sub
<hr size="2" width="100%" />

11 réponses

mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
21 juil. 2007 à 23:51
salut,

à moins de passer par la fonction ExecuteExcel4Macro, tu devras ouvrir le fichier (WorkBooks.Open(...)) pour pouvoir traiter avec les données de celui-ci.

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
0
didieraucun Messages postés 29 Date d'inscription samedi 30 juin 2007 Statut Membre Dernière intervention 2 janvier 2008
22 juil. 2007 à 12:35
Je ne pense pas qu'on puisse lire une plage complete avec ExecuteExcel4Macro

Sinon j'ai mis 
Set Plage = Workbooks("table.xls").Sheets("Table_Cap").Range("A:B")
mais il faut que le fichier Table.xls soit ouvert
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
22 juil. 2007 à 14:27
@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
22 juil. 2007 à 14:28
on recommence..

Oui, c'est ce que je disais ^^
^faut l'ouvrir (le classeur) pour pouvoir traiter ses données

@++

<hr width="100%" size="2" />( Nouveau forum : Exclusivement Office & VBA/STRONG>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
22 juil. 2007 à 14:50
As-tu essayé en mettant TOUT le chemin du fichier ?

tu écris
Set Plage = Workbooks( "table.xls" ).Sheets("Table_Cap").Range("A:B")

essaie
Set Plage = Workbooks("C:\Repertoire\table.xls").Sheets("Table_Cap").Range("A:B")
en y mettant le bon chemin, bien sûr ...

MPi
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
22 juil. 2007 à 14:56
@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
22 juil. 2007 à 14:58
rahhh ça me gonfle, ça fait 2 fois ^^

bref, je disais que pour l'ouvrir, (avec Open) il faut le chemin et le nom fichier, par contre, pour le référencer comme tu le fais MPi, il me semble que (vu qu'il est ouvert) seul le nom du classeur suffit pour référencer la plage

@++

<hr width="100%" size="2" />( Nouveau forum : Exclusivement Office & VBA/STRONG>
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
22 juil. 2007 à 16:53
Le fantôme des messages est revenu...

En fait, ce que je voulais dire, c'est de mettre le chemin complet SI il n'est pas ouvert. Autrement, tu as raison, seul le nom devrait suffire.

MPi
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
22 juil. 2007 à 17:09
Mais il me semblait que tu ne pouvais pas lire les données si le fichier n'était pas ouvert ?
(et donc sans passer par ExecuteExcel4Macro)

Me trompe-je ? 

@++

<hr width="100%" size="2" />( Nouveau forum : Exclusivement Office & VBA/STRONG>
0
didieraucun Messages postés 29 Date d'inscription samedi 30 juin 2007 Statut Membre Dernière intervention 2 janvier 2008
22 juil. 2007 à 17:45
Cela ne marche pas avec le nom complet

Avec Workbooks ; il faut mettre uniquement le nom du classeur "table.xls"
Et il faut que le fichier soit ouvert pour que cela marche.
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
23 juil. 2007 à 09:11
Et si tu crées une liaison avec ton fichier Excel de référence, à condition bien entendu que la structure soit toujours la même ?

Quand tu mets à jour dans ta cellule le nom du fichier, ta macro va mettre à jour la liaison comme ça, tu pourras faire ta rechercheV sans ouvrir. Pour mettre à jour la liaison, j'utilise le bout de code qui suit (la fonction FenetreSelection est une fonction maison qui me permet d'aller sélectionner un fichier en fonction d'un certain nombre de critère, la seule chose à retenir, c'est que LiaisonCible(0, 0) & LiaisonCible(0, 1) contient le Chemin & le nom du fichier sélectionné).

    Dim NomLiaisonSource As Variant
    Dim CheminLiaisonSource As String
    Dim LiaisonCible As Variant
   
    'Modification de la source de la liaison
        'Récupération du Nom et du chemin de la source d'origine
    NomLiaison = ActiveWorkbook.LinkSources(xlExcelLinks)
    If Not IsEmpty(NomLiaison) Then
            CheminLiaisonSource = Left(NomLiaison(1), InStrRev(NomLiaison(1), "", , vbTextCompare))
    End If
        'Sélection du fichier source
    LiaisonCible = FenetreSelection(Fichier, "Choisir un fichier cible", , CheminLiaisonSource, FichiersExcel)
    If LiaisonCible(0, 0) = "Vide" Then
        Exit Sub    'Annulation de la mise à jour de la liaison
    End If
        'Mise à jour de la liaison
    ActiveWorkbook.ChangeLink NomLiaison(1), LiaisonCible(0, 0) & LiaisonCible(0, 1), xlLinkTypeExcelLinks
   
Une autre solution pourrait être de jouer sur la zone de nom. Ton code VBA allant mettre à jour la référence au fichier dans cette zone de nom justement.
En tout état de cause, on peut faire des RechercheV sans ouvrir le fichier où se trouve les données, par contre, suivant la taille de ton fichier, ça peut être très long (surtout si ça se trouve sur un disque réseau par ex.).

Sinon, pour jouer avec les Workbooks, pas mieux que didieraucun

Molenn
0
Rejoignez-nous