Sélectionner le troisième mot séparé par des espaces dans un champs texte

Le
eoliusone
Bonjour à toutes et tous,
un petit problème pour une grande solution !

j'ai un champ article en texte qui comporte plusieurs infos, ex( golf 6 cabriolet 5 portes bleu clair diesel ). Je souhaite lors d'une requète n'afficher que le troisième mots en partant de la gauche.

Petit plus : est-il éventuellement possible, dans un second cas, de spécifier que le mot doit avoir au minimum 5 caractères.

Merci d'avance pour cette info plus qu'utile.

Bien à vous

Eoliusone
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Fabien
Le #17321521
eoliusone a écrit :
Bonjour à toutes et tous,
un petit problème pour une grande solution !

j'ai un champ article en texte qui comporte plusieurs infos, ex( golf 6
cabriolet 5 portes bleu clair diesel ). Je souhaite lors d'une requète
n'afficher que le troisième mots en partant de la gauche.

Petit plus : est-il éventuellement possible, dans un second cas, de spécifier
que le mot doit avoir au minimum 5 caractères.

Merci d'avance pour cette info plus qu'utile.

Bien à vous

Eoliusone


Bonjour
Tu peux utiliser une fonction externe que tu enregistre dans un module
Public function n_ieme_mot(lachaine as string, Rang_mot as integer) as
string
Dim vtab as variant
Vtab=split(lachaine,chr(32)) ' On converti la chaine en un tableau. Le
Blanc (chr(32)) permet d'indiquer ce qui sépare les mots
if ubound(vtab)<rang_mot then 'S'il y a moins d'éléments dans le
tableau que le rang du mot recherché
N_ieme_mot = "" ' on retourne vide
else
N_ieme_mot=Vtab(Rang_mot) ' sinon on retourne le mot
end if
end function

Pour la longueur tu peux utiliser len().
Dans ta requete
champtest :
iif(len(n_ieme_mot([monchamp];3))>=5;N_ieme_mot([NomChamp];3);"")

@+
eoliusone
Le #17323671
Fabien a écrit le 24/09/2008 à 08h06 :
eoliusone a écrit :
Bonjour à toutes et tous,
un petit problème pour une grande solution !

j'ai un champ article en texte qui comporte plusieurs infos, ex( golf 6
cabriolet 5 portes bleu clair diesel ). Je souhaite lors d'une requète
n'afficher que le troisième mots en partant de la gauche.

Petit plus : est-il éventuellement possible, dans un second cas, de
spécifier
que le mot doit avoir au minimum 5 caractères.

Merci d'avance pour cette info plus qu'utile.

Bien à vous

Eoliusone



Bonjour
Tu peux utiliser une fonction externe que tu enregistre dans un module
Public function n_ieme_mot(lachaine as string, Rang_mot as integer) as
string
Dim vtab as variant
Vtab=split(lachaine,chr(32)) ' On converti la chaine en un tableau. Le
Blanc (chr(32)) permet d'indiquer ce qui sépare les mots
if ubound(vtab)<rang_mot then 'S'il y a moins d'éléments dans
le
tableau que le rang du mot recherché
N_ieme_mot = "" ' on retourne vide
else
N_ieme_mot=Vtab(Rang_mot) ' sinon on retourne le mot
end if
end function

Pour la longueur tu peux utiliser len().
Dans ta requete
champtest :
iif(len(n_ieme_mot([monchamp];3))>=5;N_ieme_mot([NomChamp];3);"")

@+


merci Fabien,

petit problème, il me signale qu'il y a un erreur de syntaxe dans le module, vérifier code..
Je n'ai rien changé dans le code que vous m'avez donné. (est-ce un erreur de ma part ?)

ps: pourriez-vous faire en sorte que le code prennent d'office le troisième mots quelque soit sa longueur (pour un autre champs).
Et ou dois-je changer la variable si c'est le cinquième mot qui m'interresse ?

Est-il possible d'avoir un requète directe ou on doit toujours passer par le module ?

Encore merci d'avance

Bien à vous
Fabien
Le #17327231
eoliusone a écrit :
Fabien a écrit le 24/09/2008 à 08h06 :
eoliusone a écrit :
Bonjour à toutes et tous,
un petit problème pour une grande solution !

