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

Mise à jour par Donnée externes

10 réponses
Avatar
Martinus
Bonjour,

Je sais créer une requête qui me permet de remplir une grille à partir d'une
base externe, mais j'ai souvent une demande un peu différente :

Dans une colonne j'ai une valeur, et je voudrais calculer une donnée qui en
découle à partir d'une requête externe en l'écrivant dans une case voisine.

Exemple simplissime : à partir d'une liste de quelques centaines de code
client dans une colonne, je veux afficher leur raison sociale que je trouve
dans une base de données externe, avec une requête SQL qui est fonction du
code client.

Il n'est pas possible de charger dans Excel les raisons sociales de tous les
clients de la base externe, il y en a beaucoup trop.

Bien sûr, je parviens à mes fins avec des lots DTS mais c'est un peu
compliqué, demande des droits importants, et oblige à créer des tables dans
la base de données.

Serait-ce possible sous Excel 2003 ou supérieur de le faire uniquement avec
une requête externe et un accès en lecture à la base de données ?

Merci pour vos suggestions !

10 réponses

Avatar
michdenis
Bonjour Martinus,

Il y a cette fonction :

Par exemple, tu peux mettre dans une cellule :
Le chemin : c:Documents En A1
Le fichier : MonClasseur.xls En A2
Nom de la feuille : Feuil1 En A3
Adresse G1 En A4

Et dans la cellule, pour retrouver une valeur de G1
Tu peux inscrire : Ado(A1,A2,A3,A4) où tu peux inscrire
directement dans la fonction, les valeurs des paramètres
entre guillemets.

Dans la fonction suivante, tu dois redéfinir la chaîne de connexion
si ta base externe n'est pas Excel. À cette adresse, tu peux retrouver
les principales chaînes de connexion selon la base utilisée :
http://www.carlprothman.net/Default.aspx?tabid

Il faudra de plus que tu adaptes le texte de la requête.
A ) que tu remplaces les noms des 2 champs
B ) de même que le nom de ta base de données.

Ce n'est qu'un point de départ .... à toi d'adapter !
'---------------------------------------------
Function Ado(Chemin As String, Fichier As String, _
Feuille As String, Adresse As String) As Variant
Dim Conn As New ADODB.Connection
Dim Rst As New ADODB.Recordset
Dim Requete As String, File As String, X As String
If Right(Chemin, 1) <> "" Then Chemin = Chemin & ""
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Chemin & Fichier & ";" & _
"Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;"""


Requete = "SELECT Champ1, Champ2 From [" & Feuille & "$]" & Adresse
Rst.Open Requete, Conn, adOpenForwardOnly, adLockReadOnly

If IsNull(Rst(0).Value) Then
Ado = ""
ElseIf IsNumeric(Rst(0).Value) Then
Ado = CDbl(Rst(0).Value)
Else
Ado = Rst(0).Value
End If

Rst.Close: Conn.Close
Set Rst = Nothing: Set Conn = Nothing
End Function
'---------------------------------------------



"Martinus" a écrit dans le message de groupe de
discussion :
Bonjour,

Je sais créer une requête qui me permet de remplir une grille à partir d'une
base externe, mais j'ai souvent une demande un peu différente :

Dans une colonne j'ai une valeur, et je voudrais calculer une donnée qui en
découle à partir d'une requête externe en l'écrivant dans une case voisine.

Exemple simplissime : à partir d'une liste de quelques centaines de code
client dans une colonne, je veux afficher leur raison sociale que je trouve
dans une base de données externe, avec une requête SQL qui est fonction du
code client.

Il n'est pas possible de charger dans Excel les raisons sociales de tous les
clients de la base externe, il y en a beaucoup trop.

Bien sûr, je parviens à mes fins avec des lots DTS mais c'est un peu
compliqué, demande des droits importants, et oblige à créer des tables dans
la base de données.

Serait-ce possible sous Excel 2003 ou supérieur de le faire uniquement avec
une requête externe et un accès en lecture à la base de données ?

Merci pour vos suggestions !
Avatar
Martinus
Je crois que tu me mets sur la bonne piste !

Tu crées donc une fonction personnalisée VBA, qui sera appelée pour remplir
une case.

Malheureusement, je n'ai jamais réussi à faire ça...

Exemple simplifié :

