Dlookup dans une requête

Le
Guy
Bonjour ,

Je n'arrive pas a comprendre la fonction Dlookup

Dans une requete j'ai des champs :

N01 n02 N03 etc N 25 qui contiennent une seule lettre comme :

G U Y vide vide etc.

de plus je possede une table avec qui me rensigne sur la valeur numérique
de chaque lettre exemple:

Champs Alpha et Valeur

A= 1 B=2 C=4 D=3 E=3 F% ETC

Comment dans une requete rajouter un champ du genre ValN01: dlookup .pour
récuper la bonne valeur.

J'ai essayer divers choses je ne recupere que la premiere valeur de ma table


--
Amicalement et merci
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Eric
Le #18920691
Bonjour Guy,

Je ne réponds pas directement au DLookUp()
Je regardais ton autre post 'Allouer une valeur à une lettre ALPHA ..."
et je me posais la question suivante : Est-il nécessaire de retourner la
valeur de chaque lettre ou la somme des valeurs des lettres composant la
chaîne serait suffisante ? Car si la somme suffit à ton problème, je
peux te donner une fonction.

Guy a écrit :
Bonjour ,

Je n'arrive pas a comprendre la fonction Dlookup

Dans une requete j'ai des champs :

N01 n02 N03 etc... N 25 qui contiennent une seule lettre comme :

G U Y vide vide etc....

de plus je possede une table avec qui me rensigne sur la valeur numérique
de chaque lettre exemple:

Champs Alpha et Valeur

A= 1 B=2 C=4 D=3 E=3 F% ETC

Comment dans une requete rajouter un champ du genre ValN01: dlookup ....pour
récuper la bonne valeur.

J'ai essayer divers choses je ne recupere que la premiere valeur de ma table





--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Guy
Le #18920801
merci, Eric

je doit simplement additionner la somme des Valeurs exemple :

G U Y = 10 9 50 total 69 ensuite 69 devient 6+9 

B R U S S O N = 2 11 9 20 20 8 26 total 96 puis 96 devient 9 +6 

Afin de retrouver les arcanes du tarots

je suis ouvert a toutes les propositions
--
Amicalement et merci


"Eric" a écrit :

Bonjour Guy,

Je ne réponds pas directement au DLookUp()
Je regardais ton autre post 'Allouer une valeur à une lettre ALPHA ..."
et je me posais la question suivante : Est-il nécessaire de retourner la
valeur de chaque lettre ou la somme des valeurs des lettres composant la
chaîne serait suffisante ? Car si la somme suffit à ton problème, je
peux te donner une fonction.

Guy a écrit :
> Bonjour ,
>
> Je n'arrive pas a comprendre la fonction Dlookup
>
> Dans une requete j'ai des champs :
>
> N01 n02 N03 etc... N 25 qui contiennent une seule lettre comme :
>
> G U Y vide vide etc....
>
> de plus je possede une table avec qui me rensigne sur la valeur numérique
> de chaque lettre exemple:
>
> Champs Alpha et Valeur
>
> A= 1 B=2 C=4 D=3 E=3 F% ETC
>
> Comment dans une requete rajouter un champ du genre ValN01: dlookup ....pour
> récuper la bonne valeur.
>
> J'ai essayer divers choses je ne recupere que la premiere valeur de ma table
>
>

--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr



Eric
Le #18920951
re,

Il faut que tu aies expurgé toutes les lettres accentuées, les signes
diacritiques ... des champs à traiter.

Copies la fonction ci-dessous dans un module de portée globale.

Function fnValMot(UneChaine) As Integer
'Charger la référence Microsoft DAO 3.x Object Library
'au Menu Outils | Références
If IsNull(UneChaine) Then Exit Function
Dim tLettre(), i As Integer, j As Integer
Dim longueur As Integer, car As String
Dim rst As DAO.Recordset, cpt as integer
longueur = Len(UneChaine)
Set rst = CurrentDb.OpenRecordset("LaTableLettreValeur")
tLettre = rst.GetRows(rst.RecordCount)
Set rst = Nothing
For i = 1 To longueur
car = Mid(UneChaine, i, 1)
For j = 0 To UBound(tLettre, 2)
If car = tLettre(0, j) Then
cpt = cpt + tLettre(1, j): Exit For
End If
Next j
Next i
fnValMot = cpt
End Function

