Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
1534 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA - Excel] Vlookup vers un autre fichier

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VBA - Excel] Vlookup vers un autre fichier

n°2047010
OinJ
^^
Posté le 06-01-2011 à 19:02:37  profilanswer
 

Bonjour, je vais essayer de vous exposer clairement mon soucis :)
 
J'ai un 1er fichier 1.xls qui comporte 3 colonnes: Nom_1 - Info1 - Info2
Un second fichier 2.xls dans un répertoire différent (non modifiable): Nom_2 - Nom_1 - Info1
Dans le second fichier la colonne Nom_1 est rentrée manuellement et Info1 est cherchée par un vlookup. Cependant comme le fichier est gros et partagé, j'ai voulu faire une macro pour effectuer ce vlookup.
 
La méthode (macro) que j'ai utilisé jusqu'ici est la suivante:
- J'utilise une case inutilisée et je lui mets la formule du vlookup comme dans Excel.
sheets(1).range("D1" ).formula = "=vlookup..."
- Ensuite je copie cette formule dans la case qui m'intéresse:
sheets(1).range("C2" ) = sheets(1).range("D1" ).value
 
Bien sûr tout ceci est une boucle, ça marche plutôt bien mais j'aimerai améliorer ça parce que je trouve cette méthode pas très orthodoxe et au final je n'ai pas l'impression d'exploiter VBA ...
 
Déjà, pour gagner en visibilité, je voulais modifier le chemin dans le vlookup en passant par une variable de type string mais je n'arrive pas à trouver la bonne formulation:
Dim chemin As String
chemin = "C:\chemin1\"
[..].formula = "=vlookup(cell, ???,nb,0)"

A la place des ??? je ne sais pas comment appeler correctement la range, j'ai essayé plusieurs fois avec des & chemin & [1.xls]Onglet1'!A:F par exemple.
 
Face à cet échec je me suis dit que j'allais passer directement par un vlookup de VBA en utilisant worksheetfunction.vlookup mais je me suis trouvé face aux problèmes suivants:
 
- Je fais une boucle (indice I) pour faire un vlookup sur tous mes éléments de Nom_2 donc j'ai une cell non fixe. J'ai essayé d'écrire:
worksheetfunction.vlookup("A" & I ,...) mais ça ne passe pas.
 
- J'ai alors mis une cell fixe pour tester au niveau de la range et là c'est dans la définition de la range que j'ai un problème. J'ai voulu faire:
Dim rng As Range
rng = ??? (doit faire appel à A:C de 1.xls par exemple)
worksheetfunction.vlookup(" ",rng,...)

En gros je ne sais pas comment définir la range si elle est dans un autre fichier!
 
 
J'espère avoir été assez clair :| En tout cas merci beaucoup à ceux qui auront pris la peine de tout lire et qui auraient une aide à m'apporter :)
 
Christophe

mood
Publicité
Posté le 06-01-2011 à 19:02:37  profilanswer
 

n°2047388
Xxxaaavvv
Posté le 07-01-2011 à 16:37:55  profilanswer
 

C'est juste un problème de compréhension des objets VBA :D
 
Dim objPlageRecherche As Range
Set objPlageRecherche = Workbooks("NOM DE TON WORKBOOK" ).Worksheets("NOM DE TA FEUILLE" ).Range("TA PLAGE DE RECHERCHE" )
 
Debug.Print Application.WorksheetFunction.VLookup("xavier", objPlage, 2)


Message édité par Xxxaaavvv le 07-01-2011 à 16:39:15
n°2047393
OinJ
^^
Posté le 07-01-2011 à 16:44:33  profilanswer
 

Merci, j'ai compris avec les multiples tentatives :) par contre est-ce que je suis obligé d'avoir le workbook ouvert pour que ça fonctionne?
 
VBA ne reconnait pas le fichier si j'écris le chemin entre les parenthèses de Workbooks, ou alors je l'écris pas de la bonne façon :)

n°2047401
Xxxaaavvv
Posté le 07-01-2011 à 16:55:40  profilanswer
 

Oui excel est obligé d'ouvrir les fichiers les traiter
 
par contre, tu peux les ouvrir; et les mettre en invisible, et empécher les refresh à l'écran, ainsi que les recalculs, ce qui fait un gain de temps considérable.
 
(en gros tu provoque le calcul et le refresh de l'écran qu'a la fin de ton traitement.)
 
Une fois qu'un classeur est ouvert dans excel
son identifiant dans la collection des Workbooks() c'est son nom de fichier (pas son chemin)
 
C'est pas VBA qui est en cause la, mais Excel qui ouvre les classeur de cette manière.

n°2047403
Xxxaaavvv
Posté le 07-01-2011 à 16:58:29  profilanswer
 

Essaye un truc du genre pour l'invisibilité ?
mais si tu utilises le screen updating, normalement tu ne gagnera pas plus...
 
 
   Dim objMonClasseur As Workbook
   Dim objPlageRecherche As Range
 
   Set objMonClasseur = Workbooks.Open("CHEMIN DE MON CLASSEUR" )
   Set objPlageRecherche = objMonClasseur.Worksheets("NOM DE TA FEUILLE" ).Range("TA PLAGE DE RECHERCHE" )
 
   for each objWorksheet in objMonClasseur  
      objWorksheet.Visible = False
   next objWorksheet  
 
 
   Debug.Print Application.WorksheetFunction.VLookup("xavier", objPlage, 2)
 
 
 
 
par contre au niveau des calculs :
au début de ta procédure :
   Application.Calculation = xlCalculationManual
 
a la fin :
   Application.Calculation = xlCalculationAutomatic
   Application.Calculate
 
 


Message édité par Xxxaaavvv le 07-01-2011 à 17:06:03
n°2047404
OinJ
^^
Posté le 07-01-2011 à 16:58:50  profilanswer
 

Pour l'instant j'ai mis Application.ScreenUpdating en False pour gagner du temps.
Pour ce qui est de l'ouverture du fichier c'est au final pas très grave puisqu'il est quasi tout le temps ouvert! Je connais la commande pour ouvrir un Workbook mais pas celle pour le mettre en invisible, pourrais-tu me la donner?
 
Merci de ton aide :)

n°2047410
Xxxaaavvv
Posté le 07-01-2011 à 17:06:38  profilanswer
 

Zut j'ai éditer mon poste d'avant au lieu de répondre :
 
à relire donc, désolé.

n°2047461
kiki29
Posté le 07-01-2011 à 19:31:44  profilanswer
 

Salut,non le fichier n'a pas forcément besoin d'être ouvert voir pour cela http://excel.developpez.com/faq/?p [...] FermeIndir


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA - Excel] Vlookup vers un autre fichier

 

Sujets relatifs
[VBA Access] parcourir chaine de caractères[RESOLUS]Exporter documentation Doxygen vers un wiki PHP ?
Désinstaller un fichier .binImpossible de déployer un fichier WAR sur Jonas 5.1.5
lier un fichierReq sur 3 fichiers Excel - Comment s'utilise RechercheV en VBA svp ?
[RESOLU]UTF-8 vers ISO-8859-1 AJAX - XMLHTTPOuvrir un fichier sur un share
Controle nom fichier VBS 
Plus de sujets relatifs à : [VBA - Excel] Vlookup vers un autre fichier


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR