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

extraire mot par mot d'un champ texte

15 réponses
Avatar
sylvere
Bonjour,
je cherche le moyen d'extraire mot par mot, chaque mot d'un champ texte qui
en contient plusieurs par enregistrement :
ex: " famille, culture, confiance, etc...)
le but est de faire une liste, un mot par ligne dans une requête ou un
nouveau champ.
Merci pour les conseils
Sylvere

5 réponses

1 2
Avatar
sylvere
Merci, c'est en bonne voie...
Mais 2 soucis :
Le Docmd.setwarnings n'accepte que la syntaxe : "DoCmd.SetWarnings
(Warningsoff)"
et en plus m'afiche toujours " vous allez ajouter une ligne..."
Je pense que ce qui arrive dans la table n'est pas chaque mot séparé comme
dans la liste déroulante que tu m'avais fait faire :
(lignes blanches, doublons, le premier mot uniquement de chaque
enregistrement..)
Je dois manquer une étape.
Je t'envoie le script dans l'état...


Dim Rst As DAO.Recordset
Dim MonTableau As Variant
Dim maliste As String
Dim I As Integer
Set Rst = CurrentDb.OpenRecordset("livres")
'On parcourt Matable
While Not Rst.EOF
'pour chaque Champs text MonChamp on remplace le retour chariot par un
; et on concatène dans Maliste
MonTableau = Split(Replace(Nz(Rst("Motscleserie1"), ""), vbCrLf, ";"), ";")
'
'on créé un tableau avec les éléments
For I = 0 To UBound(MonTableau) ' On parcourt le tableau en testant la
présence de l'élément dans maListe
If MonTableau(I) <> "" Then
If InStr(1, maliste, MonTableau(I)) = 0 Then
DoCmd.RunSQL "INSERT INTO TMots ( Mots )SELECT '" & Rst("Motscleserie1") &
"' AS Mots;"
End If
End If
Next I
Rst.MoveNext
Wend

Rst.Close
Set Rst = Nothing
DoCmd.SetWarnings (Warningsoff)





"Fabien" a écrit dans le message de news:
47b00b43$0$888$
Merci, Fabien,
Ca fonctionne bien en plaçant le contenu dans un controle texte,
les mots étaient en ligne, séparés par ; et j'ai mis en colonne en
Maliste = Maliste & MonTableau(I) & vbCrLf,
J'ai donc une liste très longue en colonne.
Mais, si tu résistes, cette liste est très longue, sans tri bien sûr.
Est ce possible de placer mot par mot dans un champ de table, afin
ensuite


d'en faire une requête pour gérer tris et impression ??
dans tous les cas merci pour la patience



"Fabien" a écrit dans le message de news:
47aff65a$0$832$
Merci Fabien,
Ca fonctionne très bien et je retrouve tout dans la liste déroulante,
mais je bute pour passer ce contenu dans une liste de type requête,
car




cette liste doit être imprimée, et de puls vidée de ses lignes vides
et




doublons.
merci d'avance si tu as encore un peu de patience

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




47ac7f6f$0$901$
Merci Fabien pour la contribution.
Ca coince à la ligne ou j'ai pointé le message d'erreur'utilisation
incorrecte de Null

Remplace

Maliste = Maliste & Replace(Rst("Motscleserie1"), vbCrLf, ";")
&






";"
par
Maliste = Maliste & Replace(nz(Rst("Motscleserie1"),""),
vbCrLf,




";") & ";"
dans certain enreg le champs motscleserie1 est vide

Pour la destination de cette liste, c'est une sortie papier au
final,






alors
ça peut être placé dans uene requête, ou une table..
Merci pour tes réponses

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




47ac5ac1$0$884$
Merci pour l'aide, les mots sont séparés par des sauts à la ligne
(entrée)
Je place ce code sur un bouton de commande ?
Machaine signifie le no mde mon champ conteant le texte à
extraire?









Dois je créer une table avec un champ "Montableau" ?
Merci d'avance

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





47ac29a2$0$876$
Bonjour,
je cherche le moyen d'extraire mot par mot, chaque mot d'un
champ











texte
qui
en contient plusieurs par enregistrement :
ex: " famille, culture, confiance, etc...)
le but est de faire une liste, un mot par ligne dans une
requête











ou
un
nouveau champ.
Merci pour les conseils
Sylvere


Bonjour Sylvere

Si tes mot sont séparé par des , alors utilise la fonction split
Dim Montableau as variant
Dim I As Integer
Montableau=split(Machaine,",")
For I=0 to Ubound(MonTableau)
.
.
.
Next I
@+
Reprenons :


Tu as une table. Dans cette table un champ texte qui contient
plusieurs




mots séparés par un retour chariot et tu veux extraire ces mots
pour








en
faire une liste?
J'ai bon là ?
Si j'ai bon alors

Sub Extrait()
Dim Rst As DAO.Recordset
Dim Maliste As String
Set Rst = CurrentDb.OpenRecordset("MaTable")
'>On parcourt Matable
While Not Rst.EOF
'pour chaque Champs text MonChamp on remplace le retour
chariot







par
un ; et on concatène dans Maliste
Maliste = Maliste & Replace(Rst("MonChamp"), vbCrLf, ";") &
";"







Rst.MoveNext
Wend
Maliste = Left(Maliste, Len(Maliste) - 1) ' contient sous forme de
liste



les éléments séparés par un ;
Rst.Close
Set Rst = Nothing

End Sub
Te permet de reccuperer sous forme de liste.
A toi de voir ce que tu veux en faire.
Par ex: si c'est la source d'une liste déroulante
Me.maliste.rowsource=Maliste
@+
Maliste = Maliste & Replace(nz(Rst("MonChamp"),""), vbCrLf, ";")