j'ai un champ article en texte qui comporte plusieurs infos, ex( golf 6
cabriolet 5 portes bleu clair diesel ). Je souhaite lors d'une requète
n'afficher que le troisième mots en partant de la gauche.

Petit plus : est-il éventuellement possible, dans un second cas, de
spécifier
que le mot doit avoir au minimum 5 caractères.

Merci d'avance pour cette info plus qu'utile.

Bien à vous

Eoliusone



Bonjour
Tu peux utiliser une fonction externe que tu enregistre dans un module
Public function n_ieme_mot(lachaine as string, Rang_mot as integer) as
string
Dim vtab as variant
Vtab=split(lachaine,chr(32)) ' On converti la chaine en un tableau. Le
Blanc (chr(32)) permet d'indiquer ce qui sépare les mots
if ubound(vtab)<rang_mot then 'S'il y a moins d'éléments dans
le
tableau que le rang du mot recherché
N_ieme_mot = "" ' on retourne vide
else
N_ieme_mot=Vtab(Rang_mot) ' sinon on retourne le mot
end if
end function

Pour la longueur tu peux utiliser len().
Dans ta requete
champtest :
iif(len(n_ieme_mot([monchamp];3))>=5;N_ieme_mot([NomChamp];3);"")

@+


merci Fabien,

petit problème, il me signale qu'il y a un erreur de syntaxe dans le module,
vérifier code..
Je n'ai rien changé dans le code que vous m'avez donné. (est-ce un erreur de ma
part ?)

ps: pourriez-vous faire en sorte que le code prennent d'office le troisième
mots quelque soit sa longueur (pour un autre champs).
Et ou dois-je changer la variable si c'est le cinquième mot qui m'interresse ?

Est-il possible d'avoir un requète directe ou on doit toujours passer par le
module ?

Encore merci d'avance

Bien à vous


re
J'ai pris le temps de tester ;-) et de commenter

Public Function n_ieme_mot(lachaine As String, Rang_mot As Integer) As
String
'Lachaine : chaine dans laquelle on recherche
'Rang_mot : le rang du mot recherché dans Lachaine
'ex n_ieme_mot("aaaaa bbbbb ccccc",2) retourne bbbbb
Dim vtab As Variant
vtab = Split(lachaine, Chr(32)) ' On converti la chaine en un tableau.
Le Blanc (chr(32)) permet d'indiquer ce qui sépare les mots
If UBound(vtab) < Rang_mot - 1 Then 'S'il y a moins d'éléments dans le
tableau que le rang du mot recherché
n_ieme_mot = "" ' on retourne vide
Else
n_ieme_mot = vtab(Rang_mot - 1) ' sinon on retourne le mot
End If

End Function
et le sql avec une de mes tables

SELECT IIf(Len(n_ieme_mot([entrep],2))>5,n_ieme_mot([entrep],2),"") AS mot
FROM Entreprises;

en français : si la longueur du 2ieme mot du nom d'entreprise est >5
alors on renvoi le 2ieme mot sinon on renvoi "".
@+
eoliusone
Le #17328301
Fabien a écrit le 24/09/2008 à 08h06 :
eoliusone a écrit :
Bonjour à toutes et tous,
un petit problème pour une grande solution !

j'ai un champ article en texte qui comporte plusieurs infos, ex( golf 6
cabriolet 5 portes bleu clair diesel ). Je souhaite lors d'une requète
n'afficher que le troisième mots en partant de la gauche.

Petit plus : est-il éventuellement possible, dans un second cas, de
spécifier
que le mot doit avoir au minimum 5 caractères.

Merci d'avance pour cette info plus qu'utile.

Bien à vous

Eoliusone



Bonjour
Tu peux utiliser une fonction externe que tu enregistre dans un module
Public function n_ieme_mot(lachaine as string, Rang_mot as integer) as
string
Dim vtab as variant
Vtab=split(lachaine,chr(32)) ' On converti la chaine en un tableau. Le
Blanc (chr(32)) permet d'indiquer ce qui sépare les mots
if ubound(vtab)<rang_mot then 'S'il y a moins d'éléments dans
le
tableau que le rang du mot recherché
N_ieme_mot = "" ' on retourne vide
else
N_ieme_mot=Vtab(Rang_mot) ' sinon on retourne le mot
end if
end function

