didieraucun
Messages postés29Date d'inscriptionsamedi 30 juin 2007StatutMembreDernière intervention 2 janvier 2008
-
21 juil. 2007 à 23:19
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 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
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 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.
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 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
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 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