Salut,

Qu'entend tu par "liste de type requête" ?
Si c'est pour imprimer cette liste tu peux faire la même manip et
attribuer la valeur Maliste à un contrôle présent sur ton état.
Pour éviter les doublons dans la liste tu fait
Sub Extrait()
Dim Rst As DAO.Recordset
Dim MonTableau as variant
Dim Maliste As String
Dim I as Integer
Set Rst = CurrentDb.OpenRecordset("MaTable")
'On parcourt Matable
While Not Rst.EOF
'pour chaque Champs text MonChamp on remplace le retour chariot
par un ; et on concatène dans Maliste
Montableau = split(Replace(nz(Rst("MonChamp"),""), vbCrLf, ";"),";") '
on créé un tableau avec les éléments
For I= 0 to Ubound(MonTableau) ' On parcourt le tableau en testant la
présence de l'élément dans maListe
If Montableau(I)<>"" then
If Instr(1,Maliste,Montableau(I))=0 then
Maliste = Maliste & MonTableau(I) & ";"
EndIf
Endif
Next I
Rst.MoveNext
Wend
Maliste = Left(Maliste, Len(Maliste) - 1) ' contient sous forme de
liste
les éléments séparés par un ;
Rst.Close
Set Rst = Nothing

End Sub





@+



Avec un


Dim Rst As DAO.Recordset
Dim MonTableau as variant
Dim Maliste As String
Dim I as Integer
Set Rst = CurrentDb.OpenRecordset("MaTable")
Docmd.setwarnings = false


'On parcourt Matable
While Not Rst.EOF
'pour chaque Champs text MonChamp on remplace le retour chariot
par un ; et on concatène dans Maliste
Montableau = split(Replace(nz(Rst("MonChamp"),""), vbCrLf, ";"),";") '
on créé un tableau avec les éléments
For I= 0 to Ubound(MonTableau) ' On parcourt le tableau en testant la
présence de l'élément dans maListe
If Montableau(I)<>"" then
If Instr(1,Maliste,Montableau(I))=0 then
'On ajoute le mot dans le champs Mot de la Table TMots


Docmd.runsql "INSERT INTO TMots ( Mot )
SELECT '" & Rst("MonChamp") & "' AS Mot;"


EndIf
Endif
Next I
Rst.MoveNext
Wend
Maliste = Left(Maliste, Len(Maliste) - 1) ' contient sous forme de
liste
les éléments séparés par un ;
Rst.Close
Set Rst = Nothing
DoCmd.Setwarnings = true







End Sub







Il faut donc une table Mots qui existe et qui à un champs Mot.
Peut-être faudrait-il vider la table avant de la remplir: DoCmd.RunSql
"DELETE * FROM Mots ;" avant d'attaquer la boucle while ... Wend
@+
@+












Avatar
Fabien
Merci, c'est en bonne voie...
Mais 2 soucis :
Le Docmd.setwarnings n'accepte que la syntaxe : "DoCmd.SetWarnings
(Warningsoff)"
et en plus m'afiche toujours " vous allez ajouter une ligne..."
Je pense que ce qui arrive dans la table n'est pas chaque mot séparé comme
dans la liste déroulante que tu m'avais fait faire :
(lignes blanches, doublons, le premier mot uniquement de chaque
enregistrement..)
Je dois manquer une étape.
Je t'envoie le script dans l'état...


Dim Rst As DAO.Recordset
Dim MonTableau As Variant
Dim maliste As String
Dim I As Integer
Set Rst = CurrentDb.OpenRecordset("livres")
'On parcourt Matable


Docmd.SetWarnings False

While Not Rst.EOF
'pour chaque Champs text MonChamp on remplace le retour chariot par un
; et on concatène dans Maliste
MonTableau = Split(Replace(Nz(Rst("Motscleserie1"), ""), vbCrLf, ";"), ";")
'
'on créé un tableau avec les éléments
For I = 0 To UBound(MonTableau) ' On parcourt le tableau en testant la
présence de l'élément dans maListe
If MonTableau(I) <> "" Then
If InStr(1, maliste, MonTableau(I)) = 0 Then


OUPS !!!! Pas réveillé le gars ;-)
DoCmd.RunSQL "INSERT INTO TMots ( Mots )SELECT '" & MonTableau(I) &
"' AS Mots;"
Devrait faire l'affaire


End If
End If
Next I
Rst.MoveNext
Wend

Rst.Close
Set Rst = Nothing


DoCmd.SetWarnings True






"Fabien" a écrit dans le message de news:
47b00b43$0$888$
Merci, Fabien,
Ca fonctionne bien en plaçant le contenu dans un controle texte,
les mots étaient en ligne, séparés par ; et j'ai mis en colonne en
Maliste = Maliste & MonTableau(I) & vbCrLf,
J'ai donc une liste très longue en colonne.
Mais, si tu résistes, cette liste est très longue, sans tri bien sûr.
Est ce possible de placer mot par mot dans un champ de table, afin
ensuite


d'en faire une requête pour gérer tris et impression ??
dans tous les cas merci pour la patience



"Fabien" a écrit dans le message de news:
47aff65a$0$832$
Merci Fabien,
Ca fonctionne très bien et je retrouve tout dans la liste déroulante,
mais je bute pour passer ce contenu dans une liste de type requête,
car




cette liste doit être imprimée, et de puls vidée de ses lignes vides
et




doublons.
merci d'avance si tu as encore un peu de patience

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




47ac7f6f$0$901$
Merci Fabien pour la contribution.
Ca coince à la ligne ou j'ai pointé le message d'erreur'utilisation
incorrecte de Null

Remplace

Maliste = Maliste & Replace(Rst("Motscleserie1"), vbCrLf, ";")
&






