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

remplacer les valeurs entre "|" d'un champ par d'autres

7 réponses
Avatar
cedcha
Bonjour,

J'ai deux tables :
- produits
- couleurs

La table "couleurs" contient deux champs :
- codeCouleur (Id Unique)
- libelle

La table produits contient un champ "codesdesCouleurs".

Dans ce champ on trouve les "codeCouleurs" de la table "couleurs" séparés
par des "|" car il y en a plusieurs (peut-être aurais-je du faire autrement
mais c'est la seule solution que j'ai trouvée à l'époque) associés à un même
produit.

Ma problèmatique :
Je souhaite créer une requête qui reprend les champs de la table produit
auxquels je souhaite ajouter un champ "libellesCouleurs" dans lequel les
"codesCouleurs" entre "|" du champs "codesdesCouleurs" sont remplacés par
leur "libelle" de la table "couleurs".

Ma question :
Comment procèder ?

Merci d'avance pour votre aide.
Cédric.

7 réponses

Avatar
Raymond [mvp]
Bonjour,

sans vouloir m'immiscer dans ton organisation, je pense que tu ne changeras
pas le problème et tu vas te retrouver avec une couleur au lieu d'un code
couleur. tu vas aussi limiter le nombre de couleurs par article comme avant.
il serait peut-être préférable de créer une table dans laquelle tu mémorises
le code article et le code couleur( ou couleur) dans chaque enregistrement
avec une relation 1:n avec la table article. Ainsi tu n'es plus limité dans
le nombre de couleurs et tu n'as pas besoin de ta liste de couleurs dans la
table article.
est-ce faisable dans ton organisation ?

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"cedcha" a écrit dans le message de news:

Bonjour,

J'ai deux tables :
- produits
- couleurs

La table "couleurs" contient deux champs :
- codeCouleur (Id Unique)
- libelle

La table produits contient un champ "codesdesCouleurs".

Dans ce champ on trouve les "codeCouleurs" de la table "couleurs" séparés
par des "|" car il y en a plusieurs (peut-être aurais-je du faire
autrement
mais c'est la seule solution que j'ai trouvée à l'époque) associés à un
même
produit.

Ma problèmatique :
Je souhaite créer une requête qui reprend les champs de la table produit
auxquels je souhaite ajouter un champ "libellesCouleurs" dans lequel les
"codesCouleurs" entre "|" du champs "codesdesCouleurs" sont remplacés par
leur "libelle" de la table "couleurs".

Ma question :
Comment procèder ?

Merci d'avance pour votre aide.
Cédric.


Avatar
cedcha
Bonjour,

Merci pour ta réponse.

Hélas, non. En fait la requête doit être exporter vers un serveur de bdd qui
fait le lien avec des pages web. Je préfère donc ne rien casser si possible.

En fait la requête que je veux créer doit reprendre les codes couleurs
séparés par des "|" et les libellés correspondants séparés par des "|". Ex:

Codes couleurs | Libelles
-----------------------------
BL|B|R|O | Bleu|Blanc|Rouge|Orange
B|C|M|R | Blanc|Cyan|Magenta|Rouge

Est-ce envisageable ?

Bien à toi,

Cédric.


Bonjour,

sans vouloir m'immiscer dans ton organisation, je pense que tu ne changeras
pas le problème et tu vas te retrouver avec une couleur au lieu d'un code
couleur. tu vas aussi limiter le nombre de couleurs par article comme avant.
il serait peut-être préférable de créer une table dans laquelle tu mémorises
le code article et le code couleur( ou couleur) dans chaque enregistrement
avec une relation 1:n avec la table article. Ainsi tu n'es plus limité dans
le nombre de couleurs et tu n'as pas besoin de ta liste de couleurs dans la
table article.
est-ce faisable dans ton organisation ?

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"cedcha" a écrit dans le message de news:

Bonjour,

J'ai deux tables :
- produits
- couleurs

La table "couleurs" contient deux champs :
- codeCouleur (Id Unique)
- libelle

La table produits contient un champ "codesdesCouleurs".

Dans ce champ on trouve les "codeCouleurs" de la table "couleurs" séparés
par des "|" car il y en a plusieurs (peut-être aurais-je du faire
autrement
mais c'est la seule solution que j'ai trouvée à l'époque) associés à un
même
produit.

Ma problèmatique :
Je souhaite créer une requête qui reprend les champs de la table produit
auxquels je souhaite ajouter un champ "libellesCouleurs" dans lequel les
"codesCouleurs" entre "|" du champs "codesdesCouleurs" sont remplacés par
leur "libelle" de la table "couleurs".

Ma question :
Comment procèder ?

Merci d'avance pour votre aide.
Cédric.







Avatar
Raymond [mvp]
Bien sûr c'est faisable, mais en code vba appelé dans la requête mais pas en
requête elle-même car les relations seront difficiles à établir.
il faut que tu fasses une fonction public placée dans un module standard, à
laquelle tu passes la liste des codes en paramètres et te retourne la liste
des couleurs. Dans ta fonction, tu "split" les codes grâce au séparateur et
tu vas lire la couleur pour chaque code par un Dlookup que tu places dans un
tableau. ensuite tu fais un join du tableau dans la fonction et tu sors de
la fonction.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"cedcha" a écrit dans le message de news:

Bonjour,

Merci pour ta réponse.

Hélas, non. En fait la requête doit être exporter vers un serveur de bdd
qui
fait le lien avec des pages web. Je préfère donc ne rien casser si
possible.

En fait la requête que je veux créer doit reprendre les codes couleurs
séparés par des "|" et les libellés correspondants séparés par des "|".
Ex:

Codes couleurs | Libelles
-----------------------------
BL|B|R|O | Bleu|Blanc|Rouge|Orange
B|C|M|R | Blanc|Cyan|Magenta|Rouge

Est-ce envisageable ?

Bien à toi,

Cédric.


Avatar
Jessy Sempere [MVP]
En clair, le code qui suit devrait te convenir :
(j'aime ce genre de code, ça fait réfléchir... ;-))

*******************************************************
Function CodeCouleur(strCode As String)

Dim p%, i%
Dim strId As String

If IsNull(strCode) Then
CodeCouleur = Null
Else
p = InStr(1, strCode, "|")
If p = 0 Then
CodeCouleur = DLookup("libelle", "couleurs", _
"codecouleur = '" & strCode & "'")
Else
strId = left(strCode, p - 1)
CodeCouleur = DLookup("libelle", "couleurs", _
"codecouleur = '" & strId & "'")
Do While p > 0
i = InStr(p + 1, strCode, "|")
If i = 0 Then
strId = Mid(strCode, p + 1)
Else
strId = Mid(strCode, p + 1, i - (p + 1))
End If
CodeCouleur = CodeCouleur & "|" & DLookup("libelle", _
"couleurs", "codecouleur = '" & strId & "'")
p = InStr(p + 1, strCode, "|")
Loop
End If
End If
End Function
*******************************************************

--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Raymond [mvp]" a écrit dans le message news:

Bien sûr c'est faisable, mais en code vba appelé dans la requête mais pas en
requête elle-même car les relations seront difficiles à établir.
il faut que tu fasses une fonction public placée dans un module standard, à
laquelle tu passes la liste des codes en paramètres et te retourne la liste
des couleurs. Dans ta fonction, tu "split" les codes grâce au séparateur et
tu vas lire la couleur pour chaque code par un Dlookup que tu places dans un
tableau. ensuite tu fais un join du tableau dans la fonction et tu sors de
la fonction.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"cedcha" a écrit dans le message de news:

Bonjour,

Merci pour ta réponse.

Hélas, non. En fait la requête doit être exporter vers un serveur de bdd
qui
fait le lien avec des pages web. Je préfère donc ne rien casser si
possible.

En fait la requête que je veux créer doit reprendre les codes couleurs
séparés par des "|" et les libellés correspondants séparés par des "|".
Ex:

Codes couleurs | Libelles
-----------------------------
BL|B|R|O | Bleu|Blanc|Rouge|Orange
B|C|M|R | Blanc|Cyan|Magenta|Rouge

Est-ce envisageable ?

Bien à toi,

Cédric.







Avatar
cedcha
Merci à tous les deux pour votre aide.

Etant donné que je ne suis pas un initié en la matière, comment puis-je
faire pour intégrer ce code ? c'est-à-dire comment appeler depuis la requête
le module que j'ai nommé "moduleCouleurs".

Cédric.


En clair, le code qui suit devrait te convenir :
(j'aime ce genre de code, ça fait réfléchir... ;-))

*******************************************************
Function CodeCouleur(strCode As String)

Dim p%, i%
Dim strId As String

If IsNull(strCode) Then
CodeCouleur = Null
Else
p = InStr(1, strCode, "|")
If p = 0 Then
CodeCouleur = DLookup("libelle", "couleurs", _
"codecouleur = '" & strCode & "'")
Else
strId = left(strCode, p - 1)
CodeCouleur = DLookup("libelle", "couleurs", _
"codecouleur = '" & strId & "'")
Do While p > 0
i = InStr(p + 1, strCode, "|")
If i = 0 Then
strId = Mid(strCode, p + 1)
Else
strId = Mid(strCode, p + 1, i - (p + 1))
End If
CodeCouleur = CodeCouleur & "|" & DLookup("libelle", _
"couleurs", "codecouleur = '" & strId & "'")
p = InStr(p + 1, strCode, "|")
Loop
End If
End If
End Function
*******************************************************

--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Raymond [mvp]" a écrit dans le message news:

Bien sûr c'est faisable, mais en code vba appelé dans la requête mais pas en
requête elle-même car les relations seront difficiles à établir.
il faut que tu fasses une fonction public placée dans un module standard, à
laquelle tu passes la liste des codes en paramètres et te retourne la liste
des couleurs. Dans ta fonction, tu "split" les codes grâce au séparateur et
tu vas lire la couleur pour chaque code par un Dlookup que tu places dans un
tableau. ensuite tu fais un join du tableau dans la fonction et tu sors de
la fonction.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"cedcha" a écrit dans le message de news:

Bonjour,

Merci pour ta réponse.

Hélas, non. En fait la requête doit être exporter vers un serveur de bdd
qui
fait le lien avec des pages web. Je préfère donc ne rien casser si
possible.

En fait la requête que je veux créer doit reprendre les codes couleurs
séparés par des "|" et les libellés correspondants séparés par des "|".
Ex:

Codes couleurs | Libelles
-----------------------------
BL|B|R|O | Bleu|Blanc|Rouge|Orange
B|C|M|R | Blanc|Cyan|Magenta|Rouge

Est-ce envisageable ?

Bien à toi,

Cédric.












Avatar
Jessy Sempere [MVP]
Bonjour

Tu copies le code que je t'ai donné dans ton module ensuite,
il te suffit de faire une requête qui utilise cette fonction, genre

Select Champ1, Champ2, CodeCouleur([ChampCode]) as Couleur
From TaTable;

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"cedcha" a écrit dans le message news:

Merci à tous les deux pour votre aide.

Etant donné que je ne suis pas un initié en la matière, comment puis-je
faire pour intégrer ce code ? c'est-à-dire comment appeler depuis la requête
le module que j'ai nommé "moduleCouleurs".

Cédric.


En clair, le code qui suit devrait te convenir :
(j'aime ce genre de code, ça fait réfléchir... ;-))

*******************************************************
Function CodeCouleur(strCode As String)

Dim p%, i%
Dim strId As String

If IsNull(strCode) Then
CodeCouleur = Null
Else
p = InStr(1, strCode, "|")
If p = 0 Then
CodeCouleur = DLookup("libelle", "couleurs", _
"codecouleur = '" & strCode & "'")
Else
strId = left(strCode, p - 1)
CodeCouleur = DLookup("libelle", "couleurs", _
"codecouleur = '" & strId & "'")
Do While p > 0
i = InStr(p + 1, strCode, "|")
If i = 0 Then
strId = Mid(strCode, p + 1)
Else
strId = Mid(strCode, p + 1, i - (p + 1))
End If
CodeCouleur = CodeCouleur & "|" & DLookup("libelle", _
"couleurs", "codecouleur = '" & strId & "'")
p = InStr(p + 1, strCode, "|")
Loop
End If
End If
End Function
*******************************************************

--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Raymond [mvp]" a écrit dans le message news:

Bien sûr c'est faisable, mais en code vba appelé dans la requête mais pas en
requête elle-même car les relations seront difficiles à établir.
il faut que tu fasses une fonction public placée dans un module standard, à
laquelle tu passes la liste des codes en paramètres et te retourne la liste
des couleurs. Dans ta fonction, tu "split" les codes grâce au séparateur et
tu vas lire la couleur pour chaque code par un Dlookup que tu places dans un
tableau. ensuite tu fais un join du tableau dans la fonction et tu sors de
la fonction.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"cedcha" a écrit dans le message de news:

Bonjour,

Merci pour ta réponse.

Hélas, non. En fait la requête doit être exporter vers un serveur de bdd
qui
fait le lien avec des pages web. Je préfère donc ne rien casser si
possible.

En fait la requête que je veux créer doit reprendre les codes couleurs
séparés par des "|" et les libellés correspondants séparés par des "|".
Ex:

Codes couleurs | Libelles
-----------------------------
BL|B|R|O | Bleu|Blanc|Rouge|Orange
B|C|M|R | Blanc|Cyan|Magenta|Rouge

Est-ce envisageable ?

Bien à toi,

Cédric.














Avatar
cedcha
Bonjour,

Super !!! Cela fonctionne !!! Merci, merci !!!!

J'ai juste deux petits soucis... Quand strCode est vide il me met "#erreur"
dans le résultat de la requête. D'autre part il y a des "quotes" dans
certains codes couleurs ce qui me créé un plantage. Comment puis-je éviter ce
problème ?

Après ça, cela devrait être bon.

Bien à toi,

Cédric.


Bonjour

Tu copies le code que je t'ai donné dans ton module ensuite,
il te suffit de faire une requête qui utilise cette fonction, genre

Select Champ1, Champ2, CodeCouleur([ChampCode]) as Couleur
From TaTable;

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"cedcha" a écrit dans le message news:

Merci à tous les deux pour votre aide.

Etant donné que je ne suis pas un initié en la matière, comment puis-je
faire pour intégrer ce code ? c'est-à-dire comment appeler depuis la requête
le module que j'ai nommé "moduleCouleurs".

Cédric.


En clair, le code qui suit devrait te convenir :
(j'aime ce genre de code, ça fait réfléchir... ;-))

*******************************************************
Function CodeCouleur(strCode As String)

Dim p%, i%
Dim strId As String

If IsNull(strCode) Then
CodeCouleur = Null
Else
p = InStr(1, strCode, "|")
If p = 0 Then
CodeCouleur = DLookup("libelle", "couleurs", _
"codecouleur = '" & strCode & "'")
Else
strId = left(strCode, p - 1)
CodeCouleur = DLookup("libelle", "couleurs", _
"codecouleur = '" & strId & "'")
Do While p > 0
i = InStr(p + 1, strCode, "|")
If i = 0 Then
strId = Mid(strCode, p + 1)
Else
strId = Mid(strCode, p + 1, i - (p + 1))
End If
CodeCouleur = CodeCouleur & "|" & DLookup("libelle", _
"couleurs", "codecouleur = '" & strId & "'")
p = InStr(p + 1, strCode, "|")
Loop
End If
End If
End Function
*******************************************************

--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Raymond [mvp]" a écrit dans le message news:

Bien sûr c'est faisable, mais en code vba appelé dans la requête mais pas en
requête elle-même car les relations seront difficiles à établir.
il faut que tu fasses une fonction public placée dans un module standard, à
laquelle tu passes la liste des codes en paramètres et te retourne la liste
des couleurs. Dans ta fonction, tu "split" les codes grâce au séparateur et
tu vas lire la couleur pour chaque code par un Dlookup que tu places dans un
tableau. ensuite tu fais un join du tableau dans la fonction et tu sors de
la fonction.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"cedcha" a écrit dans le message de news:

Bonjour,

Merci pour ta réponse.

Hélas, non. En fait la requête doit être exporter vers un serveur de bdd
qui
fait le lien avec des pages web. Je préfère donc ne rien casser si
possible.

En fait la requête que je veux créer doit reprendre les codes couleurs
séparés par des "|" et les libellés correspondants séparés par des "|".
Ex:

Codes couleurs | Libelles
-----------------------------
BL|B|R|O | Bleu|Blanc|Rouge|Orange
B|C|M|R | Blanc|Cyan|Magenta|Rouge

Est-ce envisageable ?

Bien à toi,

Cédric.