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
RemplaceMaliste = Maliste & Replace(Rst("Motscleserie1"), vbCrLf, ";")
&
";"parMaliste = Maliste & Replace(nz(Rst("Motscleserie1"),""),
vbCrLf,";") & ";"
dans certain enreg le champs motscleserie1 est videPour 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
textequien contient plusieurs par enregistrement :
ex: " famille, culture, confiance, etc...)
le but est de faire une liste, un mot par ligne dans une
requête
ouunnouveau 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
plusieursmots séparés par un retour chariot et tu veux extraire ces mots
pour
enfaire 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
parun ; 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
listeles é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
listeles éléments séparés par un ;
Rst.Close
Set Rst = Nothing
End Sub
@+
Avec unDim 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
listeles é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
@+
@+
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" <UrbaniakFabienxxxxx@Neuf.fr> a écrit dans le message de news:
47aff65a$0$832$ba4acef3@news.orange.fr...
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" <UrbaniakFabienxxxxx@Neuf.fr> a écrit dans le message de
news:
47ac7f6f$0$901$ba4acef3@news.orange.fr...
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" <UrbaniakFabienxxxxx@Neuf.fr> a écrit dans le message de
news:
47ac5ac1$0$884$ba4acef3@news.orange.fr...
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" <UrbaniakFabienxxxxx@Neuf.fr> a écrit dans le message de
news:
47ac29a2$0$876$ba4acef3@news.orange.fr...
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
@+
@+
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
RemplaceMaliste = Maliste & Replace(Rst("Motscleserie1"), vbCrLf, ";")
&
";"parMaliste = Maliste & Replace(nz(Rst("Motscleserie1"),""),
vbCrLf,";") & ";"
dans certain enreg le champs motscleserie1 est videPour 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
textequien contient plusieurs par enregistrement :
ex: " famille, culture, confiance, etc...)
le but est de faire une liste, un mot par ligne dans une
requête
ouunnouveau 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
plusieursmots séparés par un retour chariot et tu veux extraire ces mots
pour
enfaire 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
parun ; 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
listeles é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
listeles éléments séparés par un ;
Rst.Close
Set Rst = Nothing
End Sub
@+
Avec unDim 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
listeles é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
@+
@+
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
End If
End If
Next I
Rst.MoveNext
Wend
Rst.Close
Set Rst = Nothing
"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
ensuited'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,
carcette liste doit être imprimée, et de puls vidée de ses lignes vides
etdoublons.
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
RemplaceMaliste = Maliste & Replace(Rst("Motscleserie1"), vbCrLf, ";")
&";"parMaliste = Maliste & Replace(nz(Rst("Motscleserie1"),""),
vbCrLf,";") & ";"
dans certain enreg le champs motscleserie1 est videPour 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
champtextequien contient plusieurs par enregistrement :
ex: " famille, culture, confiance, etc...)
le but est de faire une liste, un mot par ligne dans une
requêteouunnouveau 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
plusieursmots séparés par un retour chariot et tu veux extraire ces mots
pourenfaire 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
chariotparun ; 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
listeles é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
listeles éléments séparés par un ;
Rst.Close
Set Rst = Nothing
End Sub
@+
Avec unDim 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
listeles é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
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
End If
End If
Next I
Rst.MoveNext
Wend
Rst.Close
Set Rst = Nothing
"Fabien" <UrbaniakFabienxxxxx@Neuf.fr> a écrit dans le message de news:
47b00b43$0$888$ba4acef3@news.orange.fr...
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" <UrbaniakFabienxxxxx@Neuf.fr> a écrit dans le message de news:
47aff65a$0$832$ba4acef3@news.orange.fr...
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" <UrbaniakFabienxxxxx@Neuf.fr> a écrit dans le message de
news:
47ac7f6f$0$901$ba4acef3@news.orange.fr...
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" <UrbaniakFabienxxxxx@Neuf.fr> a écrit dans le message de
news:
47ac5ac1$0$884$ba4acef3@news.orange.fr...
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" <UrbaniakFabienxxxxx@Neuf.fr> a écrit dans le message de
news:
47ac29a2$0$876$ba4acef3@news.orange.fr...
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
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
End If
End If
Next I
Rst.MoveNext
Wend
Rst.Close
Set Rst = Nothing
"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
ensuited'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,
carcette liste doit être imprimée, et de puls vidée de ses lignes vides
etdoublons.
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
RemplaceMaliste = Maliste & Replace(Rst("Motscleserie1"), vbCrLf, ";")
&";"parMaliste = Maliste & Replace(nz(Rst("Motscleserie1"),""),
vbCrLf,";") & ";"
dans certain enreg le champs motscleserie1 est videPour 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
champtextequien contient plusieurs par enregistrement :
ex: " famille, culture, confiance, etc...)
le but est de faire une liste, un mot par ligne dans une
requêteouunnouveau 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
plusieursmots séparés par un retour chariot et tu veux extraire ces mots
pourenfaire 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
chariotparun ; 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
listeles é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
listeles éléments séparés par un ;
Rst.Close
Set Rst = Nothing
End Sub
@+
Avec unDim 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
listeles é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
dans la liste déroulante que tu m'avais fait faire :
Je n'ai pas tous les mots de chaque enregistrement, mais uniquement le
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 FalseWhile 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'affaireEnd 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
ensuited'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,
carcette liste doit être imprimée, et de puls vidée de ses lignes vides
etdoublons.
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
RemplaceMaliste = Maliste & Replace(Rst("Motscleserie1"), vbCrLf,
";")
&";"parMaliste = Maliste & Replace(nz(Rst("Motscleserie1"),""),
vbCrLf,";") & ";"
dans certain enreg le champs motscleserie1 est videPour 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
champtextequien contient plusieurs par enregistrement :
ex: " famille, culture, confiance, etc...)
le but est de faire une liste, un mot par ligne dans une
requêteouunnouveau 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
plusieursmots séparés par un retour chariot et tu veux extraire ces mots
pourenfaire 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
chariotparun ; 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
listeles é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
listeles éléments séparés par un ;
Rst.Close
Set Rst = Nothing
End Sub
@+
Avec unDim 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
listeles é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 ;-)
dans la liste déroulante que tu m'avais fait faire :
Je n'ai pas tous les mots de chaque enregistrement, mais uniquement le
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" <UrbaniakFabienxxxxx@Neuf.fr> a écrit dans le message de news:
47b00b43$0$888$ba4acef3@news.orange.fr...
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" <UrbaniakFabienxxxxx@Neuf.fr> a écrit dans le message de
news:
47aff65a$0$832$ba4acef3@news.orange.fr...
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" <UrbaniakFabienxxxxx@Neuf.fr> a écrit dans le message de
news:
47ac7f6f$0$901$ba4acef3@news.orange.fr...
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" <UrbaniakFabienxxxxx@Neuf.fr> a écrit dans le message de
news:
47ac5ac1$0$884$ba4acef3@news.orange.fr...
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" <UrbaniakFabienxxxxx@Neuf.fr> a écrit dans le message
de
news:
47ac29a2$0$876$ba4acef3@news.orange.fr...
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 ;-)
dans la liste déroulante que tu m'avais fait faire :
Je n'ai pas tous les mots de chaque enregistrement, mais uniquement le
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 FalseWhile 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'affaireEnd 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
ensuited'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,
carcette liste doit être imprimée, et de puls vidée de ses lignes vides
etdoublons.
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
RemplaceMaliste = Maliste & Replace(Rst("Motscleserie1"), vbCrLf,
";")
&";"parMaliste = Maliste & Replace(nz(Rst("Motscleserie1"),""),
vbCrLf,";") & ";"
dans certain enreg le champs motscleserie1 est videPour 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
champtextequien contient plusieurs par enregistrement :
ex: " famille, culture, confiance, etc...)
le but est de faire une liste, un mot par ligne dans une
requêteouunnouveau 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
plusieursmots séparés par un retour chariot et tu veux extraire ces mots
pourenfaire 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
chariotparun ; 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
listeles é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
listeles éléments séparés par un ;
Rst.Close
Set Rst = Nothing
End Sub
@+
Avec unDim 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
listeles é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 ;-)
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é commedans 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é
commedans 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 FalseWhile 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'affaireEnd 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
ensuited'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,
carcette liste doit être imprimée, et de puls vidée de ses lignes vides
etdoublons.
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'utilisationincorrecte de Null
RemplaceMaliste = Maliste & Replace(Rst("Motscleserie1"), vbCrLf,
";")&";"parMaliste = Maliste & Replace(nz(Rst("Motscleserie1"),""),
vbCrLf,";") & ";"
dans certain enreg le champs motscleserie1 est videPour 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
denews:47ac29a2$0$876$Bonjour,
je cherche le moyen d'extraire mot par mot, chaque mot d'un
champtextequien contient plusieurs par enregistrement :
ex: " famille, culture, confiance, etc...)
le but est de faire une liste, un mot par ligne dans une
requêteouunnouveau champ.
Merci pour les conseils
Sylvere
Bonjour Sylvere
Si tes mot sont séparé par des , alors utilise la fonction
splitDim 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
plusieursmots séparés par un retour chariot et tu veux extraire ces mots
pourenfaire 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
chariotparun ; et on concatène dans Maliste
Maliste = Maliste & Replace(Rst("MonChamp"), vbCrLf, ";") &
";"Rst.MoveNext
Wend
Maliste = Left(Maliste, Len(Maliste) - 1) ' contient sous forme
delisteles é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
listeles éléments séparés par un ;
Rst.Close
Set Rst = Nothing
End Sub
@+
Avec unDim 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
chariotpar 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
lapré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
delisteles é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 ;-)
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" <UrbaniakFabienxxxxx@Neuf.fr> a écrit dans le message de news:
47b01b53$0$863$ba4acef3@news.orange.fr...
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" <UrbaniakFabienxxxxx@Neuf.fr> a écrit dans le message de news:
47b00b43$0$888$ba4acef3@news.orange.fr...
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" <UrbaniakFabienxxxxx@Neuf.fr> a écrit dans le message de
news:
47aff65a$0$832$ba4acef3@news.orange.fr...
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" <UrbaniakFabienxxxxx@Neuf.fr> a écrit dans le message de
news:
47ac7f6f$0$901$ba4acef3@news.orange.fr...
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" <UrbaniakFabienxxxxx@Neuf.fr> a écrit dans le message de
news:
47ac5ac1$0$884$ba4acef3@news.orange.fr...
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" <UrbaniakFabienxxxxx@Neuf.fr> a écrit dans le message
de
news:
47ac29a2$0$876$ba4acef3@news.orange.fr...
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 ;-)
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é commedans 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é
commedans 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 FalseWhile 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'affaireEnd 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
ensuited'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,
carcette liste doit être imprimée, et de puls vidée de ses lignes vides
etdoublons.
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'utilisationincorrecte de Null
RemplaceMaliste = Maliste & Replace(Rst("Motscleserie1"), vbCrLf,
";")&";"parMaliste = Maliste & Replace(nz(Rst("Motscleserie1"),""),
vbCrLf,";") & ";"
dans certain enreg le champs motscleserie1 est videPour 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
denews:47ac29a2$0$876$Bonjour,
je cherche le moyen d'extraire mot par mot, chaque mot d'un
champtextequien contient plusieurs par enregistrement :
ex: " famille, culture, confiance, etc...)
le but est de faire une liste, un mot par ligne dans une
requêteouunnouveau champ.
Merci pour les conseils
Sylvere
Bonjour Sylvere
Si tes mot sont séparé par des , alors utilise la fonction
splitDim 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
plusieursmots séparés par un retour chariot et tu veux extraire ces mots
pourenfaire 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
chariotparun ; et on concatène dans Maliste
Maliste = Maliste & Replace(Rst("MonChamp"), vbCrLf, ";") &
";"Rst.MoveNext
Wend
Maliste = Left(Maliste, Len(Maliste) - 1) ' contient sous forme
delisteles é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
listeles éléments séparés par un ;
Rst.Close
Set Rst = Nothing
End Sub
@+
Avec unDim 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
chariotpar 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
lapré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
delisteles é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 ;-)
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
WendOk 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é
commedans 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 FalseWhile 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'affaireEnd 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
ensuited'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,
carcette liste doit être imprimée, et de puls vidée de ses lignes
vides
etdoublons.
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'utilisationincorrecte de Null
RemplaceMaliste = Maliste & Replace(Rst("Motscleserie1"), vbCrLf,
";")&";"parMaliste = Maliste & Replace(nz(Rst("Motscleserie1"),""),
vbCrLf,";") & ";"
dans certain enreg le champs motscleserie1 est videPour 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
denews:47ac29a2$0$876$Bonjour,
je cherche le moyen d'extraire mot par mot, chaque mot d'un
champtextequien contient plusieurs par enregistrement :
ex: " famille, culture, confiance, etc...)
le but est de faire une liste, un mot par ligne dans une
requêteouunnouveau champ.
Merci pour les conseils
Sylvere
Bonjour Sylvere
Si tes mot sont séparé par des , alors utilise la fonction
splitDim 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
plusieursmots séparés par un retour chariot et tu veux extraire ces
mots
pourenfaire 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
chariotparun ; et on concatène dans Maliste
Maliste = Maliste & Replace(Rst("MonChamp"), vbCrLf, ";")
&
";"Rst.MoveNext
Wend
Maliste = Left(Maliste, Len(Maliste) - 1) ' contient sous forme
delisteles é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
listeles éléments séparés par un ;
Rst.Close
Set Rst = Nothing
End Sub
@+
Avec unDim 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
chariotpar 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
lapré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
delisteles é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 ;-)
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" <UrbaniakFabienxxxxx@Neuf.fr> a écrit dans le message de news:
47b01b53$0$863$ba4acef3@news.orange.fr...
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" <UrbaniakFabienxxxxx@Neuf.fr> a écrit dans le message de
news:
47b00b43$0$888$ba4acef3@news.orange.fr...
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" <UrbaniakFabienxxxxx@Neuf.fr> a écrit dans le message de
news:
47aff65a$0$832$ba4acef3@news.orange.fr...
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" <UrbaniakFabienxxxxx@Neuf.fr> a écrit dans le message de
news:
47ac7f6f$0$901$ba4acef3@news.orange.fr...
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" <UrbaniakFabienxxxxx@Neuf.fr> a écrit dans le message
de
news:
47ac5ac1$0$884$ba4acef3@news.orange.fr...
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" <UrbaniakFabienxxxxx@Neuf.fr> a écrit dans le
message
de
news:
47ac29a2$0$876$ba4acef3@news.orange.fr...
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 ;-)
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
WendOk 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é
commedans 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 FalseWhile 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'affaireEnd 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
ensuited'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,
carcette liste doit être imprimée, et de puls vidée de ses lignes
vides
etdoublons.
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'utilisationincorrecte de Null
RemplaceMaliste = Maliste & Replace(Rst("Motscleserie1"), vbCrLf,
";")&";"parMaliste = Maliste & Replace(nz(Rst("Motscleserie1"),""),
vbCrLf,";") & ";"
dans certain enreg le champs motscleserie1 est videPour 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
denews:47ac29a2$0$876$Bonjour,
je cherche le moyen d'extraire mot par mot, chaque mot d'un
champtextequien contient plusieurs par enregistrement :
ex: " famille, culture, confiance, etc...)
le but est de faire une liste, un mot par ligne dans une
requêteouunnouveau champ.
Merci pour les conseils
Sylvere
Bonjour Sylvere
Si tes mot sont séparé par des , alors utilise la fonction
splitDim 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
plusieursmots séparés par un retour chariot et tu veux extraire ces
mots
pourenfaire 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
chariotparun ; et on concatène dans Maliste
Maliste = Maliste & Replace(Rst("MonChamp"), vbCrLf, ";")
&
";"Rst.MoveNext
Wend
Maliste = Left(Maliste, Len(Maliste) - 1) ' contient sous forme
delisteles é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
listeles éléments séparés par un ;
Rst.Close
Set Rst = Nothing
End Sub
@+
Avec unDim 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
chariotpar 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
lapré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
delisteles é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 ;-)