";"
par
Maliste = Maliste & Replace(nz(Rst("Motscleserie1"),""),
vbCrLf,




";") & ";"
dans certain enreg le champs motscleserie1 est vide

Pour la destination de cette liste, c'est une sortie papier au
final,






alors
ça peut être placé dans uene requête, ou une table..
Merci pour tes réponses

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




47ac5ac1$0$884$
Merci pour l'aide, les mots sont séparés par des sauts à la ligne
(entrée)
Je place ce code sur un bouton de commande ?
Machaine signifie le no mde mon champ conteant le texte à
extraire?









Dois je créer une table avec un champ "Montableau" ?
Merci d'avance

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





47ac29a2$0$876$
Bonjour,
je cherche le moyen d'extraire mot par mot, chaque mot d'un
champ











texte
qui
en contient plusieurs par enregistrement :
ex: " famille, culture, confiance, etc...)
le but est de faire une liste, un mot par ligne dans une
requête











ou
un
nouveau champ.
Merci pour les conseils
Sylvere


Bonjour Sylvere

Si tes mot sont séparé par des , alors utilise la fonction split
Dim Montableau as variant
Dim I As Integer
Montableau=split(Machaine,",")
For I=0 to Ubound(MonTableau)
.
.
.
Next I
@+
Reprenons :


Tu as une table. Dans cette table un champ texte qui contient
plusieurs




mots séparés par un retour chariot et tu veux extraire ces mots
pour








en
faire une liste?
J'ai bon là ?
Si j'ai bon alors

Sub Extrait()
Dim Rst As DAO.Recordset
Dim Maliste As String
Set Rst = CurrentDb.OpenRecordset("MaTable")
'>On parcourt Matable
While Not Rst.EOF
'pour chaque Champs text MonChamp on remplace le retour
chariot







par
un ; et on concatène dans Maliste
Maliste = Maliste & Replace(Rst("MonChamp"), vbCrLf, ";") &
";"







Rst.MoveNext
Wend
Maliste = Left(Maliste, Len(Maliste) - 1) ' contient sous forme de
liste



les éléments séparés par un ;
Rst.Close
Set Rst = Nothing

End Sub
Te permet de reccuperer sous forme de liste.
A toi de voir ce que tu veux en faire.
Par ex: si c'est la source d'une liste déroulante
Me.maliste.rowsource=Maliste
@+
Maliste = Maliste & Replace(nz(Rst("MonChamp"),""), vbCrLf, ";")


Salut,


Qu'entend tu par "liste de type requête" ?
Si c'est pour imprimer cette liste tu peux faire la même manip et
attribuer la valeur Maliste à un contrôle présent sur ton état.
Pour éviter les doublons dans la liste tu fait
Sub Extrait()
Dim Rst As DAO.Recordset
Dim MonTableau as variant
Dim Maliste As String
Dim I as Integer
Set Rst = CurrentDb.OpenRecordset("MaTable")
'On parcourt Matable
While Not Rst.EOF
'pour chaque Champs text MonChamp on remplace le retour chariot
par un ; et on concatène dans Maliste
Montableau = split(Replace(nz(Rst("MonChamp"),""), vbCrLf, ";"),";") '
on créé un tableau avec les éléments
For I= 0 to Ubound(MonTableau) ' On parcourt le tableau en testant la
présence de l'élément dans maListe
If Montableau(I)<>"" then
If Instr(1,Maliste,Montableau(I))=0 then
Maliste = Maliste & MonTableau(I) & ";"
EndIf
Endif
Next I
Rst.MoveNext
Wend
Maliste = Left(Maliste, Len(Maliste) - 1) ' contient sous forme de
liste
les éléments séparés par un ;
Rst.Close
Set Rst = Nothing

End Sub





@+


Avec un


Dim Rst As DAO.Recordset
Dim MonTableau as variant
Dim Maliste As String
Dim I as Integer
Set Rst = CurrentDb.OpenRecordset("MaTable")
Docmd.setwarnings = false


'On parcourt Matable
While Not Rst.EOF
'pour chaque Champs text MonChamp on remplace le retour chariot
par un ; et on concatène dans Maliste
Montableau = split(Replace(nz(Rst("MonChamp"),""), vbCrLf, ";"),";") '
on créé un tableau avec les éléments
For I= 0 to Ubound(MonTableau) ' On parcourt le tableau en testant la
présence de l'élément dans maListe
If Montableau(I)<>"" then
If Instr(1,Maliste,Montableau(I))=0 then
'On ajoute le mot dans le champs Mot de la Table TMots


Docmd.runsql "INSERT INTO TMots ( Mot )
SELECT '" & Rst("MonChamp") & "' AS Mot;"


EndIf
Endif
Next I
Rst.MoveNext
Wend
Maliste = Left(Maliste, Len(Maliste) - 1) ' contient sous forme de
liste
les éléments séparés par un ;
Rst.Close
Set Rst = Nothing
DoCmd.Setwarnings = true







End Sub







Il faut donc une table Mots qui existe et qui à un champs Mot.
Peut-être faudrait-il vider la table avant de la remplir: DoCmd.RunSql
"DELETE * FROM Mots ;" avant d'attaquer la boucle while ... Wend
@+
@+



Docmd.setwarnings false pour ne plus avoir le message systéme a chaque

ajout et docmd.setwarnings True pour réactiver l'option ;-)












Avatar
sylvere
Ok pour le message warnings, je ne le mettais pas au bon endroit, il était
en dehors de la boucle..
Mais reste l'autre gros souci :
Je pense que ce qui arrive dans la table n'est pas chaque mot séparé comme
dans la liste déroulante que tu m'avais fait faire :
Je n'ai pas tous les mots de chaque enregistrement, mais uniquement le