Pour la longueur tu peux utiliser len().
Dans ta requete
champtest :
iif(len(n_ieme_mot([monchamp];3))>=5;N_ieme_mot([NomChamp];3);"")

@+


Je vais te rendre fou je crois :(

j' ai placer ton "texte" tel quel dans un module 1.
j'ai placer la requète select.... dans ma requète de la table PRODUITS FIN.
J'ai changer entreprises en DEBATISSER, c'est le champ dans lequel le troisième mots doit être "puisé" et Entreprise en PRODUITS FIN.
Dans une colonne (avec expression comme opération) qui s'appelle NEW, je place ta requète, il me dit qu'il manque une parenthèse pour la sous-requète !!!

Cela donne : NEW :SELECT IIf(Len(n_ieme_mot([DEBATISSER],2))>5,n_ieme_mot([DEBATISSER],2),"") AS mot
FROM PRODUITS FIN;

Pour se simplifier la vie (yes), ne tenons plus compte, stp, d'une longueur de mot mais uniquement de la selection du 3ème mots.
La longueur pourrais m'être utile dans le futur mais n'est pas indispensable pour l'instant.

En espèrant ne pas te donner des cheveux gris,
passe une bonne fin de journée
Encore un grand merci pour ton aide.
Fabien
Le #17332501
eoliusone a écrit :
Fabien a écrit le 24/09/2008 à 08h06 :
eoliusone a écrit :
Bonjour à toutes et tous,
un petit problème pour une grande solution !

j'ai un champ article en texte qui comporte plusieurs infos, ex( golf 6
cabriolet 5 portes bleu clair diesel ). Je souhaite lors d'une requète
n'afficher que le troisième mots en partant de la gauche.

Petit plus : est-il éventuellement possible, dans un second cas, de
spécifier
que le mot doit avoir au minimum 5 caractères.

Merci d'avance pour cette info plus qu'utile.

Bien à vous

Eoliusone



Bonjour
Tu peux utiliser une fonction externe que tu enregistre dans un module
Public function n_ieme_mot(lachaine as string, Rang_mot as integer) as
string
Dim vtab as variant
Vtab=split(lachaine,chr(32)) ' On converti la chaine en un tableau. Le
Blanc (chr(32)) permet d'indiquer ce qui sépare les mots
if ubound(vtab)<rang_mot then 'S'il y a moins d'éléments dans
le
tableau que le rang du mot recherché
N_ieme_mot = "" ' on retourne vide
else
N_ieme_mot=Vtab(Rang_mot) ' sinon on retourne le mot
end if
end function

Pour la longueur tu peux utiliser len().
Dans ta requete
champtest :
iif(len(n_ieme_mot([monchamp];3))>=5;N_ieme_mot([NomChamp];3);"")

@+


Je vais te rendre fou je crois :(

j' ai placer ton "texte" tel quel dans un module 1.
j'ai placer la requète select.... dans ma requète de la table PRODUITS FIN.
J'ai changer entreprises en DEBATISSER, c'est le champ dans lequel le troisième
mots doit être "puisé" et Entreprise en PRODUITS FIN.
Dans une colonne (avec expression comme opération) qui s'appelle NEW, je place
ta requète, il me dit qu'il manque une parenthèse pour la sous-requète !!!

Cela donne : NEW :SELECT
IIf(Len(n_ieme_mot([DEBATISSER],2))>5,n_ieme_mot([DEBATISSER],2),"") AS mot
FROM PRODUITS FIN;

Pour se simplifier la vie (yes), ne tenons plus compte, stp, d'une longueur de
mot mais uniquement de la selection du 3ème mots.
La longueur pourrais m'être utile dans le futur mais n'est pas indispensable
pour l'instant.

En espèrant ne pas te donner des cheveux gris,
passe une bonne fin de journée
Encore un grand merci pour ton aide.



Ouille :-)