Public Function Test(Valeur As Integer)
Test = CStr(Valeur + 1)
End Function

Puis j'écris Test(1) dans une case : ça devrait y afficher 2...

J'ai essayé de mettre la fonction dans la feuille ou dans le classeur...
J'ai toujours #NOM? dans la case, comme si la fonction n'était pas trouvée.

Il doit manquer quelque chose... mais quoi ?

Merci pour ton aide !


"michdenis" a écrit :


Bonjour Martinus,

Il y a cette fonction :

Par exemple, tu peux mettre dans une cellule :
Le chemin : c:Documents En A1
Le fichier : MonClasseur.xls En A2
Nom de la feuille : Feuil1 En A3
Adresse G1 En A4

Et dans la cellule, pour retrouver une valeur de G1
Tu peux inscrire : Ado(A1,A2,A3,A4) où tu peux inscrire
directement dans la fonction, les valeurs des paramètres
entre guillemets.

Dans la fonction suivante, tu dois redéfinir la chaîne de connexion
si ta base externe n'est pas Excel. À cette adresse, tu peux retrouver
les principales chaînes de connexion selon la base utilisée :
http://www.carlprothman.net/Default.aspx?tabid

Il faudra de plus que tu adaptes le texte de la requête.
A ) que tu remplaces les noms des 2 champs
B ) de même que le nom de ta base de données.

Ce n'est qu'un point de départ .... à toi d'adapter !
'---------------------------------------------
Function Ado(Chemin As String, Fichier As String, _
Feuille As String, Adresse As String) As Variant
Dim Conn As New ADODB.Connection
Dim Rst As New ADODB.Recordset
Dim Requete As String, File As String, X As String
If Right(Chemin, 1) <> "" Then Chemin = Chemin & ""
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Chemin & Fichier & ";" & _
"Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;"""


Requete = "SELECT Champ1, Champ2 From [" & Feuille & "$]" & Adresse
Rst.Open Requete, Conn, adOpenForwardOnly, adLockReadOnly

If IsNull(Rst(0).Value) Then
Ado = ""
ElseIf IsNumeric(Rst(0).Value) Then
Ado = CDbl(Rst(0).Value)
Else
Ado = Rst(0).Value
End If

Rst.Close: Conn.Close
Set Rst = Nothing: Set Conn = Nothing
End Function
'---------------------------------------------



"Martinus" a écrit dans le message de groupe de
discussion :
Bonjour,

Je sais créer une requête qui me permet de remplir une grille à partir d'une
base externe, mais j'ai souvent une demande un peu différente :

Dans une colonne j'ai une valeur, et je voudrais calculer une donnée qui en
découle à partir d'une requête externe en l'écrivant dans une case voisine.

Exemple simplissime : à partir d'une liste de quelques centaines de code
client dans une colonne, je veux afficher leur raison sociale que je trouve
dans une base de données externe, avec une requête SQL qui est fonction du
code client.

Il n'est pas possible de charger dans Excel les raisons sociales de tous les
clients de la base externe, il y en a beaucoup trop.

Bien sûr, je parviens à mes fins avec des lots DTS mais c'est un peu
compliqué, demande des droits importants, et oblige à créer des tables dans
la base de données.

Serait-ce possible sous Excel 2003 ou supérieur de le faire uniquement avec
une requête externe et un accès en lecture à la base de données ?

Merci pour vos suggestions !



Avatar
isabelle
bonjour Martinus,

as-tu mit le signe = dans la cellule,

=Test(1)

isabelle

Martinus a écrit :
Je crois que tu me mets sur la bonne piste !

Tu crées donc une fonction personnalisée VBA, qui sera appelée pour remplir
une case.

Malheureusement, je n'ai jamais réussi à faire ça...

Exemple simplifié :

Public Function Test(Valeur As Integer)
Test = CStr(Valeur + 1)
End Function

Puis j'écris Test(1) dans une case : ça devrait y afficher 2...

J'ai essayé de mettre la fonction dans la feuille ou dans le classeur...
J'ai toujours #NOM? dans la case, comme si la fonction n'était pas trouvée.

Il doit manquer quelque chose... mais quoi ?

Merci pour ton aide !


"michdenis" a écrit :


Bonjour Martinus,

Il y a cette fonction :