premeir qui se répète en doublon autant de fois qu'il y en a d'autres après
le Ctrl, et qui ne viennent pas.
je ne récupère pas ce que je plaçais dans la variable "tableau" puor la
liste déroulante???
Merci puor la réactivité et la patience...



"Fabien" a écrit dans le message de news:
47b01b53$0$863$
Merci, c'est en bonne voie...
Mais 2 soucis :
Le Docmd.setwarnings n'accepte que la syntaxe : "DoCmd.SetWarnings
(Warningsoff)"
et en plus m'afiche toujours " vous allez ajouter une ligne..."
Je pense que ce qui arrive dans la table n'est pas chaque mot séparé
comme


dans la liste déroulante que tu m'avais fait faire :
(lignes blanches, doublons, le premier mot uniquement de chaque
enregistrement..)
Je dois manquer une étape.
Je t'envoie le script dans l'état...


Dim Rst As DAO.Recordset
Dim MonTableau As Variant
Dim maliste As String
Dim I As Integer
Set Rst = CurrentDb.OpenRecordset("livres")
'On parcourt Matable


Docmd.SetWarnings False

While Not Rst.EOF
'pour chaque Champs text MonChamp on remplace le retour chariot
par un


; et on concatène dans Maliste
MonTableau = Split(Replace(Nz(Rst("Motscleserie1"), ""), vbCrLf, ";"),
";")


'
'on créé un tableau avec les éléments
For I = 0 To UBound(MonTableau) ' On parcourt le tableau en testant la
présence de l'élément dans maListe
If MonTableau(I) <> "" Then
If InStr(1, maliste, MonTableau(I)) = 0 Then


OUPS !!!! Pas réveillé le gars ;-)
DoCmd.RunSQL "INSERT INTO TMots ( Mots )SELECT '" & MonTableau(I) &
"' AS Mots;"
Devrait faire l'affaire


End If
End If
Next I
Rst.MoveNext
Wend

Rst.Close
Set Rst = Nothing


DoCmd.SetWarnings True






"Fabien" a écrit dans le message de news:
47b00b43$0$888$
Merci, Fabien,
Ca fonctionne bien en plaçant le contenu dans un controle texte,
les mots étaient en ligne, séparés par ; et j'ai mis en colonne en
Maliste = Maliste & MonTableau(I) & vbCrLf,
J'ai donc une liste très longue en colonne.
Mais, si tu résistes, cette liste est très longue, sans tri bien sûr.
Est ce possible de placer mot par mot dans un champ de table, afin
ensuite


d'en faire une requête pour gérer tris et impression ??
dans tous les cas merci pour la patience



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




47aff65a$0$832$
Merci Fabien,
Ca fonctionne très bien et je retrouve tout dans la liste
déroulante,






mais je bute pour passer ce contenu dans une liste de type requête,
car




cette liste doit être imprimée, et de puls vidée de ses lignes vides
et




doublons.
merci d'avance si tu as encore un peu de patience

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




47ac7f6f$0$901$
Merci Fabien pour la contribution.
Ca coince à la ligne ou j'ai pointé le message
d'erreur'utilisation








incorrecte de Null

Remplace

Maliste = Maliste & Replace(Rst("Motscleserie1"), vbCrLf,
";")








&
";"
par
Maliste = Maliste & Replace(nz(Rst("Motscleserie1"),""),
vbCrLf,




";") & ";"
dans certain enreg le champs motscleserie1 est vide

Pour la destination de cette liste, c'est une sortie papier au
final,






alors
ça peut être placé dans uene requête, ou une table..
Merci pour tes réponses

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




47ac5ac1$0$884$
Merci pour l'aide, les mots sont séparés par des sauts à la
ligne











(entrée)
Je place ce code sur un bouton de commande ?
Machaine signifie le no mde mon champ conteant le texte à
extraire?









Dois je créer une table avec un champ "Montableau" ?
Merci d'avance

"Fabien" a écrit dans le message
de











news:
47ac29a2$0$876$
Bonjour,
je cherche le moyen d'extraire mot par mot, chaque mot d'un
champ











texte
qui
en contient plusieurs par enregistrement :
ex: " famille, culture, confiance, etc...)
le but est de faire une liste, un mot par ligne dans une
requête











ou
un
nouveau champ.
Merci pour les conseils
Sylvere


Bonjour Sylvere

Si tes mot sont séparé par des , alors utilise la fonction
split












Dim Montableau as variant
Dim I As Integer
Montableau=split(Machaine,",")
For I=0 to Ubound(MonTableau)
.
.
.
Next I
@+
Reprenons :


Tu as une table. Dans cette table un champ texte qui contient
plusieurs




mots séparés par un retour chariot et tu veux extraire ces mots
pour








en
faire une liste?
J'ai bon là ?
Si j'ai bon alors

Sub Extrait()
Dim Rst As DAO.Recordset
Dim Maliste As String
Set Rst = CurrentDb.OpenRecordset("MaTable")
'>On parcourt Matable
While Not Rst.EOF
'pour chaque Champs text MonChamp on remplace le retour
chariot







par
un ; et on concatène dans Maliste
Maliste = Maliste & Replace(Rst("MonChamp"), vbCrLf, ";") &
";"







Rst.MoveNext
Wend
Maliste = Left(Maliste, Len(Maliste) - 1) ' contient sous forme
de









liste
les éléments séparés par un ;
Rst.Close
Set Rst = Nothing

End Sub
Te permet de reccuperer sous forme de liste.
A toi de voir ce que tu veux en faire.
Par ex: si c'est la source d'une liste déroulante
Me.maliste.rowsource=Maliste
@+
Maliste = Maliste & Replace(nz(Rst("MonChamp"),""), vbCrLf, ";")