"NEW :SELECT
> IIf(Len(n_ieme_mot([DEBATISSER],2))>5,n_ieme_mot([DEBATISSER],2),"")
AS mot
> FROM PRODUITS FIN;"
A remplacer par
NEW:IIf(Len(n_ieme_mot([DEBATISSER];2))>5;n_ieme_mot([DEBATISSER];2);"")

Ou si tu ne veux plus tenir compte de la longueur du mot :

NEW : n_ieme_mot([DEBATISSER];2)
Ps1 : c'est bien des ; que j'ai mis au lieu des , . Dans les requêtes
c'est le ; qui fait office de séparatif entre les paramètres des
fonctions (idem dans les formulaires et les états)
Ps2 : Evite les mots clefs en nom de champ à NEW préfère Nouv ou Nouveau.
@+
eoliusone
Le #17343361
Fabien a écrit le 24/09/2008 à 16h39 :
eoliusone a écrit :
Fabien a écrit le 24/09/2008 à 08h06 :
eoliusone a écrit :
Bonjour à toutes et tous,
un petit problème pour une grande solution !

j'ai un champ article en texte qui comporte plusieurs infos, ex( golf 6
cabriolet 5 portes bleu clair diesel ). Je souhaite lors d'une
requète
n'afficher que le troisième mots en partant de la gauche.

Petit plus : est-il éventuellement possible, dans un second cas, de
spécifier
que le mot doit avoir au minimum 5 caractères.

Merci d'avance pour cette info plus qu'utile.

Bien à vous

Eoliusone




Bonjour
Tu peux utiliser une fonction externe que tu enregistre dans un module
Public function n_ieme_mot(lachaine as string, Rang_mot as integer) as
string
Dim vtab as variant
Vtab=split(lachaine,chr(32)) ' On converti la chaine en un tableau. Le
Blanc (chr(32)) permet d'indiquer ce qui sépare les mots
if ubound(vtab)<rang_mot then 'S'il y a moins d'éléments
dans
le
tableau que le rang du mot recherché
N_ieme_mot = "" ' on retourne vide
else
N_ieme_mot=Vtab(Rang_mot) ' sinon on retourne le mot
end if
end function

Pour la longueur tu peux utiliser len().
Dans ta requete
champtest :
iif(len(n_ieme_mot([monchamp];3))>=5;N_ieme_mot([NomChamp];3);"")

@+



merci Fabien,

petit problème, il me signale qu'il y a un erreur de syntaxe dans le
module,
vérifier code..
Je n'ai rien changé dans le code que vous m'avez donné. (est-ce
un erreur de ma
part ?)

ps: pourriez-vous faire en sorte que le code prennent d'office le
troisième
mots quelque soit sa longueur (pour un autre champs).
Et ou dois-je changer la variable si c'est le cinquième mot qui
m'interresse ?

Est-il possible d'avoir un requète directe ou on doit toujours passer
par le
module ?

Encore merci d'avance

Bien à vous



re
J'ai pris le temps de tester ;-) et de commenter

Public Function n_ieme_mot(lachaine As String, Rang_mot As Integer) As
String
'Lachaine : chaine dans laquelle on recherche
'Rang_mot : le rang du mot recherché dans Lachaine
'ex n_ieme_mot("aaaaa bbbbb ccccc",2) retourne bbbbb
Dim vtab As Variant
vtab = Split(lachaine, Chr(32)) ' On converti la chaine en un tableau.
Le Blanc (chr(32)) permet d'indiquer ce qui sépare les mots
If UBound(vtab) < Rang_mot - 1 Then 'S'il y a moins d'éléments
dans le
tableau que le rang du mot recherché
n_ieme_mot = "" ' on retourne vide
Else
n_ieme_mot = vtab(Rang_mot - 1) ' sinon on retourne le mot
End If

End Function
et le sql avec une de mes tables

SELECT
IIf(Len(n_ieme_mot([entrep],2))>5,n_ieme_mot([entrep],2),"") AS
mot
FROM Entreprises;

en français : si la longueur du 2ieme mot du nom d'entreprise est >5
alors on renvoi le 2ieme mot sinon on renvoi "".
@+