Par exemple, tu peux mettre dans une cellule :
Le chemin : c:Documents En A1
Le fichier : MonClasseur.xls En A2
Nom de la feuille : Feuil1 En A3
Adresse G1 En A4

Et dans la cellule, pour retrouver une valeur de G1
Tu peux inscrire : Ado(A1,A2,A3,A4) où tu peux inscrire
directement dans la fonction, les valeurs des paramètres
entre guillemets.

Dans la fonction suivante, tu dois redéfinir la chaîne de connexion
si ta base externe n'est pas Excel. À cette adresse, tu peux retrouver
les principales chaînes de connexion selon la base utilisée :
http://www.carlprothman.net/Default.aspx?tabid

Il faudra de plus que tu adaptes le texte de la requête.
A ) que tu remplaces les noms des 2 champs
B ) de même que le nom de ta base de données.

Ce n'est qu'un point de départ .... à toi d'adapter !
'---------------------------------------------
Function Ado(Chemin As String, Fichier As String, _
Feuille As String, Adresse As String) As Variant
Dim Conn As New ADODB.Connection
Dim Rst As New ADODB.Recordset
Dim Requete As String, File As String, X As String
If Right(Chemin, 1) <> "" Then Chemin = Chemin & ""
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Chemin & Fichier & ";" & _
"Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;"""


Requete = "SELECT Champ1, Champ2 From [" & Feuille & "$]" & Adresse
Rst.Open Requete, Conn, adOpenForwardOnly, adLockReadOnly

If IsNull(Rst(0).Value) Then
Ado = ""
ElseIf IsNumeric(Rst(0).Value) Then
Ado = CDbl(Rst(0).Value)
Else
Ado = Rst(0).Value
End If

Rst.Close: Conn.Close
Set Rst = Nothing: Set Conn = Nothing
End Function
'---------------------------------------------



"Martinus" a écrit dans le message de groupe de
discussion :
Bonjour,

Je sais créer une requête qui me permet de remplir une grille à partir d'une
base externe, mais j'ai souvent une demande un peu différente :

Dans une colonne j'ai une valeur, et je voudrais calculer une donnée qui en
découle à partir d'une requête externe en l'écrivant dans une case voisine.

Exemple simplissime : à partir d'une liste de quelques centaines de code
client dans une colonne, je veux afficher leur raison sociale que je trouve
dans une base de données externe, avec une requête SQL qui est fonction du
code client.

Il n'est pas possible de charger dans Excel les raisons sociales de tous les
clients de la base externe, il y en a beaucoup trop.

Bien sûr, je parviens à mes fins avec des lots DTS mais c'est un peu
compliqué, demande des droits importants, et oblige à créer des tables dans
la base de données.

Serait-ce possible sous Excel 2003 ou supérieur de le faire uniquement avec
une requête externe et un accès en lecture à la base de données ?

Merci pour vos suggestions !






Avatar
michdenis
Une fonction personnalisée doit être dans un module "STANDARD"
pour être accessible dans une cellule d'une feuille d'un classeur sinon
tu obtiens #NOM? ­... le nom de la fonction n'est pas reconnu.



"Martinus" a écrit dans le message de groupe de
discussion :
Je crois que tu me mets sur la bonne piste !

Tu crées donc une fonction personnalisée VBA, qui sera appelée pour remplir
une case.

Malheureusement, je n'ai jamais réussi à faire ça...

Exemple simplifié :

Public Function Test(Valeur As Integer)
Test = CStr(Valeur + 1)
End Function

Puis j'écris Test(1) dans une case : ça devrait y afficher 2...

J'ai essayé de mettre la fonction dans la feuille ou dans le classeur...
J'ai toujours #NOM? dans la case, comme si la fonction n'était pas trouvée.

Il doit manquer quelque chose... mais quoi ?

Merci pour ton aide !


"michdenis" a écrit :


Bonjour Martinus,

Il y a cette fonction :

Par exemple, tu peux mettre dans une cellule :
Le chemin : c:Documents En A1
Le fichier : MonClasseur.xls En A2
Nom de la feuille : Feuil1 En A3
Adresse G1 En A4

Et dans la cellule, pour retrouver une valeur de G1
Tu peux inscrire : Ado(A1,A2,A3,A4) où tu peux inscrire
directement dans la fonction, les valeurs des paramètres
entre guillemets.

