Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

interroger un fichier fermé - vlookup ADO ou quoi???

2 réponses
Avatar
Didier Coullaré
Bonjour et Bonne Année à tous les maîtres d'Excel que j'admire et à tous les
courageux disciples comme moi qui rament dur dans leur sillage...


Dans un module VBA, je cherche à interroger un fichier fermé avec
l'instruction suivante
toto = Evaluate("VLOOKUP(test!A1,'fichier2'!A1:I480,9,0)")
et je colle le résultat dans b2 pour tester ce que ça retourne :
range("b2")=toto

Ca ne renvoie une valeur que si et seulement si fichier2 est ouvert (et que
test!A1 existe dans la colonne A1:A480 de fichier2 évidemment)
si fichier2 est fermé, la cellule B2 me retourne #REF.

Alors j'ai contourné le problème, j'ai écrit l'instruction suivante :
range("b2").Formula = "=VLOOKUP(test!A1,'fichier2'!A1:I480,9,0)"
et la ça marche même si fichier2 est fermé.
mais j'aurais préféré pouvoir récupérer le résultat de vlookup sans être
obligé de coller la fonction dans une feuille.
est ce possible?

J'ai également prospecté la recherche de données dans des fichiers fermés en
utilisant une connexion ADO.
ça marche bien mais je trouve ça un peu lourd en nombre de lignes de vba si
c'est uniquement pour rechercher une seule valeur et non pas ramener tout un
recordset.

Quelqu'un a t-il des tuyaux à me donner sur l'art et la manière d'interroger
des fichiers fermés sur des données ponctuelles?
Est ce qu'il faut se résigner à ouvrir les fichiers (parfois lourds au
risque de ralentir la proc) en utilisant un Application.screenUpdating =
false pour cacher la misère...

Merci à vous.

2 réponses

Avatar
Philippe.R
Bonjour Didier,
Va voir Chez Frédéric Sigonneau, il y a ce qu'il faut !
http://frederic.sigonneau.free.fr/Ado.htm
--
Amicales Salutations
XL 97 / 2000 / 2002
Préférez suivre facilement sur le forum :
news://msnews.microsoft.com/microsoft.public.fr.excel
(Voulez-vous vous abonner ? -> Oui)

"Didier Coullaré" a écrit dans le message de news:
41fd79f4$0$14463$
Bonjour et Bonne Année à tous les maîtres d'Excel que j'admire et à tous les
courageux disciples comme moi qui rament dur dans leur sillage...


Dans un module VBA, je cherche à interroger un fichier fermé avec
l'instruction suivante
toto = Evaluate("VLOOKUP(test!A1,'fichier2'!A1:I480,9,0)")
et je colle le résultat dans b2 pour tester ce que ça retourne :
range("b2")=toto

Ca ne renvoie une valeur que si et seulement si fichier2 est ouvert (et que
test!A1 existe dans la colonne A1:A480 de fichier2 évidemment)
si fichier2 est fermé, la cellule B2 me retourne #REF.

Alors j'ai contourné le problème, j'ai écrit l'instruction suivante :
range("b2").Formula = "=VLOOKUP(test!A1,'fichier2'!A1:I480,9,0)"
et la ça marche même si fichier2 est fermé.
mais j'aurais préféré pouvoir récupérer le résultat de vlookup sans être
obligé de coller la fonction dans une feuille.
est ce possible?

J'ai également prospecté la recherche de données dans des fichiers fermés en
utilisant une connexion ADO.
ça marche bien mais je trouve ça un peu lourd en nombre de lignes de vba si
c'est uniquement pour rechercher une seule valeur et non pas ramener tout un
recordset.

Quelqu'un a t-il des tuyaux à me donner sur l'art et la manière d'interroger
des fichiers fermés sur des données ponctuelles?
Est ce qu'il faut se résigner à ouvrir les fichiers (parfois lourds au
risque de ralentir la proc) en utilisant un Application.screenUpdating > false pour cacher la misère...

Merci à vous.




Avatar
Herdet
Bonjour Didier,
Il y a une solution assez simple qui évite d'utiliser ADO
effectivement un peu complexe.
Ce sont les bonnes vielles macros Excel4 toujours assi
efficaces.
J'ai fais une fonction RECHERCHEV mais on peut en faire
plusieurs autres comme INDEX, EQUIV, RECHERCHE,
RECHERCHEH, NB, NB.SI, SUSTITUTE (plus puissant que Trim
en VBA)
Cordialement
Robert Dezan
-----------------------------------------------------
Sub RechercheV_fichier_ferme()
' RechercheV d'une valeur dans un fichier fermé
Dim P As String, F As String, S As String, A As String
Dim Col, Mode As Integer
P = "E:TEST"
F = "Test Lecture.xls"
S = "Données"
A = "$A$1:$F$20"
Rech = "Avril" ' valeur recherchée
Col = 2 ' colonne de recherche
Mode = 0 ' valeur strictement égale
MsgBox RECHERCHEV(P, F, S, A, Rech, Col, Mode)
End Sub