Bonjour Fabien,
je suis à nouveau de retour sur ce problème qui persiste.

Je place IIF.... et il me retourne une erreur "le module visual basic comport une erreur de syntaxe"
Il me mets alors en surbrillant le mot LEN dans la requète..
Suis-je gauche...
Au plaisir et merci encore
eoliusone
Le #17343531
eoliusone a écrit le 26/09/2008 à 10h28 :
Fabien a écrit le 24/09/2008 à 16h39 :
eoliusone a écrit :
Fabien a écrit le 24/09/2008 à 08h06 :
eoliusone a écrit :
Bonjour à toutes et tous,
un petit problème pour une grande solution !

j'ai un champ article en texte qui comporte plusieurs infos, ex( golf 6
cabriolet 5 portes bleu clair diesel ). Je souhaite lors d'une
requète
n'afficher que le troisième mots en partant de la gauche.

Petit plus : est-il éventuellement possible, dans un second cas, de
spécifier
que le mot doit avoir au minimum 5 caractères.

Merci d'avance pour cette info plus qu'utile.

Bien à vous

Eoliusone





Bonjour
Tu peux utiliser une fonction externe que tu enregistre dans un module
Public function n_ieme_mot(lachaine as string, Rang_mot as integer) as
string
Dim vtab as variant
Vtab=split(lachaine,chr(32)) ' On converti la chaine en un tableau. Le
Blanc (chr(32)) permet d'indiquer ce qui sépare les mots
if ubound(vtab)<rang_mot then 'S'il y a moins d'éléments
dans
le
tableau que le rang du mot recherché
N_ieme_mot = "" ' on retourne vide
else
N_ieme_mot=Vtab(Rang_mot) ' sinon on retourne le mot
end if
end function

Pour la longueur tu peux utiliser len().
Dans ta requete
champtest :
iif(len(n_ieme_mot([monchamp];3))>=5;N_ieme_mot([NomChamp];3);"")

@+




merci Fabien,

petit problème, il me signale qu'il y a un erreur de syntaxe dans le
module,
vérifier code..
Je n'ai rien changé dans le code que vous m'avez donné. (est-ce
un erreur de ma
part ?)

ps: pourriez-vous faire en sorte que le code prennent d'office le
troisième
mots quelque soit sa longueur (pour un autre champs).
Et ou dois-je changer la variable si c'est le cinquième mot qui
m'interresse ?

Est-il possible d'avoir un requète directe ou on doit toujours passer
par le
module ?

Encore merci d'avance

Bien à vous




re
J'ai pris le temps de tester ;-) et de commenter

Public Function n_ieme_mot(lachaine As String, Rang_mot As Integer) As
String
'Lachaine : chaine dans laquelle on recherche
'Rang_mot : le rang du mot recherché dans Lachaine
'ex n_ieme_mot("aaaaa bbbbb ccccc",2) retourne bbbbb
Dim vtab As Variant
vtab = Split(lachaine, Chr(32)) ' On converti la chaine en un tableau.
Le Blanc (chr(32)) permet d'indiquer ce qui sépare les mots
If UBound(vtab) < Rang_mot - 1 Then 'S'il y a moins
d'éléments
dans le
tableau que le rang du mot recherché
n_ieme_mot = "" ' on retourne vide
Else
n_ieme_mot = vtab(Rang_mot - 1) ' sinon on retourne le mot
End If

End Function
et le sql avec une de mes tables

SELECT
IIf(Len(n_ieme_mot([entrep],2))>5,n_ieme_mot([entrep],2),"") AS
mot
FROM Entreprises;

en français : si la longueur du 2ieme mot du nom d'entreprise est >5
alors on renvoi le 2ieme mot sinon on renvoi "".
@+



Bonjour Fabien,
je suis à nouveau de retour sur ce problème qui persiste.

Je place IIF.... et il me retourne une erreur "le module visual basic
comport une erreur de syntaxe"
Il me mets alors en surbrillant le mot LEN dans la requète..
Suis-je gauche...
Au plaisir et merci encore


Rebonjour,