Dans la fonction suivante, tu dois redéfinir la chaîne de connexion
si ta base externe n'est pas Excel. À cette adresse, tu peux retrouver
les principales chaînes de connexion selon la base utilisée :
http://www.carlprothman.net/Default.aspx?tabid

Il faudra de plus que tu adaptes le texte de la requête.
A ) que tu remplaces les noms des 2 champs
B ) de même que le nom de ta base de données.

Ce n'est qu'un point de départ .... à toi d'adapter !
'---------------------------------------------
Function Ado(Chemin As String, Fichier As String, _
Feuille As String, Adresse As String) As Variant
Dim Conn As New ADODB.Connection
Dim Rst As New ADODB.Recordset
Dim Requete As String, File As String, X As String
If Right(Chemin, 1) <> "" Then Chemin = Chemin & ""
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Chemin & Fichier & ";" & _
"Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;"""


Requete = "SELECT Champ1, Champ2 From [" & Feuille & "$]" & Adresse
Rst.Open Requete, Conn, adOpenForwardOnly, adLockReadOnly

If IsNull(Rst(0).Value) Then
Ado = ""
ElseIf IsNumeric(Rst(0).Value) Then
Ado = CDbl(Rst(0).Value)
Else
Ado = Rst(0).Value
End If

Rst.Close: Conn.Close
Set Rst = Nothing: Set Conn = Nothing
End Function
'---------------------------------------------



"Martinus" a écrit dans le message de groupe de
discussion :
Bonjour,

Je sais créer une requête qui me permet de remplir une grille à partir d'une
base externe, mais j'ai souvent une demande un peu différente :

Dans une colonne j'ai une valeur, et je voudrais calculer une donnée qui en
découle à partir d'une requête externe en l'écrivant dans une case voisine.

Exemple simplissime : à partir d'une liste de quelques centaines de code
client dans une colonne, je veux afficher leur raison sociale que je trouve
dans une base de données externe, avec une requête SQL qui est fonction du
code client.

Il n'est pas possible de charger dans Excel les raisons sociales de tous les
clients de la base externe, il y en a beaucoup trop.

Bien sûr, je parviens à mes fins avec des lots DTS mais c'est un peu
compliqué, demande des droits importants, et oblige à créer des tables dans
la base de données.

Serait-ce possible sous Excel 2003 ou supérieur de le faire uniquement avec
une requête externe et un accès en lecture à la base de données ?

Merci pour vos suggestions !



Avatar
JB
Bonjour,


Recherchev(code;cheminTable;colonneRésultat;Faux)

JB
http://boisgontierjacques.free.fr/

On 7 oct, 10:10, Martinus wrote:
Bonjour,

Je sais créer une requête qui me permet de remplir une grille à par tir d'une
base externe, mais j'ai souvent une demande un peu différente :

Dans une colonne j'ai une valeur, et je voudrais calculer une donnée qu i en
découle à partir d'une requête externe en l'écrivant dans une cas e voisine.

Exemple simplissime : à partir d'une liste de quelques centaines de cod e
client dans une colonne, je veux afficher leur raison sociale que je trou ve
dans une base de données externe, avec une requête SQL qui est foncti on du
code client.

Il n'est pas possible de charger dans Excel les raisons sociales de tous les
clients de la base externe, il y en a beaucoup trop.

Bien sûr, je parviens à mes fins avec des lots DTS mais c'est un peu
compliqué, demande des droits importants, et oblige à créer des tab les dans
la base de données.

Serait-ce possible sous Excel 2003 ou supérieur de le faire uniquement avec
une requête externe et un accès en lecture à la base de données ?

Merci pour vos suggestions !


Avatar
michdenis
| Recherchev(code;cheminTable;colonneRésultat;Faux)

Es-tu certain de pouvoir utiliser ceci si ladite base de données
externe n'est pas un fichier Excel ?
Avatar
Martinus
Bonjour,
Merci pour ta réponse mais, comme je l'ai indiqué, je ne peux pas charger
250 000 clients dans une table Excel...
Cordialement,
Martinus


"JB" a écrit :

Bonjour,


Recherchev(code;cheminTable;colonneRésultat;Faux)