Salut,


Qu'entend tu par "liste de type requête" ?
Si c'est pour imprimer cette liste tu peux faire la même manip et
attribuer la valeur Maliste à un contrôle présent sur ton état.
Pour éviter les doublons dans la liste tu fait
Sub Extrait()
Dim Rst As DAO.Recordset
Dim MonTableau as variant
Dim Maliste As String
Dim I as Integer
Set Rst = CurrentDb.OpenRecordset("MaTable")
'On parcourt Matable
While Not Rst.EOF
'pour chaque Champs text MonChamp on remplace le retour chariot
par un ; et on concatène dans Maliste
Montableau = split(Replace(nz(Rst("MonChamp"),""), vbCrLf, ";"),";")
'





on créé un tableau avec les éléments
For I= 0 to Ubound(MonTableau) ' On parcourt le tableau en testant la
présence de l'élément dans maListe
If Montableau(I)<>"" then
If Instr(1,Maliste,Montableau(I))=0 then
Maliste = Maliste & MonTableau(I) & ";"
EndIf
Endif
Next I
Rst.MoveNext
Wend
Maliste = Left(Maliste, Len(Maliste) - 1) ' contient sous forme de
liste
les éléments séparés par un ;
Rst.Close
Set Rst = Nothing

End Sub





@+


Avec un


Dim Rst As DAO.Recordset
Dim MonTableau as variant
Dim Maliste As String
Dim I as Integer
Set Rst = CurrentDb.OpenRecordset("MaTable")
Docmd.setwarnings = false


'On parcourt Matable
While Not Rst.EOF
'pour chaque Champs text MonChamp on remplace le retour
chariot





par un ; et on concatène dans Maliste
Montableau = split(Replace(nz(Rst("MonChamp"),""), vbCrLf,
";"),";") '





on créé un tableau avec les éléments
For I= 0 to Ubound(MonTableau) ' On parcourt le tableau en testant
la





présence de l'élément dans maListe
If Montableau(I)<>"" then
If Instr(1,Maliste,Montableau(I))=0 then
'On ajoute le mot dans le champs Mot de la Table TMots


Docmd.runsql "INSERT INTO TMots ( Mot )
SELECT '" & Rst("MonChamp") & "' AS Mot;"


EndIf
Endif
Next I
Rst.MoveNext
Wend
Maliste = Left(Maliste, Len(Maliste) - 1) ' contient sous forme
de





liste
les éléments séparés par un ;
Rst.Close
Set Rst = Nothing
DoCmd.Setwarnings = true







End Sub







Il faut donc une table Mots qui existe et qui à un champs Mot.
Peut-être faudrait-il vider la table avant de la remplir: DoCmd.RunSql
"DELETE * FROM Mots ;" avant d'attaquer la boucle while ... Wend
@+
@+



Docmd.setwarnings false pour ne plus avoir le message systéme a chaque

ajout et docmd.setwarnings True pour réactiver l'option ;-)














Avatar
Fabien
On va y arriver ;-)
While Not Rst.EOF
'pour chaque Champs text MonChamp on remplace le retour chariot
par un
; et on concatène dans Maliste
MonTableau = Split(Replace(Nz(Rst("Motscleserie1"), ""), vbCrLf, ";"),
";")
'on créé un tableau avec les éléments
For I = 0 To UBound(MonTableau) ' On parcourt le tableau en testant la
présence de l'élément dans maListe
If MonTableau(I) <> "" Then
'On test si le mot n'est pas déjà dans la table
If Dcount("*","TMOTS","[Mot]='" & MonTableau(I) & "'") = 0 Then
DoCmd.RunSQL "INSERT INTO TMots ( Mots )SELECT '" & MonTableau(I) &
"' AS Mots;"
End If
End If
Next I
Rst.MoveNext
Wend

Ok pour le message warnings, je ne le mettais pas au bon endroit, il était
en dehors de la boucle..
Mais reste l'autre gros souci :
Je pense que ce qui arrive dans la table n'est pas chaque mot séparé comme
dans la liste déroulante que tu m'avais fait faire :
Je n'ai pas tous les mots de chaque enregistrement, mais uniquement le


premeir qui se répète en doublon autant de fois qu'il y en a d'autres après
le Ctrl, et qui ne viennent pas.
je ne récupère pas ce que je plaçais dans la variable "tableau" puor la
liste déroulante???
Merci puor la réactivité et la patience...



"Fabien" a écrit dans le message de news:
47b01b53$0$863$
Merci, c'est en bonne voie...
Mais 2 soucis :
Le Docmd.setwarnings n'accepte que la syntaxe : "DoCmd.SetWarnings
(Warningsoff)"
et en plus m'afiche toujours " vous allez ajouter une ligne..."
Je pense que ce qui arrive dans la table n'est pas chaque mot séparé
comme


dans la liste déroulante que tu m'avais fait faire :
(lignes blanches, doublons, le premier mot uniquement de chaque
enregistrement..)
Je dois manquer une étape.
Je t'envoie le script dans l'état...


Dim Rst As DAO.Recordset
Dim MonTableau As Variant
Dim maliste As String
Dim I As Integer
Set Rst = CurrentDb.OpenRecordset("livres")
'On parcourt Matable
Docmd.SetWarnings False


While Not Rst.EOF
'pour chaque Champs text MonChamp on remplace le retour chariot
par un


; et on concatène dans Maliste
MonTableau = Split(Replace(Nz(Rst("Motscleserie1"), ""), vbCrLf, ";"),
";")


'
'on créé un tableau avec les éléments
For I = 0 To UBound(MonTableau) ' On parcourt le tableau en testant la
présence de l'élément dans maListe
If MonTableau(I) <> "" Then
If InStr(1, maliste, MonTableau(I)) = 0 Then
OUPS !!!! Pas réveillé le gars ;-)

