interroger un fichier fermé - vlookup ADO ou quoi???
2 réponses
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...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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.
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é" <coullare@free.fr> a écrit dans le message de news:
41fd79f4$0$14463$636a15ce@news.free.fr...
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...
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.
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 :
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.
.
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 :
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 :