Tu peux ensuite utiliser cette fonction dans une requête
fnValMot([LeNom]) te retournera le total des valeurs des lettres du
champ LeNom
Dans le code, tu doit adapter sur la ligne
Set rst = CurrentDb.OpenRecordset("LaTableLettreValeur")
le vrai nom de ta table qui contient les lettres et les valeurs de ces
lettres.





Guy a écrit :
merci, Eric

je doit simplement additionner la somme des Valeurs exemple :

G U Y = 10 9 50 total 69 ensuite 69 devient 6+9 

B R U S S O N = 2 11 9 20 20 8 26 total 96 puis 96 devient 9 +6 

Afin de retrouver les arcanes du tarots

je suis ouvert a toutes les propositions



--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Eric
Le #18920931
.../...

Eric a écrit :
re,

Il faut que tu aies expurgé toutes les lettres accentuées, les signes
diacritiques ... des champs à traiter.



Pas nécessaire si les Majuscules accentuées, ... existent dans la table
des lettres & valeurs

--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Guy
Le #18921061
Merci Eric je vais pouvoir travailler

Je fait la saisie moi même et en tarologie européenne il ni a pas d'accents
--
Amicalement et merci


"Eric" a écrit :

..../...

Eric a écrit :
> re,
>
> Il faut que tu aies expurgé toutes les lettres accentuées, les signes
> diacritiques ... des champs à traiter.
>
Pas nécessaire si les Majuscules accentuées, ... existent dans la table
des lettres & valeurs

--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr



Eric
Le #18921051
.../...

et celle-ci pour faire la somme des chiffres de la valeur retournée par
fnValMot(UneChaine)

Function fnTotalValMot(UneChaine) As Integer
Dim nb As String, i As Integer
nb = CStr(fnValMot(UneChaine))
For i = 1 To Len(nb)
fnTotalValMot = fnTotalValMot + Val(Mid(nb, i, 1))
Next i
End Function

Dans la requête tu mets directement :
fnTotalValMot([LeNom])

car cette fonction fait appel à la précédente.

PS : Access ne faisant pas la différence Majuscule/Minuscule par défaut,
tu n'es pas obligé de changer la casse tes chaînes.

Eric a écrit :
re,

Copies la fonction ci-dessous dans un module de portée globale.

Function fnValMot(UneChaine) As Integer
'Charger la référence Microsoft DAO 3.x Object Library
'au Menu Outils | Références
If IsNull(UneChaine) Then Exit Function
Dim tLettre(), i As Integer, j As Integer
Dim longueur As Integer, car As String
Dim rst As DAO.Recordset, cpt as integer
longueur = Len(UneChaine)
Set rst = CurrentDb.OpenRecordset("LaTableLettreValeur")
tLettre = rst.GetRows(rst.RecordCount)
Set rst = Nothing
For i = 1 To longueur
car = Mid(UneChaine, i, 1)
For j = 0 To UBound(tLettre, 2)
If car = tLettre(0, j) Then
cpt = cpt + tLettre(1, j): Exit For
End If
Next j
Next i
fnValMot = cpt
End Function

Tu peux ensuite utiliser cette fonction dans une requête
fnValMot([LeNom]) te retournera le total des valeurs des lettres du
champ LeNom
Dans le code, tu doit adapter sur la ligne
Set rst = CurrentDb.OpenRecordset("LaTableLettreValeur")
le vrai nom de ta table qui contient les lettres et les valeurs de ces
lettres.





Guy a écrit :
merci, Eric

je doit simplement additionner la somme des Valeurs exemple :

G U Y = 10 9 50 total 69 ensuite 69 devient 6+9 

B R U S S O N = 2 11 9 20 20 8 26 total 96 puis 96 devient 9 +6 
Afin de retrouver les arcanes du tarots
je suis ouvert a toutes les propositions






--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Castours
Le #18924131
Bonjour
J'ai utilisé DlooKup dans une procedure qui rechercher un N°client si ce
client depassait une somme autorisée.
Si oui j'ai un message d'avertisement comme quoi l'encours est dépassé et
cela calcul la valeur du depassement. On peut plus effectuer d'autre achat.
Maintenant dans une requete je ne sais pas.
Guy

"Guy" <André> a écrit dans le message de news:

Bonjour ,