DoCmd.RunSQL "INSERT INTO TMots ( Mots )SELECT '" & MonTableau(I) &
"' AS Mots;"
Devrait faire l'affaire


End If
End If
Next I
Rst.MoveNext
Wend

Rst.Close
Set Rst = Nothing
DoCmd.SetWarnings True






"Fabien" a écrit dans le message de news:
47b00b43$0$888$
Merci, Fabien,
Ca fonctionne bien en plaçant le contenu dans un controle texte,
les mots étaient en ligne, séparés par ; et j'ai mis en colonne en
Maliste = Maliste & MonTableau(I) & vbCrLf,
J'ai donc une liste très longue en colonne.
Mais, si tu résistes, cette liste est très longue, sans tri bien sûr.
Est ce possible de placer mot par mot dans un champ de table, afin
ensuite


d'en faire une requête pour gérer tris et impression ??
dans tous les cas merci pour la patience



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




47aff65a$0$832$
Merci Fabien,
Ca fonctionne très bien et je retrouve tout dans la liste
déroulante,






mais je bute pour passer ce contenu dans une liste de type requête,
car




cette liste doit être imprimée, et de puls vidée de ses lignes vides
et




doublons.
merci d'avance si tu as encore un peu de patience

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




47ac7f6f$0$901$
Merci Fabien pour la contribution.
Ca coince à la ligne ou j'ai pointé le message
d'erreur'utilisation








incorrecte de Null

Remplace

Maliste = Maliste & Replace(Rst("Motscleserie1"), vbCrLf,
";")








&
";"
par
Maliste = Maliste & Replace(nz(Rst("Motscleserie1"),""),
vbCrLf,




";") & ";"
dans certain enreg le champs motscleserie1 est vide

Pour la destination de cette liste, c'est une sortie papier au
final,






alors
ça peut être placé dans uene requête, ou une table..
Merci pour tes réponses

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




47ac5ac1$0$884$
Merci pour l'aide, les mots sont séparés par des sauts à la
ligne











(entrée)
Je place ce code sur un bouton de commande ?
Machaine signifie le no mde mon champ conteant le texte à
extraire?









Dois je créer une table avec un champ "Montableau" ?
Merci d'avance

"Fabien" a écrit dans le message
de











news:
47ac29a2$0$876$
Bonjour,
je cherche le moyen d'extraire mot par mot, chaque mot d'un
champ











texte
qui
en contient plusieurs par enregistrement :
ex: " famille, culture, confiance, etc...)
le but est de faire une liste, un mot par ligne dans une
requête











ou
un
nouveau champ.
Merci pour les conseils
Sylvere


Bonjour Sylvere

Si tes mot sont séparé par des , alors utilise la fonction
split












Dim Montableau as variant
Dim I As Integer
Montableau=split(Machaine,",")
For I=0 to Ubound(MonTableau)
.
.
.
Next I
@+
Reprenons :


Tu as une table. Dans cette table un champ texte qui contient
plusieurs




mots séparés par un retour chariot et tu veux extraire ces mots
pour








en
faire une liste?
J'ai bon là ?
Si j'ai bon alors

Sub Extrait()
Dim Rst As DAO.Recordset
Dim Maliste As String
Set Rst = CurrentDb.OpenRecordset("MaTable")
'>On parcourt Matable
While Not Rst.EOF
'pour chaque Champs text MonChamp on remplace le retour
chariot







par
un ; et on concatène dans Maliste
Maliste = Maliste & Replace(Rst("MonChamp"), vbCrLf, ";") &
";"







Rst.MoveNext
Wend
Maliste = Left(Maliste, Len(Maliste) - 1) ' contient sous forme
de









liste
les éléments séparés par un ;
Rst.Close
Set Rst = Nothing

End Sub
Te permet de reccuperer sous forme de liste.
A toi de voir ce que tu veux en faire.
Par ex: si c'est la source d'une liste déroulante
Me.maliste.rowsource=Maliste
@+
Maliste = Maliste & Replace(nz(Rst("MonChamp"),""), vbCrLf, ";")


Salut,


Qu'entend tu par "liste de type requête" ?
Si c'est pour imprimer cette liste tu peux faire la même manip et
attribuer la valeur Maliste à un contrôle présent sur ton état.
Pour éviter les doublons dans la liste tu fait
Sub Extrait()
Dim Rst As DAO.Recordset
Dim MonTableau as variant
Dim Maliste As String
Dim I as Integer
Set Rst = CurrentDb.OpenRecordset("MaTable")
'On parcourt Matable
While Not Rst.EOF
'pour chaque Champs text MonChamp on remplace le retour chariot
par un ; et on concatène dans Maliste
Montableau = split(Replace(nz(Rst("MonChamp"),""), vbCrLf, ";"),";")
'





on créé un tableau avec les éléments
For I= 0 to Ubound(MonTableau) ' On parcourt le tableau en testant la
présence de l'élément dans maListe
If Montableau(I)<>"" then
If Instr(1,Maliste,Montableau(I))=0 then
Maliste = Maliste & MonTableau(I) & ";"
EndIf
Endif
Next I
Rst.MoveNext
Wend
Maliste = Left(Maliste, Len(Maliste) - 1) ' contient sous forme de
liste
les éléments séparés par un ;
Rst.Close
Set Rst = Nothing

End Sub





@+
Avec un



Dim Rst As DAO.Recordset
Dim MonTableau as variant
Dim Maliste As String
Dim I as Integer
Set Rst = CurrentDb.OpenRecordset("MaTable")
Docmd.setwarnings = false


'On parcourt Matable
While Not Rst.EOF
'pour chaque Champs text MonChamp on remplace le retour
chariot





