Bonjour les développeurs,
En fait je veux automatiser la fonction rechercheV avec VBA, le problème c'est que ma source de données se trouve dans un fichier différent et ça me bloque.
Est ce que quelqu'un peut m'aider?
Merci
Version imprimable
Bonjour les développeurs,
En fait je veux automatiser la fonction rechercheV avec VBA, le problème c'est que ma source de données se trouve dans un fichier différent et ça me bloque.
Est ce que quelqu'un peut m'aider?
Merci
Bonjour,
Un peu plus de précisions sont nécessaires pour pouvoir t'aider.
Pourquoi cela te bloque-t-il ?
As-tu un message d'erreur ? Si oui lequel ?
Qu'as-tu déjà essayer de faire ?
Est-ce vraiment nécessaire d'utiliser du VBA ?
Il n'y a en théorie rien qui empêche de faire une RECHERCHEV sur un autre classeur.
Je pense que certains ne seront pas d'accord avec moi mais lorsque je fais des recherches en VBA, je préfère utiliser la méthode Find.
Lire ceci : https://msdn.microsoft.com/fr-fr/lib...6(v=office.15)
L'avantage est qu'on peut facilement désigner le classeur et la feuille concernée.
Elle renvoie la cellule trouvée. Avec son numéro de ligne (Row) on peut alors récupérer la donnée de la cellule d'une autre colonne sur la même ligne.
Ou utiliser un Offset pour décaler vers la colonne résultat.
Pièce jointe 577063
Pièce jointe 577064
Voilà, par exemple comment utiliser la Vlookup pour rechercher et insérer le code dans le fichier Data dans le fichier Test, je suis vraiment bloquée !!
Salut.
Je suppose que tu travailles avec une version récente d'Excel (au moins la 2007) et donc que les tableaux structurés ne te sont pas étrangers (sinon, voir mon tuto)
Dès lors, je te propose la démarche suivante:
- Ouvrir le classeur source (celui dans lequel se trouve la plage dans laquelle tu dois rechercher ta donnée)
- Rechercher le tableau structuré que tu souhaites utiliser et en mémoriser sa plage de données;
- Utiliser Application.Vlookup pour récupérer la valeur souhaitée;
- Fermer ton classeur.
Pour retrouver la plage du tableau structuré, je propose une fonction générique:
Voici un code qui implémente la démarche vue plus haut:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Function getListObject(Name As String, Optional wb As Workbook) As ListObject Dim lo As ListObject Dim shCounter As Long: shCounter = 1 Dim loCounter As Long If wb Is Nothing Then Set wb = ThisWorkbook Do While shCounter <= wb.Worksheets.Count And getListObject Is Nothing loCounter = 1 Do While loCounter <= wb.Worksheets(shCounter).ListObjects.Count And getListObject Is Nothing If StrComp(wb.Worksheets(shCounter).ListObjects(loCounter), Name, vbTextCompare) = 0 Then Set getListObject = wb.Worksheets(shCounter).ListObjects(loCounter) loCounter = loCounter + 1 Loop shCounter = shCounter + 1 Loop End Function
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Sub Test1() Dim Value As Variant, SearchValue As Long Dim Source As Range Dim wbSource As Workbook Dim Name As String SearchValue = 456 Name = "t_Contacts" Set wbSource = Workbooks.Open("e:\temp\Source_Recherchev.xlsx") ThisWorkbook.Activate Set Source = getListObject(Name, wbSource).DataBodyRange Value = Application.VLookup(SearchValue, Source, 2, False) MsgBox Value wbSource.Close False End Sub
Bien entendu, cette approche modélise le code, que tu devras adapter à ta situation.
Cela étant dit...
Le travail interclasseur est rarement une technique pertinente à mettre en place. Perso, dans ton cas, j'importerais le tableau dans mon fichier de travail (PowerQuery, MSQuery, liaison, ...) et je travaillerais sur les données en local. De mon expérience, c'est une démarche qui pose moins de problèmes.