Je n'arrive pas a comprendre la fonction Dlookup

Dans une requete j'ai des champs :

N01 n02 N03 etc... N 25 qui contiennent une seule lettre comme :

G U Y vide vide etc....

de plus je possede une table avec qui me rensigne sur la valeur numérique
de chaque lettre exemple:

Champs Alpha et Valeur

A= 1 B=2 C=4 D=3 E=3 F% ETC

Comment dans une requete rajouter un champ du genre ValN01: dlookup
....pour
récuper la bonne valeur.

J'ai essayer divers choses je ne recupere que la premiere valeur de ma
table


--
Amicalement et merci



Brusson Guy
Le #18925121
Un grand Merci a toi Eric grâce à toi j'ai simplifier et cela fonctionne

guy

"Eric" a écrit :

..../...

et celle-ci pour faire la somme des chiffres de la valeur retournée par
fnValMot(UneChaine)

Function fnTotalValMot(UneChaine) As Integer
Dim nb As String, i As Integer
nb = CStr(fnValMot(UneChaine))
For i = 1 To Len(nb)
fnTotalValMot = fnTotalValMot + Val(Mid(nb, i, 1))
Next i
End Function

Dans la requête tu mets directement :
fnTotalValMot([LeNom])

car cette fonction fait appel à la précédente.

PS : Access ne faisant pas la différence Majuscule/Minuscule par défaut,
tu n'es pas obligé de changer la casse tes chaînes.

Eric a écrit :
> re,
>
> Copies la fonction ci-dessous dans un module de portée globale.
>
> Function fnValMot(UneChaine) As Integer
> 'Charger la référence Microsoft DAO 3.x Object Library
> 'au Menu Outils | Références
> If IsNull(UneChaine) Then Exit Function
> Dim tLettre(), i As Integer, j As Integer
> Dim longueur As Integer, car As String
> Dim rst As DAO.Recordset, cpt as integer
> longueur = Len(UneChaine)
> Set rst = CurrentDb.OpenRecordset("LaTableLettreValeur")
> tLettre = rst.GetRows(rst.RecordCount)
> Set rst = Nothing
> For i = 1 To longueur
> car = Mid(UneChaine, i, 1)
> For j = 0 To UBound(tLettre, 2)
> If car = tLettre(0, j) Then
> cpt = cpt + tLettre(1, j): Exit For
> End If
> Next j
> Next i
> fnValMot = cpt
> End Function
>
> Tu peux ensuite utiliser cette fonction dans une requête
> fnValMot([LeNom]) te retournera le total des valeurs des lettres du
> champ LeNom
> Dans le code, tu doit adapter sur la ligne
> Set rst = CurrentDb.OpenRecordset("LaTableLettreValeur")
> le vrai nom de ta table qui contient les lettres et les valeurs de ces
> lettres.
>
>
>
>
>
> Guy a écrit :
>> merci, Eric
>>
>> je doit simplement additionner la somme des Valeurs exemple :
>>
>> G U Y = 10 9 50 total 69 ensuite 69 devient 6+9 
>>
>> B R U S S O N = 2 11 9 20 20 8 26 total 96 puis 96 devient 9 +6 
>> Afin de retrouver les arcanes du tarots
>> je suis ouvert a toutes les propositions
>

--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr



Eric
Le #18926081
Bonjour Guy,

Il faudrait mettre cette ligne en début de fonction dans le cas où
l'argument passé est Null.

Function fnTotalValMot(UneChaine) As Integer
If IsNull(UneChaine) then Exit Function ' <--------
' Le reste inchangé
...
End Function

Bonne continuation

Brusson Guy a écrit :
Un grand Merci a toi Eric grâce à toi j'ai simplifier et cela fonctionne

guy

"Eric" a écrit :

..../...

et celle-ci pour faire la somme des chiffres de la valeur retournée par
fnValMot(UneChaine)

Function fnTotalValMot(UneChaine) As Integer
Dim nb As String, i As Integer
nb = CStr(fnValMot(UneChaine))
For i = 1 To Len(nb)
fnTotalValMot = fnTotalValMot + Val(Mid(nb, i, 1))
Next i
End Function

Dans la requête tu mets directement :
fnTotalValMot([LeNom])

car cette fonction fait appel à la précédente.






--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Publicité
Poster une réponse
Anonyme