si on supprime la fonction en rapport avec la taille du mot, ne faut-il pas changer qqchose dans le code ?
Bonne journée à toi et au plaisir de te lire
:-)
Fabien
Le #17345921
eoliusone a écrit :
Fabien a écrit le 24/09/2008 à 16h39 :
eoliusone a écrit :
Fabien a écrit le 24/09/2008 à 08h06 :
eoliusone a écrit :
Bonjour à toutes et tous,
un petit problème pour une grande solution !

j'ai un champ article en texte qui comporte plusieurs infos, ex( golf 6
cabriolet 5 portes bleu clair diesel ). Je souhaite lors d'une
requète
n'afficher que le troisième mots en partant de la gauche.

Petit plus : est-il éventuellement possible, dans un second cas, de
spécifier
que le mot doit avoir au minimum 5 caractères.

Merci d'avance pour cette info plus qu'utile.

Bien à vous

Eoliusone




Bonjour
Tu peux utiliser une fonction externe que tu enregistre dans un module
Public function n_ieme_mot(lachaine as string, Rang_mot as integer) as
string
Dim vtab as variant
Vtab=split(lachaine,chr(32)) ' On converti la chaine en un tableau. Le
Blanc (chr(32)) permet d'indiquer ce qui sépare les mots
if ubound(vtab)<rang_mot then 'S'il y a moins d'éléments
dans
le
tableau que le rang du mot recherché
N_ieme_mot = "" ' on retourne vide
else
N_ieme_mot=Vtab(Rang_mot) ' sinon on retourne le mot
end if
end function

Pour la longueur tu peux utiliser len().
Dans ta requete
champtest :
iif(len(n_ieme_mot([monchamp];3))>=5;N_ieme_mot([NomChamp];3);"")

@+



merci Fabien,

petit problème, il me signale qu'il y a un erreur de syntaxe dans le
module,
vérifier code..
Je n'ai rien changé dans le code que vous m'avez donné. (est-ce
un erreur de ma
part ?)

ps: pourriez-vous faire en sorte que le code prennent d'office le
troisième
mots quelque soit sa longueur (pour un autre champs).
Et ou dois-je changer la variable si c'est le cinquième mot qui
m'interresse ?

Est-il possible d'avoir un requète directe ou on doit toujours passer
par le
module ?

Encore merci d'avance

Bien à vous



re
J'ai pris le temps de tester ;-) et de commenter

Public Function n_ieme_mot(lachaine As String, Rang_mot As Integer) As
String
'Lachaine : chaine dans laquelle on recherche
'Rang_mot : le rang du mot recherché dans Lachaine
'ex n_ieme_mot("aaaaa bbbbb ccccc",2) retourne bbbbb
Dim vtab As Variant
vtab = Split(lachaine, Chr(32)) ' On converti la chaine en un tableau.
Le Blanc (chr(32)) permet d'indiquer ce qui sépare les mots
If UBound(vtab) < Rang_mot - 1 Then 'S'il y a moins d'éléments
dans le
tableau que le rang du mot recherché
n_ieme_mot = "" ' on retourne vide
Else
n_ieme_mot = vtab(Rang_mot - 1) ' sinon on retourne le mot
End If

End Function
et le sql avec une de mes tables

SELECT
IIf(Len(n_ieme_mot([entrep],2))>5,n_ieme_mot([entrep],2),"") AS
mot
FROM Entreprises;

en français : si la longueur du 2ieme mot du nom d'entreprise est >5
alors on renvoi le 2ieme mot sinon on renvoi "".
@+


Bonjour Fabien,
je suis à nouveau de retour sur ce problème qui persiste.

Je place IIF.... et il me retourne une erreur "le module visual basic comport
une erreur de syntaxe"
Il me mets alors en surbrillant le mot LEN dans la requète..
Suis-je gauche...
Au plaisir et merci encore


Salut,
Entre dans le module et regarde dans la liste des Références si il n'y
en a pas une cochée et maquante. Si oui décoche et relance.
Outils>références
@+
Fabien
Le #17346051
eoliusone a écrit :
eoliusone a écrit le 26/09/2008 à 10h28 :
Fabien a écrit le 24/09/2008 à 16h39 :
eoliusone a écrit :
Fabien a écrit le 24/09/2008 à 08h06 :
eoliusone a écrit :
Bonjour à toutes et tous,
un petit problème pour une grande solution !