par un ; et on concatène dans Maliste
Montableau = split(Replace(nz(Rst("MonChamp"),""), vbCrLf,
";"),";") '





on créé un tableau avec les éléments
For I= 0 to Ubound(MonTableau) ' On parcourt le tableau en testant
la





présence de l'élément dans maListe
If Montableau(I)<>"" then
If Instr(1,Maliste,Montableau(I))=0 then
'On ajoute le mot dans le champs Mot de la Table TMots


Docmd.runsql "INSERT INTO TMots ( Mot )
SELECT '" & Rst("MonChamp") & "' AS Mot;"


EndIf
Endif
Next I
Rst.MoveNext
Wend
Maliste = Left(Maliste, Len(Maliste) - 1) ' contient sous forme
de





liste
les éléments séparés par un ;
Rst.Close
Set Rst = Nothing
DoCmd.Setwarnings = true







End Sub







Il faut donc une table Mots qui existe et qui à un champs Mot.
Peut-être faudrait-il vider la table avant de la remplir: DoCmd.RunSql
"DELETE * FROM Mots ;" avant d'attaquer la boucle while ... Wend
@+
@+


Docmd.setwarnings false pour ne plus avoir le message systéme a chaque

ajout et docmd.setwarnings True pour réactiver l'option ;-)


















Avatar
sylvere
Perfect!!!
Un grand merci, Fabien pour ta patience, j'ai même enchainé un Docmd.open
query qui ouvre une requête dans la foulée
Merci
Sylvere
"Fabien" a écrit dans le message de news:
47b02b61$0$863$
On va y arriver ;-)
While Not Rst.EOF
'pour chaque Champs text MonChamp on remplace le retour chariot
par un
; et on concatène dans Maliste
MonTableau = Split(Replace(Nz(Rst("Motscleserie1"), ""), vbCrLf, ";"),
";")
'on créé un tableau avec les éléments
For I = 0 To UBound(MonTableau) ' On parcourt le tableau en testant la
présence de l'élément dans maListe
If MonTableau(I) <> "" Then
'On test si le mot n'est pas déjà dans la table
If Dcount("*","TMOTS","[Mot]='" & MonTableau(I) & "'") = 0 Then
DoCmd.RunSQL "INSERT INTO TMots ( Mots )SELECT '" & MonTableau(I) &
"' AS Mots;"
End If
End If
Next I
Rst.MoveNext
Wend

Ok pour le message warnings, je ne le mettais pas au bon endroit, il
était


en dehors de la boucle..
Mais reste l'autre gros souci :
Je pense que ce qui arrive dans la table n'est pas chaque mot séparé
comme


dans la liste déroulante que tu m'avais fait faire :
Je n'ai pas tous les mots de chaque enregistrement, mais uniquement le


premeir qui se répète en doublon autant de fois qu'il y en a d'autres
après


le Ctrl, et qui ne viennent pas.
je ne récupère pas ce que je plaçais dans la variable "tableau" puor la
liste déroulante???
Merci puor la réactivité et la patience...



"Fabien" a écrit dans le message de news:
47b01b53$0$863$
Merci, c'est en bonne voie...
Mais 2 soucis :
Le Docmd.setwarnings n'accepte que la syntaxe : "DoCmd.SetWarnings
(Warningsoff)"
et en plus m'afiche toujours " vous allez ajouter une ligne..."
Je pense que ce qui arrive dans la table n'est pas chaque mot séparé
comme


dans la liste déroulante que tu m'avais fait faire :
(lignes blanches, doublons, le premier mot uniquement de chaque
enregistrement..)
Je dois manquer une étape.
Je t'envoie le script dans l'état...


Dim Rst As DAO.Recordset
Dim MonTableau As Variant
Dim maliste As String
Dim I As Integer
Set Rst = CurrentDb.OpenRecordset("livres")
'On parcourt Matable
Docmd.SetWarnings False


While Not Rst.EOF
'pour chaque Champs text MonChamp on remplace le retour chariot
par un


; et on concatène dans Maliste
MonTableau = Split(Replace(Nz(Rst("Motscleserie1"), ""), vbCrLf, ";"),
";")


'
'on créé un tableau avec les éléments
For I = 0 To UBound(MonTableau) ' On parcourt le tableau en testant la
présence de l'élément dans maListe
If MonTableau(I) <> "" Then
If InStr(1, maliste, MonTableau(I)) = 0 Then
OUPS !!!! Pas réveillé le gars ;-)

DoCmd.RunSQL "INSERT INTO TMots ( Mots )SELECT '" & MonTableau(I) &
"' AS Mots;"
Devrait faire l'affaire


End If
End If
Next I
Rst.MoveNext
Wend

Rst.Close
Set Rst = Nothing
DoCmd.SetWarnings True






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




47b00b43$0$888$
Merci, Fabien,
Ca fonctionne bien en plaçant le contenu dans un controle texte,
les mots étaient en ligne, séparés par ; et j'ai mis en colonne en
Maliste = Maliste & MonTableau(I) & vbCrLf,
J'ai donc une liste très longue en colonne.
Mais, si tu résistes, cette liste est très longue, sans tri bien
sûr.






Est ce possible de placer mot par mot dans un champ de table, afin
ensuite


d'en faire une requête pour gérer tris et impression ??
dans tous les cas merci pour la patience



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




47aff65a$0$832$
Merci Fabien,
Ca fonctionne très bien et je retrouve tout dans la liste
déroulante,






mais je bute pour passer ce contenu dans une liste de type
requête,








car
cette liste doit être imprimée, et de puls vidée de ses lignes
vides








et
doublons.
merci d'avance si tu as encore un peu de patience

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