Function RECHERCHEV(Path, File, Sheet, Ref, Rech, Col,
Mode)
Dim Arg As String
If Right(Path, 1) <> "" Then Path = Path & ""
If Dir(Path & File) = "" Then
GetValue = "Fichier non trouvé"
Exit Function
End If
Arg = "'" & Path & "[" & File & "]" & Sheet & "'!" &
Range(Ref).Address(ReferenceStyle:=xlR1C1)
Arg2 = "VLOOKUP(""" & Rech & """, " & Arg & ", " & Col
& "," & Mode & ")"
RECHERCHEV = ExecuteExcel4Macro(Arg2)
End Function
-----------------------------------------------------------

Quelques autres fonctions à adapter:

Function RECHERCHEV(Val_Ch As Variant, Tableau As Range,
Col As Integer, Mode_Rech As Boolean) As Variant
' fonctionnement identique à la fonction RECHERCHEV de
feuille de calcul
If IsError(Application.WorksheetFunction.VLookup
(Val_Ch, Tableau, Col, Mode_Rech)) = True Then
RECHERCHEV = ""
Else
RECHERCHEV =
Application.WorksheetFunction.VLookup(Val_Ch, Tableau,
Col, Mode_Rech)
End If
End Function

Function EQUIVAL(Val_Ch As Variant, Tableau As Range,
Mode_Rech As Integer) As Variant
' fonctionnement identique à la fonction EQUIV de
feuille de calcul
EQUIVAL = 0
On Error Resume Next
EQUIVAL = Application.WorksheetFunction.Match(Val_Ch,
Tableau, Mode_Rech)
On Error GoTo 0
End Function

Function NB(Tableau As Range) As Variant
' fonctionnement identique à la fonction NBVAL de
feuille de calcul
NB = 0
If IsError(Application.WorksheetFunction.Count
(Tableau)) = False Then
NB = Application.WorksheetFunction.Count(Tableau)
End If
End Function

Function NBVALEUR(Tableau As Range) As Variant
' fonctionnement identique à la fonction NBVAL de
feuille de calcul
NBVALEUR = 0
If IsError(Application.WorksheetFunction.CountA
(Tableau)) = False Then
NBVALEUR = Application.WorksheetFunction.CountA
(Tableau)
End If
End Function

Function NBSI(Tableau As Range, ByVal Val_Test As String)
As Variant
' fonctionnement identique à la fonction NB de feuille
de calcul
NBSI = 0
If IsError(Application.WorksheetFunction.CountIf
(Tableau, "=" & Val_Test)) = False Then
NBSI = Application.WorksheetFunction.CountIf
(Tableau, "=" & Val_Test)
End If
End Function

Function SUBSTITUE(ByVal Val_Txt As String, ByVal
Val_Txt_1 As String, ByVal Val_Txt_2 As String) As String
' fonctionnement identique à la fonction SUBSTITUE de
feuille de calcul
SUBSTITUE = Application.WorksheetFunction.Substitute
(Val_Txt, Val_Txt_1, Val_Txt_2)
End Function
--------------------------------------------------------
-----Message d'origine-----
Bonjour et Bonne Année à tous les maîtres d'Excel que
j'admire et à tous les

courageux disciples comme moi qui rament dur dans leur
sillage...



Dans un module VBA, je cherche à interroger un fichier
fermé avec

l'instruction suivante
toto = Evaluate("VLOOKUP(test!A1,'fichier2'!A1:I480,9,0)")
et je colle le résultat dans b2 pour tester ce que ça
retourne :

range("b2")=toto

Ca ne renvoie une valeur que si et seulement si fichier2
est ouvert (et que

test!A1 existe dans la colonne A1:A480 de fichier2
évidemment)

si fichier2 est fermé, la cellule B2 me retourne #REF.

Alors j'ai contourné le problème, j'ai écrit
l'instruction suivante :

range("b2").Formula = "=VLOOKUP(test!A1,'fichier2'!
A1:I480,9,0)"

et la ça marche même si fichier2 est fermé.
mais j'aurais préféré pouvoir récupérer le résultat de
vlookup sans être

obligé de coller la fonction dans une feuille.
est ce possible?

J'ai également prospecté la recherche de données dans des
fichiers fermés en

utilisant une connexion ADO.
ça marche bien mais je trouve ça un peu lourd en nombre
de lignes de vba si

c'est uniquement pour rechercher une seule valeur et non
pas ramener tout un

recordset.

Quelqu'un a t-il des tuyaux à me donner sur l'art et la
manière d'interroger

des fichiers fermés sur des données ponctuelles?
Est ce qu'il faut se résigner à ouvrir les fichiers
(parfois lourds au

risque de ralentir la proc) en utilisant un
Application.screenUpdating =

false pour cacher la misère...

Merci à vous.


.