j'ai un champ article en texte qui comporte plusieurs infos, ex( golf 6
cabriolet 5 portes bleu clair diesel ). Je souhaite lors d'une
requète
n'afficher que le troisième mots en partant de la gauche.

Petit plus : est-il éventuellement possible, dans un second cas, de
spécifier
que le mot doit avoir au minimum 5 caractères.

Merci d'avance pour cette info plus qu'utile.

Bien à vous

Eoliusone





Bonjour
Tu peux utiliser une fonction externe que tu enregistre dans un module
Public function n_ieme_mot(lachaine as string, Rang_mot as integer) as
string
Dim vtab as variant
Vtab=split(lachaine,chr(32)) ' On converti la chaine en un tableau. Le
Blanc (chr(32)) permet d'indiquer ce qui sépare les mots
if ubound(vtab)<rang_mot then 'S'il y a moins d'éléments
dans
le
tableau que le rang du mot recherché
N_ieme_mot = "" ' on retourne vide
else
N_ieme_mot=Vtab(Rang_mot) ' sinon on retourne le mot
end if
end function

Pour la longueur tu peux utiliser len().
Dans ta requete
champtest :
iif(len(n_ieme_mot([monchamp];3))>=5;N_ieme_mot([NomChamp];3);"")

@+




merci Fabien,

petit problème, il me signale qu'il y a un erreur de syntaxe dans le
module,
vérifier code..
Je n'ai rien changé dans le code que vous m'avez donné. (est-ce
un erreur de ma
part ?)

ps: pourriez-vous faire en sorte que le code prennent d'office le
troisième
mots quelque soit sa longueur (pour un autre champs).
Et ou dois-je changer la variable si c'est le cinquième mot qui
m'interresse ?

Est-il possible d'avoir un requète directe ou on doit toujours passer
par le
module ?

Encore merci d'avance

Bien à vous




re
J'ai pris le temps de tester ;-) et de commenter

Public Function n_ieme_mot(lachaine As String, Rang_mot As Integer) As
String
'Lachaine : chaine dans laquelle on recherche
'Rang_mot : le rang du mot recherché dans Lachaine
'ex n_ieme_mot("aaaaa bbbbb ccccc",2) retourne bbbbb
Dim vtab As Variant
vtab = Split(lachaine, Chr(32)) ' On converti la chaine en un tableau.
Le Blanc (chr(32)) permet d'indiquer ce qui sépare les mots
If UBound(vtab) < Rang_mot - 1 Then 'S'il y a moins
d'éléments
dans le
tableau que le rang du mot recherché
n_ieme_mot = "" ' on retourne vide
Else
n_ieme_mot = vtab(Rang_mot - 1) ' sinon on retourne le mot
End If

End Function
et le sql avec une de mes tables

SELECT
IIf(Len(n_ieme_mot([entrep],2))>5,n_ieme_mot([entrep],2),"") AS
mot
FROM Entreprises;

en français : si la longueur du 2ieme mot du nom d'entreprise est >5
alors on renvoi le 2ieme mot sinon on renvoi "".
@+



Bonjour Fabien,
je suis à nouveau de retour sur ce problème qui persiste.

Je place IIF.... et il me retourne une erreur "le module visual basic
comport une erreur de syntaxe"
Il me mets alors en surbrillant le mot LEN dans la requète..
Suis-je gauche...
Au plaisir et merci encore


Rebonjour,

si on supprime la fonction en rapport avec la taille du mot, ne faut-il pas
changer qqchose dans le code ?
Bonne journée à toi et au plaisir de te lire
:-)


Si tu enleve la fonction Len alors
le iif n'as plus lieu d'être et tu laisses n_ieme_mot(Champ;2). Ta
colonne contiendrat le 2 mot de ton champs
@+
eoliusone
Le #17386141
Fabien a écrit le 26/09/2008 à 14h14 :
eoliusone a écrit :
eoliusone a écrit le 26/09/2008 à 10h28 :
Fabien a écrit le 24/09/2008 à 16h39 :
eoliusone a écrit :
Fabien a écrit le 24/09/2008 à 08h06 :
eoliusone a écrit :
Bonjour à toutes et tous,
un petit problème pour une grande solution !