JB
http://boisgontierjacques.free.fr/

On 7 oct, 10:10, Martinus wrote:
> Bonjour,
>
> Je sais créer une requête qui me permet de remplir une grille à partir d'une
> base externe, mais j'ai souvent une demande un peu différente :
>
> Dans une colonne j'ai une valeur, et je voudrais calculer une donnée qui en
> découle à partir d'une requête externe en l'écrivant dans une case voisine.
>
> Exemple simplissime : à partir d'une liste de quelques centaines de code
> client dans une colonne, je veux afficher leur raison sociale que je trouve
> dans une base de données externe, avec une requête SQL qui est fonction du
> code client.
>
> Il n'est pas possible de charger dans Excel les raisons sociales de tous les
> clients de la base externe, il y en a beaucoup trop.
>
> Bien sûr, je parviens à mes fins avec des lots DTS mais c'est un peu
> compliqué, demande des droits importants, et oblige à créer des tables dans
> la base de données.
>
> Serait-ce possible sous Excel 2003 ou supérieur de le faire uniquement avec
> une requête externe et un accès en lecture à la base de données ?
>
> Merci pour vos suggestions !




Avatar
Martinus
Bien, merci, je pense que ça va être la solution.

Cependant, j'ai un problème bête : je n'ai pas accès aux types de ADODB,
donc il y a une erreur de compilation, et je ne sais pas ce qu'il faut faire
de particulier pour référencer ces déclarations.

J'ai d'autres modules dans d'autres feuilles qui utilisent bien ces types,
mais pas moyen de retrouver comment...

A+
Martinus




"michdenis" a écrit :

Une fonction personnalisée doit être dans un module "STANDARD"
pour être accessible dans une cellule d'une feuille d'un classeur sinon
tu obtiens #NOM? ­... le nom de la fonction n'est pas reconnu.



"Martinus" a écrit dans le message de groupe de
discussion :
Je crois que tu me mets sur la bonne piste !

Tu crées donc une fonction personnalisée VBA, qui sera appelée pour remplir
une case.

Malheureusement, je n'ai jamais réussi à faire ça...

Exemple simplifié :

Public Function Test(Valeur As Integer)
Test = CStr(Valeur + 1)
End Function

Puis j'écris Test(1) dans une case : ça devrait y afficher 2...

J'ai essayé de mettre la fonction dans la feuille ou dans le classeur...
J'ai toujours #NOM? dans la case, comme si la fonction n'était pas trouvée.

Il doit manquer quelque chose... mais quoi ?

Merci pour ton aide !


"michdenis" a écrit :

>
> Bonjour Martinus,
>
> Il y a cette fonction :
>
> Par exemple, tu peux mettre dans une cellule :
> Le chemin : c:Documents En A1
> Le fichier : MonClasseur.xls En A2
> Nom de la feuille : Feuil1 En A3
> Adresse G1 En A4
>
> Et dans la cellule, pour retrouver une valeur de G1
> Tu peux inscrire : Ado(A1,A2,A3,A4) où tu peux inscrire
> directement dans la fonction, les valeurs des paramètres
> entre guillemets.
>
> Dans la fonction suivante, tu dois redéfinir la chaîne de connexion
> si ta base externe n'est pas Excel. À cette adresse, tu peux retrouver
> les principales chaînes de connexion selon la base utilisée :
> http://www.carlprothman.net/Default.aspx?tabid
>
> Il faudra de plus que tu adaptes le texte de la requête.
> A ) que tu remplaces les noms des 2 champs
> B ) de même que le nom de ta base de données.
>
> Ce n'est qu'un point de départ .... à toi d'adapter !
> '---------------------------------------------
> Function Ado(Chemin As String, Fichier As String, _
> Feuille As String, Adresse As String) As Variant
> Dim Conn As New ADODB.Connection
> Dim Rst As New ADODB.Recordset
> Dim Requete As String, File As String, X As String
> If Right(Chemin, 1) <> "" Then Chemin = Chemin & ""
> Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
> "Data Source=" & Chemin & Fichier & ";" & _
> "Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;"""
>
>
> Requete = "SELECT Champ1, Champ2 From [" & Feuille & "$]" & Adresse
> Rst.Open Requete, Conn, adOpenForwardOnly, adLockReadOnly
>
> If IsNull(Rst(0).Value) Then
> Ado = ""
> ElseIf IsNumeric(Rst(0).Value) Then
> Ado = CDbl(Rst(0).Value)
> Else
> Ado = Rst(0).Value
> End If
>
> Rst.Close: Conn.Close
> Set Rst = Nothing: Set Conn = Nothing
> End Function
> '---------------------------------------------
>
>
>
> "Martinus" a écrit dans le message de groupe de
> discussion :
> Bonjour,
>
> Je sais créer une requête qui me permet de remplir une grille à partir d'une
> base externe, mais j'ai souvent une demande un peu différente :
>
> Dans une colonne j'ai une valeur, et je voudrais calculer une donnée qui en
> découle à partir d'une requête externe en l'écrivant dans une case voisine.
>
> Exemple simplissime : à partir d'une liste de quelques centaines de code
> client dans une colonne, je veux afficher leur raison sociale que je trouve
> dans une base de données externe, avec une requête SQL qui est fonction du
> code client.
>
> Il n'est pas possible de charger dans Excel les raisons sociales de tous les
> clients de la base externe, il y en a beaucoup trop.
>
> Bien sûr, je parviens à mes fins avec des lots DTS mais c'est un peu
> compliqué, demande des droits importants, et oblige à créer des tables dans
> la base de données.
>
> Serait-ce possible sous Excel 2003 ou supérieur de le faire uniquement avec
> une requête externe et un accès en lecture à la base de données ?
>
> Merci pour vos suggestions !
>