47ac7f6f$0$901$
Merci Fabien pour la contribution.
Ca coince à la ligne ou j'ai pointé le message
d'erreur'utilisation








incorrecte de Null

Remplace

Maliste = Maliste & Replace(Rst("Motscleserie1"), vbCrLf,
";")








&
";"
par
Maliste = Maliste & Replace(nz(Rst("Motscleserie1"),""),
vbCrLf,




";") & ";"
dans certain enreg le champs motscleserie1 est vide

Pour la destination de cette liste, c'est une sortie papier au
final,






alors
ça peut être placé dans uene requête, ou une table..
Merci pour tes réponses

"Fabien" a écrit dans le message
de










news:
47ac5ac1$0$884$
Merci pour l'aide, les mots sont séparés par des sauts à la
ligne











(entrée)
Je place ce code sur un bouton de commande ?
Machaine signifie le no mde mon champ conteant le texte à
extraire?









Dois je créer une table avec un champ "Montableau" ?
Merci d'avance

"Fabien" a écrit dans le
message













de
news:
47ac29a2$0$876$
Bonjour,
je cherche le moyen d'extraire mot par mot, chaque mot d'un
champ











texte
qui
en contient plusieurs par enregistrement :
ex: " famille, culture, confiance, etc...)
le but est de faire une liste, un mot par ligne dans une
requête











ou
un
nouveau champ.
Merci pour les conseils
Sylvere


Bonjour Sylvere

Si tes mot sont séparé par des , alors utilise la fonction
split












Dim Montableau as variant
Dim I As Integer
Montableau=split(Machaine,",")
For I=0 to Ubound(MonTableau)
.
.
.
Next I
@+
Reprenons :


Tu as une table. Dans cette table un champ texte qui contient
plusieurs




mots séparés par un retour chariot et tu veux extraire ces
mots












pour
en
faire une liste?
J'ai bon là ?
Si j'ai bon alors

Sub Extrait()
Dim Rst As DAO.Recordset
Dim Maliste As String
Set Rst = CurrentDb.OpenRecordset("MaTable")
'>On parcourt Matable
While Not Rst.EOF
'pour chaque Champs text MonChamp on remplace le retour
chariot







par
un ; et on concatène dans Maliste
Maliste = Maliste & Replace(Rst("MonChamp"), vbCrLf, ";")
&











";"
Rst.MoveNext
Wend
Maliste = Left(Maliste, Len(Maliste) - 1) ' contient sous forme
de









liste
les éléments séparés par un ;
Rst.Close
Set Rst = Nothing

End Sub
Te permet de reccuperer sous forme de liste.
A toi de voir ce que tu veux en faire.
Par ex: si c'est la source d'une liste déroulante
Me.maliste.rowsource=Maliste
@+
Maliste = Maliste & Replace(nz(Rst("MonChamp"),""), vbCrLf, ";")


Salut,


Qu'entend tu par "liste de type requête" ?
Si c'est pour imprimer cette liste tu peux faire la même manip et
attribuer la valeur Maliste à un contrôle présent sur ton état.
Pour éviter les doublons dans la liste tu fait
Sub Extrait()
Dim Rst As DAO.Recordset
Dim MonTableau as variant
Dim Maliste As String
Dim I as Integer
Set Rst = CurrentDb.OpenRecordset("MaTable")
'On parcourt Matable
While Not Rst.EOF
'pour chaque Champs text MonChamp on remplace le retour
chariot







par un ; et on concatène dans Maliste
Montableau = split(Replace(nz(Rst("MonChamp"),""), vbCrLf,
";"),";")







'
on créé un tableau avec les éléments
For I= 0 to Ubound(MonTableau) ' On parcourt le tableau en testant
la







présence de l'élément dans maListe
If Montableau(I)<>"" then
If Instr(1,Maliste,Montableau(I))=0 then
Maliste = Maliste & MonTableau(I) & ";"
EndIf
Endif
Next I
Rst.MoveNext
Wend
Maliste = Left(Maliste, Len(Maliste) - 1) ' contient sous forme
de







liste
les éléments séparés par un ;
Rst.Close
Set Rst = Nothing

End Sub





@+
Avec un



Dim Rst As DAO.Recordset
Dim MonTableau as variant
Dim Maliste As String
Dim I as Integer
Set Rst = CurrentDb.OpenRecordset("MaTable")
Docmd.setwarnings = false


'On parcourt Matable
While Not Rst.EOF
'pour chaque Champs text MonChamp on remplace le retour
chariot





par un ; et on concatène dans Maliste
Montableau = split(Replace(nz(Rst("MonChamp"),""), vbCrLf,
";"),";") '





on créé un tableau avec les éléments
For I= 0 to Ubound(MonTableau) ' On parcourt le tableau en
testant







la
présence de l'élément dans maListe
If Montableau(I)<>"" then
If Instr(1,Maliste,Montableau(I))=0 then
'On ajoute le mot dans le champs Mot de la Table TMots


Docmd.runsql "INSERT INTO TMots ( Mot )
SELECT '" & Rst("MonChamp") & "' AS Mot;"


EndIf
Endif
Next I
Rst.MoveNext
Wend
Maliste = Left(Maliste, Len(Maliste) - 1) ' contient sous forme
de





liste
les éléments séparés par un ;
Rst.Close
Set Rst = Nothing
DoCmd.Setwarnings = true







End Sub







Il faut donc une table Mots qui existe et qui à un champs Mot.
Peut-être faudrait-il vider la table avant de la remplir:
DoCmd.RunSql





"DELETE * FROM Mots ;" avant d'attaquer la boucle while ... Wend
@+
@+


Docmd.setwarnings false pour ne plus avoir le message systéme a chaque

ajout et docmd.setwarnings True pour réactiver l'option ;-)




















1 2