j'ai un champ article en texte qui comporte plusieurs infos, ex( golf 6
cabriolet 5 portes bleu clair diesel ). Je souhaite lors d'une
requète
n'afficher que le troisième mots en partant de la gauche.

Petit plus : est-il éventuellement possible, dans un second cas,
de
spécifier
que le mot doit avoir au minimum 5 caractères.

Merci d'avance pour cette info plus qu'utile.

Bien à vous

Eoliusone






Bonjour
Tu peux utiliser une fonction externe que tu enregistre dans un module
Public function n_ieme_mot(lachaine as string, Rang_mot as integer) as
string
Dim vtab as variant
Vtab=split(lachaine,chr(32)) ' On converti la chaine en un tableau. Le
Blanc (chr(32)) permet d'indiquer ce qui sépare les mots
if ubound(vtab)<rang_mot then 'S'il y a moins d'éléments
dans
le
tableau que le rang du mot recherché
N_ieme_mot = "" ' on retourne vide
else
N_ieme_mot=Vtab(Rang_mot) ' sinon on retourne le mot
end if
end function

Pour la longueur tu peux utiliser len().
Dans ta requete
champtest :
iif(len(n_ieme_mot([monchamp];3))>=5;N_ieme_mot([NomChamp];3);"")

@+





merci Fabien,

petit problème, il me signale qu'il y a un erreur de syntaxe dans le
module,
vérifier code..
Je n'ai rien changé dans le code que vous m'avez donné.
(est-ce
un erreur de ma
part ?)

ps: pourriez-vous faire en sorte que le code prennent d'office le
troisième
mots quelque soit sa longueur (pour un autre champs).
Et ou dois-je changer la variable si c'est le cinquième mot qui
m'interresse ?

Est-il possible d'avoir un requète directe ou on doit toujours
passer
par le
module ?

Encore merci d'avance

Bien à vous





re
J'ai pris le temps de tester ;-) et de commenter

Public Function n_ieme_mot(lachaine As String, Rang_mot As Integer) As
String
'Lachaine : chaine dans laquelle on recherche
'Rang_mot : le rang du mot recherché dans Lachaine
'ex n_ieme_mot("aaaaa bbbbb ccccc",2) retourne bbbbb
Dim vtab As Variant
vtab = Split(lachaine, Chr(32)) ' On converti la chaine en un tableau.
Le Blanc (chr(32)) permet d'indiquer ce qui sépare les mots
If UBound(vtab) < Rang_mot - 1 Then 'S'il y a moins
d'éléments
dans le
tableau que le rang du mot recherché
n_ieme_mot = "" ' on retourne vide
Else
n_ieme_mot = vtab(Rang_mot - 1) ' sinon on retourne le mot
End If

End Function
et le sql avec une de mes tables

SELECT
IIf(Len(n_ieme_mot([entrep],2))>5,n_ieme_mot([entrep],2),"") AS
mot
FROM Entreprises;

en français : si la longueur du 2ieme mot du nom d'entreprise est
>5
alors on renvoi le 2ieme mot sinon on renvoi "".
@+




Bonjour Fabien,
je suis à nouveau de retour sur ce problème qui persiste.

Je place IIF.... et il me retourne une erreur "le module visual basic
comport une erreur de syntaxe"
Il me mets alors en surbrillant le mot LEN dans la requète..
Suis-je gauche...
Au plaisir et merci encore



Rebonjour,

si on supprime la fonction en rapport avec la taille du mot, ne faut-il pas
changer qqchose dans le code ?
Bonne journée à toi et au plaisir de te lire
:-)



Si tu enleve la fonction Len alors
le iif n'as plus lieu d'être et tu laisses n_ieme_mot(Champ;2). Ta
colonne contiendrat le 2 mot de ton champs
@+


Hello,
Je dois encore essayer tes 2 dernières propositions et j'espère que cela fonctionnera.
En tout cas merci pour ton dévouement.
Au plaisir et bonne soirée
Publicité
Poster une réponse
Anonyme