Avatar
Corto
Bonjour Martinus,
Il faut aller dans Outils -> Référence et ajouter une réfà ©rence à
Microsoft ActiveX Objects Library

Corto

Martinus a écrit :
Bien, merci, je pense que ça va être la solution.

Cependant, j'ai un problème bête : je n'ai pas accès aux types de ADODB,
donc il y a une erreur de compilation, et je ne sais pas ce qu'il faut faire
de particulier pour référencer ces déclarations.

J'ai d'autres modules dans d'autres feuilles qui utilisent bien ces typ es,
mais pas moyen de retrouver comment...

A+
Martinus




"michdenis" a écrit :


Une fonction personnalisée doit être dans un module "STANDAR D"
pour être accessible dans une cellule d'une feuille d'un classeur sinon
tu obtiens #NOM? ­... le nom de la fonction n'est pas reconnu.



"Martinus" a écrit dans le m essage de groupe de
discussion :
Je crois que tu me mets sur la bonne piste !

Tu crées donc une fonction personnalisée VBA, qui sera appel ée pour remplir
une case.

Malheureusement, je n'ai jamais réussi à faire ça...

Exemple simplifié :

Public Function Test(Valeur As Integer)
Test = CStr(Valeur + 1)
End Function

Puis j'écris Test(1) dans une case : ça devrait y afficher 2 ...

J'ai essayé de mettre la fonction dans la feuille ou dans le clas seur...
J'ai toujours #NOM? dans la case, comme si la fonction n'était pa s trouvée.

Il doit manquer quelque chose... mais quoi ?

Merci pour ton aide !


"michdenis" a écrit :


Bonjour Martinus,

Il y a cette fonction :

Par exemple, tu peux mettre dans une cellule :
Le chemin : c:Documents En A1
Le fichier : MonClasseur.xls En A2
Nom de la feuille : Feuil1 En A3
Adresse G1 En A4

Et dans la cellule, pour retrouver une valeur de G1
Tu peux inscrire : Ado(A1,A2,A3,A4) où tu peux inscrire
directement dans la fonction, les valeurs des paramètres
entre guillemets.

Dans la fonction suivante, tu dois redéfinir la chaîne de c onnexion
si ta base externe n'est pas Excel. À cette adresse, tu peux ret rouver
les principales chaînes de connexion selon la base utilisée :
http://www.carlprothman.net/Default.aspx?tabid

Il faudra de plus que tu adaptes le texte de la requête.
A ) que tu remplaces les noms des 2 champs
B ) de même que le nom de ta base de données.

Ce n'est qu'un point de départ .... à toi d'adapter !
'---------------------------------------------
Function Ado(Chemin As String, Fichier As String, _
Feuille As String, Adresse As String) As Variant
Dim Conn As New ADODB.Connection
Dim Rst As New ADODB.Recordset
Dim Requete As String, File As String, X As String
If Right(Chemin, 1) <> "" Then Chemin = Chemin & ""
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Chemin & Fichier & ";" & _
"Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;"""


Requete = "SELECT Champ1, Champ2 From [" & Feuille & "$]" & Adresse
Rst.Open Requete, Conn, adOpenForwardOnly, adLockReadOnly

If IsNull(Rst(0).Value) Then
Ado = ""
ElseIf IsNumeric(Rst(0).Value) Then
Ado = CDbl(Rst(0).Value)
Else
Ado = Rst(0).Value
End If

Rst.Close: Conn.Close
Set Rst = Nothing: Set Conn = Nothing
End Function
'---------------------------------------------



"Martinus" a écrit dans le message de groupe de
discussion :
Bonjour,

Je sais créer une requête qui me permet de remplir une gril le à partir d'une
base externe, mais j'ai souvent une demande un peu différente :

Dans une colonne j'ai une valeur, et je voudrais calculer une donnà ©e qui en
découle à partir d'une requête externe en l'écriv ant dans une case voisine.

Exemple simplissime : à partir d'une liste de quelques centaines de code
client dans une colonne, je veux afficher leur raison sociale que je trouve
dans une base de données externe, avec une requête SQL qui est fonction du
code client.

Il n'est pas possible de charger dans Excel les raisons sociales de t ous les
clients de la base externe, il y en a beaucoup trop.

Bien sûr, je parviens à mes fins avec des lots DTS mais c'e st un peu
compliqué, demande des droits importants, et oblige à crà ©er des tables dans
la base de données.

Serait-ce possible sous Excel 2003 ou supérieur de le faire uniq uement avec
une requête externe et un accès en lecture à la base d e données ?

Merci pour vos suggestions !








Avatar
JB
Bonjour,

Dans le fichier, il y a un exemple de fonction de recherche avec
Access:

http://boisgontierjacques.free.fr/fichiers/jb-excelaccess.zip

Function RecherchevAccess(ChampRecherche, valeurRecherche,
champRetour, tbl, base)
'Cocher DAO 3.6 dans Outils/Référence
Dim bd As dao.Database
Dim rs As dao.Recordset
rep_appli = ActiveWorkbook.Path
fichier = rep_appli & "" & base
Set bd = OpenDatabase(fichier)
Sql = "Select " & champRetour & " FROM " & tbl & " Where " & _
ChampRecherche & "='" & valeurRecherche & "'"
Set rs = bd.OpenRecordset(Sql)
RecherchevAccess = rs(champRetour)
rs.Close
bd.Close
End Function


JB

On 12 oct, 10:59, Martinus wrote:
Bonjour,
Merci pour ta réponse mais, comme je l'ai indiqué, je ne peux pas cha rger
250 000 clients dans une table Excel...
Cordialement,
Martinus

"JB" a écrit :



> Bonjour,

> Recherchev(code;cheminTable;colonneRésultat;Faux)

> JB
>http://boisgontierjacques.free.fr/

> On 7 oct, 10:10, Martinus wrote:
> > Bonjour,

> > Je sais créer une requête qui me permet de remplir une grille à partir d'une
> > base externe, mais j'ai souvent une demande un peu différente :

> > Dans une colonne j'ai une valeur, et je voudrais calculer une donné e qui en
> > découle à partir d'une requête externe en l'écrivant dans une case voisine.

> > Exemple simplissime : à partir d'une liste de quelques centaines de code
> > client dans une colonne, je veux afficher leur raison sociale que je trouve
> > dans une base de données externe, avec une requête SQL qui est fo nction du
> > code client.

> > Il n'est pas possible de charger dans Excel les raisons sociales de t ous les
> > clients de la base externe, il y en a beaucoup trop.

> > Bien sûr, je parviens à mes fins avec des lots DTS mais c'est un peu
> > compliqué, demande des droits importants, et oblige à créer des tables dans
> > la base de données.

> > Serait-ce possible sous Excel 2003 ou supérieur de le faire uniquem ent avec
> > une requête externe et un accès en lecture à la base de donné es ?

> > Merci pour vos suggestions !- Masquer le texte des messages précé dents -

- Afficher le texte des messages précédents -