OVH Cloud OVH Cloud

Séparateur

25 réponses
Avatar
PatCatNat's
Bonsoir,

Dans un formulaire, j'ai un champ mémo dans ma base de données (Access2003)
de films qui contient les noms des acteurs (nombre variable) séparés par des
virgules + espace :

[Acteurs] : Cellian Murphy, Naomie Harris, Brendan Gleeson, Christopher
Eccleston, Megan Burns, Noah Huntley

Pour effectuer un traitement ultérieur, j'aurais voulu créer une table par
procédure VBA avec [NumFilm] et [Acteurs] :

[NumFilm] [Acteurs]
01 Cellian Murphy
01 Naomie Harris
01 Brendan Gleeson
01 Christopher Eccleston
01 Megan Burns
01 Noah Huntley

J'ai bien essayé en exportant en texte et en essayant de réimporter et
trouver une requête qui me fasse l'affaire... mais nothing...

Quelqu'un aurait une idée ????

Patrice

10 réponses

1 2 3
Avatar
PatCatNat's
Je m'y colle et tiens au courant.

Encore merci, car de toute façon je crois que je dormirais (si je dors...
car access est un excellent contraceptif ;o)))) plus instruit ce soir...
(Info : Cette base est en Acceess 2003 contrairement à mes autres bases(97),
mais je franchis le pas...)

Patrice


"Gafish" a écrit dans le message de
news:ev$
J'ai pensé à mieux depuis tout à l'heure, tu as la fonction Split qui
permet

de scinder un string en fonction d'un caractère séparateur (ici la virgule
donc) et mettre tout cela dans un tableau.
Soit LesActeurs ton texte (ou string donc, c'est bon à connaitre, ca fait
partie des ficelles du métier :p bon d'accord elle était facile )

Exemple :
Dim MonTab() as string
MonTab = Split(LesActeurs, ",")

Et là tu as maintenant dans ton tableau MonTab tous tes acteurs. Il ne te
reste plus qu'à le parcourir et à faire un insert à chaque fois :

Dim MonInd as integer
For MonInd = 1 To UBound(MonTab)
'ici tu as ton acteur dans MonTab(MonInd) tu peux donc faire ton
insert

avec cela
Next


"PatCatNat's" a écrit dans le message news:
cjghal$grq$
Merci Arnaud,

J'en suis au point où je viens de regarder dans le tiroir de la commode
de


ma fille pour trouver un sting ;o)))

Plaisanterie mise à part, j'ai regarder dans la commode Help de visual
basic, car je ne connaissais pas !!!
Effectivement celà ressemble à ce que je cherche, mais je sèche...(ce
n'est

pas commode... :-)))

Pourrais-tu m'écrire un bout de code sur l'idée que tu développes STP ?

Patrice


"Gafish" a écrit dans le message de
news:
Bonjour,

Je pense que le mieux à faire c'est en vba de :
- Stocker ton champ mémo dans un string
- Avec un InStr tu repéres les emplacements de virgules
- A chaque emplacement de virgule tu prends la partie gauche,
et



tu
fais un insert avec dans ta table
- Tu coupes ton string par la droite, en enlevant la partie
gauche


et la virgule

Et tu boucles la dessus jusqu'à la fin de ton string. Ton string va se
réduite au fil des boucles, acteurs par acteurs.
Après il faudra peut être que tu géres les doublons, comment tu fais
si



un
nom revient ?

Arnaud

"PatCatNat's" a écrit dans le message news:
cjgcfd$jed$
Bonjour et merci,

L'utilité est de pouvoir créer un état (ou autre objet) par la suite
pour


pouvoir choisir un acteur existant dans ma base et savoir dans quels
films


par exemple il a joué (ou si film musical dans quels morceaux il est
présent

aussi, etc...).
Mais le champs mémo m'intéresse aussi, car j'obtiens les données par
copier/coller dans le net et de plus celà me permet de pouvoir faire
des



états avec un seul champ et toutes les données dedans.
Donc comme tu dis, je tiens à faire spécifiquement une table acteur,
mais


je
ne sais pas par quel voie passer pour trouver une formule du type :

"Après chaque virgule + espace je passe à un enregistrement suivant"

Bref, tout un film...

Patrice


"JMH" a écrit dans le message de
news:%
Salut
Il te faut faire une procédure spéciale qui va te lire chaque
Enregistrement

de Film et y extraire les Acteurs(Extraction du fichier mémo en se
déplacant

à l'intérieur selon la logique que tu as mise en place)
Ces 2 données sont injectées dans une table, soit pour chaque
entregistrement = autant d'ajout qu'il y a d'acteurs.
Mais ton traitement ne s'arrête pas là. En effet tu as des mêmes
acteurs



qui
sont dans des films différents, donnc il te faut une table
Acteurs.





En fait dans ton formulaire, plutot que de mettre les acteurs en
champ




Mémo,
tu devras créer un sous-formulaire(ActeurFilm) dans lequel tu y
mettra




les
acteurs pour le film.

Il faut savoir à quoi tu désires utiliser ça. Selon les cas ta
base





est
à
redéfinir.

Bonne journée.

Bye

"PatCatNat's" a écrit dans le message de
news:cjfaeo$pq7$
Bonsoir,

Dans un formulaire, j'ai un champ mémo dans ma base de données
(Access2003)

de films qui contient les noms des acteurs (nombre variable)
séparés





par
des
virgules + espace :

[Acteurs] : Cellian Murphy, Naomie Harris, Brendan Gleeson,
Christopher



Eccleston, Megan Burns, Noah Huntley

Pour effectuer un traitement ultérieur, j'aurais voulu créer une
table




par
procédure VBA avec [NumFilm] et [Acteurs] :

[NumFilm] [Acteurs]
01 Cellian Murphy
01 Naomie Harris
01 Brendan Gleeson
01 Christopher Eccleston
01 Megan Burns
01 Noah Huntley

J'ai bien essayé en exportant en texte et en essayant de
réimporter





et
trouver une requête qui me fasse l'affaire... mais nothing...

Quelqu'un aurait une idée ????

Patrice
























Avatar
Gafish
Oui, tout à fait, mais pour le 1 la base était précisée 2003. En revanche je
suis allé effectivement un peu vite dans le 2, merci de la rectification :)

"Jessy Sempere [MVP]" a écrit dans le message
news: cjgift$gc7$
Bonjour

Petite remarque

1°) Fonction "Split()" pas dispo sous Access 97

2°) > Dim MonInd as integer
For MonInd = 1 To UBound(MonTab)
'ici tu as ton acteur dans MonTab(MonInd) tu peux donc faire
ton insert


avec cela
Next


Une variable tableau commence à 0 donc il te manqueta la première
valeur...

Soit tu met dans ton module Option Base 1
Soit tu boucle en faisant :
for monInd = 0 to ubound(montab)-1
...
next

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Gafish" a écrit dans le message news:
ev$
J'ai pensé à mieux depuis tout à l'heure, tu as la fonction Split qui
permet


de scinder un string en fonction d'un caractère séparateur (ici la
virgule


donc) et mettre tout cela dans un tableau.
Soit LesActeurs ton texte (ou string donc, c'est bon à connaitre, ca
fait


partie des ficelles du métier :p bon d'accord elle était facile )

Exemple :
Dim MonTab() as string
MonTab = Split(LesActeurs, ",")

Et là tu as maintenant dans ton tableau MonTab tous tes acteurs. Il ne
te


reste plus qu'à le parcourir et à faire un insert à chaque fois :

Dim MonInd as integer
For MonInd = 1 To UBound(MonTab)
'ici tu as ton acteur dans MonTab(MonInd) tu peux donc faire ton
insert


avec cela
Next


"PatCatNat's" a écrit dans le message news:
cjghal$grq$
Merci Arnaud,

J'en suis au point où je viens de regarder dans le tiroir de la
commode de



ma fille pour trouver un sting ;o)))

Plaisanterie mise à part, j'ai regarder dans la commode Help de visual
basic, car je ne connaissais pas !!!
Effectivement celà ressemble à ce que je cherche, mais je sèche...(ce
n'est

pas commode... :-)))

Pourrais-tu m'écrire un bout de code sur l'idée que tu développes STP
?




Patrice


"Gafish" a écrit dans le message de
news:
Bonjour,

Je pense que le mieux à faire c'est en vba de :
- Stocker ton champ mémo dans un string
- Avec un InStr tu repéres les emplacements de virgules
- A chaque emplacement de virgule tu prends la partie
gauche, et




tu
fais un insert avec dans ta table
- Tu coupes ton string par la droite, en enlevant la partie
gauche


et la virgule

Et tu boucles la dessus jusqu'à la fin de ton string. Ton string va
se




réduite au fil des boucles, acteurs par acteurs.
Après il faudra peut être que tu géres les doublons, comment tu fais
si




un
nom revient ?

Arnaud

"PatCatNat's" a écrit dans le message news:
cjgcfd$jed$
Bonjour et merci,

L'utilité est de pouvoir créer un état (ou autre objet) par la
suite





pour
pouvoir choisir un acteur existant dans ma base et savoir dans
quels





films
par exemple il a joué (ou si film musical dans quels morceaux il
est





présent
aussi, etc...).
Mais le champs mémo m'intéresse aussi, car j'obtiens les données
par





copier/coller dans le net et de plus celà me permet de pouvoir
faire





des
états avec un seul champ et toutes les données dedans.
Donc comme tu dis, je tiens à faire spécifiquement une table
acteur,





mais
je
ne sais pas par quel voie passer pour trouver une formule du type
:






"Après chaque virgule + espace je passe à un enregistrement
suivant"






Bref, tout un film...

Patrice


"JMH" a écrit dans le message de
news:%
Salut
Il te faut faire une procédure spéciale qui va te lire chaque
Enregistrement

de Film et y extraire les Acteurs(Extraction du fichier mémo en
se






déplacant
à l'intérieur selon la logique que tu as mise en place)
Ces 2 données sont injectées dans une table, soit pour chaque
entregistrement = autant d'ajout qu'il y a d'acteurs.
Mais ton traitement ne s'arrête pas là. En effet tu as des mêmes
acteurs



qui
sont dans des films différents, donnc il te faut une table
Acteurs.






En fait dans ton formulaire, plutot que de mettre les acteurs en
champ




Mémo,
tu devras créer un sous-formulaire(ActeurFilm) dans lequel tu y
mettra




les
acteurs pour le film.

Il faut savoir à quoi tu désires utiliser ça. Selon les cas ta
base






est
à
redéfinir.

Bonne journée.

Bye

"PatCatNat's" a écrit dans le message
de






news:cjfaeo$pq7$
Bonsoir,

Dans un formulaire, j'ai un champ mémo dans ma base de données
(Access2003)

de films qui contient les noms des acteurs (nombre variable)
séparés





par
des
virgules + espace :

[Acteurs] : Cellian Murphy, Naomie Harris, Brendan Gleeson,
Christopher



Eccleston, Megan Burns, Noah Huntley

Pour effectuer un traitement ultérieur, j'aurais voulu créer
une







table
par
procédure VBA avec [NumFilm] et [Acteurs] :

[NumFilm] [Acteurs]
01 Cellian Murphy
01 Naomie Harris
01 Brendan Gleeson
01 Christopher Eccleston
01 Megan Burns
01 Noah Huntley

J'ai bien essayé en exportant en texte et en essayant de
réimporter





et
trouver une requête qui me fasse l'affaire... mais nothing...

Quelqu'un aurait une idée ????

Patrice




























Avatar
Jessy Sempere [MVP]
Pour ceux qui sont sous 97, voilà l'équivalent de la fonction Split()

********************************************************
Function fSplit(strSplit As String, strSep As String) As Variant

Dim L%, nb%, p%
Dim strResult As String
Dim varResult() As Variant

If IsNull(strSplit) Then
fSplit = Null
Else
strResult = strSplit
L = Len(strSep)
p = InStr(1, strSplit, strSep)
If p = 0 Then
fSplit = strSplit
Else
Do While p > 0
nb = nb + 1
ReDim Preserve varResult(nb)
varResult(nb - 1) = left(strResult, p - 1)
strResult = Mid(strResult, p + L)
p = InStr(1, strResult, strSep)
If p = 0 Then varResult(nb) = strResult
Loop
fSplit = varResult()
End If
End If
End Function
********************************************************

--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"PatCatNat's" a écrit dans le message news:
cjgjig$n40$
Je m'y colle et tiens au courant.

Encore merci, car de toute façon je crois que je dormirais (si je dors...
car access est un excellent contraceptif ;o)))) plus instruit ce soir...
(Info : Cette base est en Acceess 2003 contrairement à mes autres bases(97),
mais je franchis le pas...)

Patrice


"Gafish" a écrit dans le message de
news:ev$
J'ai pensé à mieux depuis tout à l'heure, tu as la fonction Split qui
permet

de scinder un string en fonction d'un caractère séparateur (ici la virgule
donc) et mettre tout cela dans un tableau.
Soit LesActeurs ton texte (ou string donc, c'est bon à connaitre, ca fait
partie des ficelles du métier :p bon d'accord elle était facile )

Exemple :
Dim MonTab() as string
MonTab = Split(LesActeurs, ",")

Et là tu as maintenant dans ton tableau MonTab tous tes acteurs. Il ne te
reste plus qu'à le parcourir et à faire un insert à chaque fois :

Dim MonInd as integer
For MonInd = 1 To UBound(MonTab)
'ici tu as ton acteur dans MonTab(MonInd) tu peux donc faire ton
insert

avec cela
Next


"PatCatNat's" a écrit dans le message news:
cjghal$grq$
Merci Arnaud,

J'en suis au point où je viens de regarder dans le tiroir de la commode
de


ma fille pour trouver un sting ;o)))

Plaisanterie mise à part, j'ai regarder dans la commode Help de visual
basic, car je ne connaissais pas !!!
Effectivement celà ressemble à ce que je cherche, mais je sèche...(ce
n'est

pas commode... :-)))

Pourrais-tu m'écrire un bout de code sur l'idée que tu développes STP ?

Patrice


"Gafish" a écrit dans le message de
news:
Bonjour,

Je pense que le mieux à faire c'est en vba de :
- Stocker ton champ mémo dans un string
- Avec un InStr tu repéres les emplacements de virgules
- A chaque emplacement de virgule tu prends la partie gauche,
et



tu
fais un insert avec dans ta table
- Tu coupes ton string par la droite, en enlevant la partie
gauche


et la virgule

Et tu boucles la dessus jusqu'à la fin de ton string. Ton string va se
réduite au fil des boucles, acteurs par acteurs.
Après il faudra peut être que tu géres les doublons, comment tu fais
si



un
nom revient ?

Arnaud

"PatCatNat's" a écrit dans le message news:
cjgcfd$jed$
Bonjour et merci,

L'utilité est de pouvoir créer un état (ou autre objet) par la suite
pour


pouvoir choisir un acteur existant dans ma base et savoir dans quels
films


par exemple il a joué (ou si film musical dans quels morceaux il est
présent

aussi, etc...).
Mais le champs mémo m'intéresse aussi, car j'obtiens les données par
copier/coller dans le net et de plus celà me permet de pouvoir faire
des



états avec un seul champ et toutes les données dedans.
Donc comme tu dis, je tiens à faire spécifiquement une table acteur,
mais


je
ne sais pas par quel voie passer pour trouver une formule du type :

"Après chaque virgule + espace je passe à un enregistrement suivant"

Bref, tout un film...

Patrice


"JMH" a écrit dans le message de
news:%
Salut
Il te faut faire une procédure spéciale qui va te lire chaque
Enregistrement

de Film et y extraire les Acteurs(Extraction du fichier mémo en se
déplacant

à l'intérieur selon la logique que tu as mise en place)
Ces 2 données sont injectées dans une table, soit pour chaque
entregistrement = autant d'ajout qu'il y a d'acteurs.
Mais ton traitement ne s'arrête pas là. En effet tu as des mêmes
acteurs



qui
sont dans des films différents, donnc il te faut une table
Acteurs.





En fait dans ton formulaire, plutot que de mettre les acteurs en
champ




Mémo,
tu devras créer un sous-formulaire(ActeurFilm) dans lequel tu y
mettra




les
acteurs pour le film.

Il faut savoir à quoi tu désires utiliser ça. Selon les cas ta
base





est
à
redéfinir.

Bonne journée.

Bye

"PatCatNat's" a écrit dans le message de
news:cjfaeo$pq7$
Bonsoir,

Dans un formulaire, j'ai un champ mémo dans ma base de données
(Access2003)

de films qui contient les noms des acteurs (nombre variable)
séparés





par
des
virgules + espace :

[Acteurs] : Cellian Murphy, Naomie Harris, Brendan Gleeson,
Christopher



Eccleston, Megan Burns, Noah Huntley

Pour effectuer un traitement ultérieur, j'aurais voulu créer une
table




par
procédure VBA avec [NumFilm] et [Acteurs] :

[NumFilm] [Acteurs]
01 Cellian Murphy
01 Naomie Harris
01 Brendan Gleeson
01 Christopher Eccleston
01 Megan Burns
01 Noah Huntley

J'ai bien essayé en exportant en texte et en essayant de
réimporter





et
trouver une requête qui me fasse l'affaire... mais nothing...

Quelqu'un aurait une idée ????

Patrice




























Avatar
PatCatNat's
Je suis pas sous Access 97 pour cette base, mais je prends au cas où... pour
une autre éventuelle appli...
Peux-tu indiquer comment appeller la fonction ?

Merci pour tous

Patrice


"Jessy Sempere [MVP]" a écrit dans le message de
news:cjgl4r$hte$
Pour ceux qui sont sous 97, voilà l'équivalent de la fonction Split()

********************************************************
Function fSplit(strSplit As String, strSep As String) As Variant

Dim L%, nb%, p%
Dim strResult As String
Dim varResult() As Variant

If IsNull(strSplit) Then
fSplit = Null
Else
strResult = strSplit
L = Len(strSep)
p = InStr(1, strSplit, strSep)
If p = 0 Then
fSplit = strSplit
Else
Do While p > 0
nb = nb + 1
ReDim Preserve varResult(nb)
varResult(nb - 1) = left(strResult, p - 1)
strResult = Mid(strResult, p + L)
p = InStr(1, strResult, strSep)
If p = 0 Then varResult(nb) = strResult
Loop
fSplit = varResult()
End If
End If
End Function
********************************************************

--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"PatCatNat's" a écrit dans le message news:
cjgjig$n40$
Je m'y colle et tiens au courant.

Encore merci, car de toute façon je crois que je dormirais (si je
dors...


car access est un excellent contraceptif ;o)))) plus instruit ce soir...
(Info : Cette base est en Acceess 2003 contrairement à mes autres
bases(97),


mais je franchis le pas...)

Patrice


"Gafish" a écrit dans le message de
news:ev$
J'ai pensé à mieux depuis tout à l'heure, tu as la fonction Split qui
permet

de scinder un string en fonction d'un caractère séparateur (ici la
virgule



donc) et mettre tout cela dans un tableau.
Soit LesActeurs ton texte (ou string donc, c'est bon à connaitre, ca
fait



partie des ficelles du métier :p bon d'accord elle était facile )

Exemple :
Dim MonTab() as string
MonTab = Split(LesActeurs, ",")

Et là tu as maintenant dans ton tableau MonTab tous tes acteurs. Il ne
te



reste plus qu'à le parcourir et à faire un insert à chaque fois :

Dim MonInd as integer
For MonInd = 1 To UBound(MonTab)
'ici tu as ton acteur dans MonTab(MonInd) tu peux donc faire ton
insert

avec cela
Next


"PatCatNat's" a écrit dans le message news:
cjghal$grq$
Merci Arnaud,

J'en suis au point où je viens de regarder dans le tiroir de la
commode




de
ma fille pour trouver un sting ;o)))

Plaisanterie mise à part, j'ai regarder dans la commode Help de
visual




basic, car je ne connaissais pas !!!
Effectivement celà ressemble à ce que je cherche, mais je
sèche...(ce




n'est
pas commode... :-)))

Pourrais-tu m'écrire un bout de code sur l'idée que tu développes
STP ?





Patrice


"Gafish" a écrit dans le message de
news:
Bonjour,

Je pense que le mieux à faire c'est en vba de :
- Stocker ton champ mémo dans un string
- Avec un InStr tu repéres les emplacements de virgules
- A chaque emplacement de virgule tu prends la partie
gauche,





et
tu
fais un insert avec dans ta table
- Tu coupes ton string par la droite, en enlevant la
partie





gauche
et la virgule

Et tu boucles la dessus jusqu'à la fin de ton string. Ton string
va se





réduite au fil des boucles, acteurs par acteurs.
Après il faudra peut être que tu géres les doublons, comment tu
fais





si
un
nom revient ?

Arnaud

"PatCatNat's" a écrit dans le message
news:





cjgcfd$jed$
Bonjour et merci,

L'utilité est de pouvoir créer un état (ou autre objet) par la
suite






pour
pouvoir choisir un acteur existant dans ma base et savoir dans
quels






films
par exemple il a joué (ou si film musical dans quels morceaux il
est






présent
aussi, etc...).
Mais le champs mémo m'intéresse aussi, car j'obtiens les données
par






copier/coller dans le net et de plus celà me permet de pouvoir
faire






des
états avec un seul champ et toutes les données dedans.
Donc comme tu dis, je tiens à faire spécifiquement une table
acteur,






mais
je
ne sais pas par quel voie passer pour trouver une formule du
type :







"Après chaque virgule + espace je passe à un enregistrement
suivant"







Bref, tout un film...

Patrice


"JMH" a écrit dans le message de
news:%
Salut
Il te faut faire une procédure spéciale qui va te lire chaque
Enregistrement

de Film et y extraire les Acteurs(Extraction du fichier mémo
en se







déplacant
à l'intérieur selon la logique que tu as mise en place)
Ces 2 données sont injectées dans une table, soit pour chaque
entregistrement = autant d'ajout qu'il y a d'acteurs.
Mais ton traitement ne s'arrête pas là. En effet tu as des
mêmes







acteurs
qui
sont dans des films différents, donnc il te faut une table
Acteurs.





En fait dans ton formulaire, plutot que de mettre les acteurs
en







champ
Mémo,
tu devras créer un sous-formulaire(ActeurFilm) dans lequel tu
y







mettra
les
acteurs pour le film.

Il faut savoir à quoi tu désires utiliser ça. Selon les cas ta
base





est
à
redéfinir.

Bonne journée.

Bye

"PatCatNat's" a écrit dans le message
de







news:cjfaeo$pq7$
Bonsoir,

Dans un formulaire, j'ai un champ mémo dans ma base de
données








(Access2003)
de films qui contient les noms des acteurs (nombre variable)
séparés





par
des
virgules + espace :

[Acteurs] : Cellian Murphy, Naomie Harris, Brendan Gleeson,
Christopher



Eccleston, Megan Burns, Noah Huntley

Pour effectuer un traitement ultérieur, j'aurais voulu créer
une








table
par
procédure VBA avec [NumFilm] et [Acteurs] :

[NumFilm] [Acteurs]
01 Cellian Murphy
01 Naomie Harris
01 Brendan Gleeson
01 Christopher Eccleston
01 Megan Burns
01 Noah Huntley

J'ai bien essayé en exportant en texte et en essayant de
réimporter





et
trouver une requête qui me fasse l'affaire... mais
nothing...









Quelqu'un aurait une idée ????

Patrice
































Avatar
PatCatNat's
Je vais peut-être vous paraître lourdingue...

J'ai commis çà (Acteurs étant mon contrôle de formulaire où sont stockés les
noms des acteurs les uns à la suite des autres avec les virgules):

Private Sub Commande98_Click()

Dim MonTab() As String
MonTab = Split(Acteurs, ",")

Dim MonInd As Integer
For MonInd = 0 To UBound(MonTab) - 1
'ici tu as ton acteur dans MonTab(MonInd) tu peux donc faire ton insert avec
cela
Next

End Sub

...mais beaucoup de choses m'échappent :
1/ Quand je clique sur mon bouton, pas de message d'erreurs, mais rien ne se
passe (apparamment...)
2/ C la première fois que j'entends parlé de Tableau (le résultat est-il
virtuel et transparent ou correspond t'il à un contrôle spécifique ?)
3/ A quoi correspond "MonInd" ?

=> que je ne sait pas quoi mettre dans la partie :
'ici tu as ton acteur dans MonTab(MonInd) tu peux donc faire ton insert
avec cela

Excusez-moi encore de tout ce dérangement.

Patrice



"Gafish" a écrit dans le message de
news:ev$
J'ai pensé à mieux depuis tout à l'heure, tu as la fonction Split qui
permet

de scinder un string en fonction d'un caractère séparateur (ici la virgule
donc) et mettre tout cela dans un tableau.
Soit LesActeurs ton texte (ou string donc, c'est bon à connaitre, ca fait
partie des ficelles du métier :p bon d'accord elle était facile )

Exemple :
Dim MonTab() as string
MonTab = Split(LesActeurs, ",")

Et là tu as maintenant dans ton tableau MonTab tous tes acteurs. Il ne te
reste plus qu'à le parcourir et à faire un insert à chaque fois :

Dim MonInd as integer
For MonInd = 1 To UBound(MonTab)
'ici tu as ton acteur dans MonTab(MonInd) tu peux donc faire ton
insert

avec cela
Next


"PatCatNat's" a écrit dans le message news:
cjghal$grq$
Merci Arnaud,

J'en suis au point où je viens de regarder dans le tiroir de la commode
de


ma fille pour trouver un sting ;o)))

Plaisanterie mise à part, j'ai regarder dans la commode Help de visual
basic, car je ne connaissais pas !!!
Effectivement celà ressemble à ce que je cherche, mais je sèche...(ce
n'est

pas commode... :-)))

Pourrais-tu m'écrire un bout de code sur l'idée que tu développes STP ?

Patrice


"Gafish" a écrit dans le message de
news:
Bonjour,

Je pense que le mieux à faire c'est en vba de :
- Stocker ton champ mémo dans un string
- Avec un InStr tu repéres les emplacements de virgules
- A chaque emplacement de virgule tu prends la partie gauche,
et



tu
fais un insert avec dans ta table
- Tu coupes ton string par la droite, en enlevant la partie
gauche


et la virgule

Et tu boucles la dessus jusqu'à la fin de ton string. Ton string va se
réduite au fil des boucles, acteurs par acteurs.
Après il faudra peut être que tu géres les doublons, comment tu fais
si



un
nom revient ?

Arnaud

"PatCatNat's" a écrit dans le message news:
cjgcfd$jed$
Bonjour et merci,

L'utilité est de pouvoir créer un état (ou autre objet) par la suite
pour


pouvoir choisir un acteur existant dans ma base et savoir dans quels
films


par exemple il a joué (ou si film musical dans quels morceaux il est
présent

aussi, etc...).
Mais le champs mémo m'intéresse aussi, car j'obtiens les données par
copier/coller dans le net et de plus celà me permet de pouvoir faire
des



états avec un seul champ et toutes les données dedans.
Donc comme tu dis, je tiens à faire spécifiquement une table acteur,
mais


je
ne sais pas par quel voie passer pour trouver une formule du type :


"Après chaque virgule + espace je passe à un enregistrement suivant"

Bref, tout un film...

Patrice


"JMH" a écrit dans le message de
news:%
Salut
Il te faut faire une procédure spéciale qui va te lire chaque
Enregistrement

de Film et y extraire les Acteurs(Extraction du fichier mémo en se
déplacant

à l'intérieur selon la logique que tu as mise en place)
Ces 2 données sont injectées dans une table, soit pour chaque
entregistrement = autant d'ajout qu'il y a d'acteurs.
Mais ton traitement ne s'arrête pas là. En effet tu as des mêmes
acteurs



qui
sont dans des films différents, donnc il te faut une table
Acteurs.





En fait dans ton formulaire, plutot que de mettre les acteurs en
champ




Mémo,
tu devras créer un sous-formulaire(ActeurFilm) dans lequel tu y
mettra




les
acteurs pour le film.

Il faut savoir à quoi tu désires utiliser ça. Selon les cas ta
base





est
à
redéfinir.

Bonne journée.

Bye

"PatCatNat's" a écrit dans le message de
news:cjfaeo$pq7$
Bonsoir,

Dans un formulaire, j'ai un champ mémo dans ma base de données
(Access2003)

de films qui contient les noms des acteurs (nombre variable)
séparés





par
des
virgules + espace :

[Acteurs] : Cellian Murphy, Naomie Harris, Brendan Gleeson,
Christopher



Eccleston, Megan Burns, Noah Huntley

Pour effectuer un traitement ultérieur, j'aurais voulu créer une
table




par
procédure VBA avec [NumFilm] et [Acteurs] :

[NumFilm] [Acteurs]
01 Cellian Murphy
01 Naomie Harris
01 Brendan Gleeson
01 Christopher Eccleston
01 Megan Burns
01 Noah Huntley

J'ai bien essayé en exportant en texte et en essayant de
réimporter





et
trouver une requête qui me fasse l'affaire... mais nothing...

Quelqu'un aurait une idée ????

Patrice
























Avatar
Gafish
Re !



...mais beaucoup de choses m'échappent :
1/ Quand je clique sur mon bouton, pas de message d'erreurs, mais rien ne
se

passe (apparamment...)


C'est normal, car il faut que tu mettes quelque chose dans le for.

3/ A quoi correspond "MonInd" ?

MonInd c'est un integer qui va servir de compteur. La boucle for va le faire

passer de 0 à la taille max du tableau-1, et ainsi il va servir à aller
chercher les informations dans le table en servant d'indice.
Par exemple MonTab(MonInd) quant MonInd sera égal à 3, ira chercher les
informations contenues dans la "case" n°3 du tableau

=> que je ne sait pas quoi mettre dans la partie :
'ici tu as ton acteur dans MonTab(MonInd) tu peux donc faire ton insert
avec cela


Au tout début de ton script mets la chose suivante :
Dim dbsCurrent as Database
set dbsCurrent = opendatabase(currentDb.Name)

Ca va te faire une connexion à la base de données Access en cours. Il faudra
que tu penses à mettre en toute fin de ton script
set dbsCurrent = nothing
pour libérer la connexion que tu viens de créer et vider l'espace mémoire
occupé par ta variable dbsCurrent.

Ensuite dans le for, à l'endroit que tu indiques, tu mettras quelque chose
du type (à adapter en fonction des tes tables et de tes champs) :

dbsCurrent.Execute "INSERT INTO [MesActeurs] (NomActeur) VALUES (' " &
MonTab(MonInd) & " ');"

ce qui va executer une requete d'insertion dans la table MesActeurs. J'ai
mis des espace autour des " et des ' mais tu pourras les enlever, c'était
juste pour une question de lisibilité ici.

Arnaud


Excusez-moi encore de tout ce dérangement.

Patrice



"Gafish" a écrit dans le message de
news:ev$
J'ai pensé à mieux depuis tout à l'heure, tu as la fonction Split qui
permet

de scinder un string en fonction d'un caractère séparateur (ici la
virgule


donc) et mettre tout cela dans un tableau.
Soit LesActeurs ton texte (ou string donc, c'est bon à connaitre, ca
fait


partie des ficelles du métier :p bon d'accord elle était facile )

Exemple :
Dim MonTab() as string
MonTab = Split(LesActeurs, ",")

Et là tu as maintenant dans ton tableau MonTab tous tes acteurs. Il ne
te


reste plus qu'à le parcourir et à faire un insert à chaque fois :

Dim MonInd as integer
For MonInd = 1 To UBound(MonTab)
'ici tu as ton acteur dans MonTab(MonInd) tu peux donc faire ton
insert

avec cela
Next


"PatCatNat's" a écrit dans le message news:
cjghal$grq$
Merci Arnaud,

J'en suis au point où je viens de regarder dans le tiroir de la
commode



de
ma fille pour trouver un sting ;o)))

Plaisanterie mise à part, j'ai regarder dans la commode Help de visual
basic, car je ne connaissais pas !!!
Effectivement celà ressemble à ce que je cherche, mais je sèche...(ce
n'est

pas commode... :-)))

Pourrais-tu m'écrire un bout de code sur l'idée que tu développes STP
?




Patrice


"Gafish" a écrit dans le message de
news:
Bonjour,

Je pense que le mieux à faire c'est en vba de :
- Stocker ton champ mémo dans un string
- Avec un InStr tu repéres les emplacements de virgules
- A chaque emplacement de virgule tu prends la partie
gauche,




et
tu
fais un insert avec dans ta table
- Tu coupes ton string par la droite, en enlevant la partie
gauche


et la virgule

Et tu boucles la dessus jusqu'à la fin de ton string. Ton string va
se




réduite au fil des boucles, acteurs par acteurs.
Après il faudra peut être que tu géres les doublons, comment tu fais
si



un
nom revient ?

Arnaud

"PatCatNat's" a écrit dans le message news:
cjgcfd$jed$
Bonjour et merci,

L'utilité est de pouvoir créer un état (ou autre objet) par la
suite





pour
pouvoir choisir un acteur existant dans ma base et savoir dans
quels





films
par exemple il a joué (ou si film musical dans quels morceaux il
est





présent
aussi, etc...).
Mais le champs mémo m'intéresse aussi, car j'obtiens les données
par





copier/coller dans le net et de plus celà me permet de pouvoir
faire





des
états avec un seul champ et toutes les données dedans.
Donc comme tu dis, je tiens à faire spécifiquement une table
acteur,





mais
je
ne sais pas par quel voie passer pour trouver une formule du type
:







"Après chaque virgule + espace je passe à un enregistrement
suivant"






Bref, tout un film...

Patrice


"JMH" a écrit dans le message de
news:%
Salut
Il te faut faire une procédure spéciale qui va te lire chaque
Enregistrement

de Film et y extraire les Acteurs(Extraction du fichier mémo en
se






déplacant
à l'intérieur selon la logique que tu as mise en place)
Ces 2 données sont injectées dans une table, soit pour chaque
entregistrement = autant d'ajout qu'il y a d'acteurs.
Mais ton traitement ne s'arrête pas là. En effet tu as des mêmes
acteurs



qui
sont dans des films différents, donnc il te faut une table
Acteurs.





En fait dans ton formulaire, plutot que de mettre les acteurs en
champ




Mémo,
tu devras créer un sous-formulaire(ActeurFilm) dans lequel tu y
mettra




les
acteurs pour le film.

Il faut savoir à quoi tu désires utiliser ça. Selon les cas ta
base





est
à
redéfinir.

Bonne journée.

Bye

"PatCatNat's" a écrit dans le message
de






news:cjfaeo$pq7$
Bonsoir,

Dans un formulaire, j'ai un champ mémo dans ma base de données
(Access2003)

de films qui contient les noms des acteurs (nombre variable)
séparés





par
des
virgules + espace :

[Acteurs] : Cellian Murphy, Naomie Harris, Brendan Gleeson,
Christopher



Eccleston, Megan Burns, Noah Huntley

Pour effectuer un traitement ultérieur, j'aurais voulu créer
une







table
par
procédure VBA avec [NumFilm] et [Acteurs] :

[NumFilm] [Acteurs]
01 Cellian Murphy
01 Naomie Harris
01 Brendan Gleeson
01 Christopher Eccleston
01 Megan Burns
01 Noah Huntley

J'ai bien essayé en exportant en texte et en essayant de
réimporter





et
trouver une requête qui me fasse l'affaire... mais nothing...

Quelqu'un aurait une idée ????

Patrice




























Avatar
Jessy Sempere [MVP]
Voilà un exemple d'appel :

**********************************************
Function fSplit_Exe()

Dim TabfSplit As Variant
Dim i%
Dim strMsg As String

TabfSplit = fSplit("toto, tata, titi", ", ")

If IsArray(TabfSplit) = False Then
strMsg = "L'élément retourné est :" & vbCrLf
strMsg = strMsg & vbCrLf & vbTab & TabfSplit
Else
strMsg = "Les éléments retournés sont :" & vbCrLf
For i = 0 To UBound(TabfSplit)
strMsg = strMsg & vbCrLf & vbTab & TabfSplit(i)
Next
End If
MsgBox strMsg

End Function
**********************************************
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"PatCatNat's" a écrit dans le message news:
cjgmht$2ad$
Je suis pas sous Access 97 pour cette base, mais je prends au cas où... pour
une autre éventuelle appli...
Peux-tu indiquer comment appeller la fonction ?

Merci pour tous

Patrice


"Jessy Sempere [MVP]" a écrit dans le message de
news:cjgl4r$hte$
Pour ceux qui sont sous 97, voilà l'équivalent de la fonction Split()

********************************************************
Function fSplit(strSplit As String, strSep As String) As Variant

Dim L%, nb%, p%
Dim strResult As String
Dim varResult() As Variant

If IsNull(strSplit) Then
fSplit = Null
Else
strResult = strSplit
L = Len(strSep)
p = InStr(1, strSplit, strSep)
If p = 0 Then
fSplit = strSplit
Else
Do While p > 0
nb = nb + 1
ReDim Preserve varResult(nb)
varResult(nb - 1) = left(strResult, p - 1)
strResult = Mid(strResult, p + L)
p = InStr(1, strResult, strSep)
If p = 0 Then varResult(nb) = strResult
Loop
fSplit = varResult()
End If
End If
End Function
********************************************************

--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"PatCatNat's" a écrit dans le message news:
cjgjig$n40$
Je m'y colle et tiens au courant.

Encore merci, car de toute façon je crois que je dormirais (si je
dors...


car access est un excellent contraceptif ;o)))) plus instruit ce soir...
(Info : Cette base est en Acceess 2003 contrairement à mes autres
bases(97),


mais je franchis le pas...)

Patrice


"Gafish" a écrit dans le message de
news:ev$
J'ai pensé à mieux depuis tout à l'heure, tu as la fonction Split qui
permet

de scinder un string en fonction d'un caractère séparateur (ici la
virgule



donc) et mettre tout cela dans un tableau.
Soit LesActeurs ton texte (ou string donc, c'est bon à connaitre, ca
fait



partie des ficelles du métier :p bon d'accord elle était facile )

Exemple :
Dim MonTab() as string
MonTab = Split(LesActeurs, ",")

Et là tu as maintenant dans ton tableau MonTab tous tes acteurs. Il ne
te



reste plus qu'à le parcourir et à faire un insert à chaque fois :

Dim MonInd as integer
For MonInd = 1 To UBound(MonTab)
'ici tu as ton acteur dans MonTab(MonInd) tu peux donc faire ton
insert

avec cela
Next


"PatCatNat's" a écrit dans le message news:
cjghal$grq$
Merci Arnaud,

J'en suis au point où je viens de regarder dans le tiroir de la
commode




de
ma fille pour trouver un sting ;o)))

Plaisanterie mise à part, j'ai regarder dans la commode Help de
visual




basic, car je ne connaissais pas !!!
Effectivement celà ressemble à ce que je cherche, mais je
sèche...(ce




n'est
pas commode... :-)))

Pourrais-tu m'écrire un bout de code sur l'idée que tu développes
STP ?





Patrice


"Gafish" a écrit dans le message de
news:
Bonjour,

Je pense que le mieux à faire c'est en vba de :
- Stocker ton champ mémo dans un string
- Avec un InStr tu repéres les emplacements de virgules
- A chaque emplacement de virgule tu prends la partie
gauche,





et
tu
fais un insert avec dans ta table
- Tu coupes ton string par la droite, en enlevant la
partie





gauche
et la virgule

Et tu boucles la dessus jusqu'à la fin de ton string. Ton string
va se





réduite au fil des boucles, acteurs par acteurs.
Après il faudra peut être que tu géres les doublons, comment tu
fais





si
un
nom revient ?

Arnaud

"PatCatNat's" a écrit dans le message
news:





cjgcfd$jed$
Bonjour et merci,

L'utilité est de pouvoir créer un état (ou autre objet) par la
suite






pour
pouvoir choisir un acteur existant dans ma base et savoir dans
quels






films
par exemple il a joué (ou si film musical dans quels morceaux il
est






présent
aussi, etc...).
Mais le champs mémo m'intéresse aussi, car j'obtiens les données
par






copier/coller dans le net et de plus celà me permet de pouvoir
faire






des
états avec un seul champ et toutes les données dedans.
Donc comme tu dis, je tiens à faire spécifiquement une table
acteur,






mais
je
ne sais pas par quel voie passer pour trouver une formule du
type :







"Après chaque virgule + espace je passe à un enregistrement
suivant"







Bref, tout un film...

Patrice


"JMH" a écrit dans le message de
news:%
Salut
Il te faut faire une procédure spéciale qui va te lire chaque
Enregistrement

de Film et y extraire les Acteurs(Extraction du fichier mémo
en se







déplacant
à l'intérieur selon la logique que tu as mise en place)
Ces 2 données sont injectées dans une table, soit pour chaque
entregistrement = autant d'ajout qu'il y a d'acteurs.
Mais ton traitement ne s'arrête pas là. En effet tu as des
mêmes







acteurs
qui
sont dans des films différents, donnc il te faut une table
Acteurs.





En fait dans ton formulaire, plutot que de mettre les acteurs
en







champ
Mémo,
tu devras créer un sous-formulaire(ActeurFilm) dans lequel tu
y







mettra
les
acteurs pour le film.

Il faut savoir à quoi tu désires utiliser ça. Selon les cas ta
base





est
à
redéfinir.

Bonne journée.

Bye

"PatCatNat's" a écrit dans le message
de







news:cjfaeo$pq7$
Bonsoir,

Dans un formulaire, j'ai un champ mémo dans ma base de
données








(Access2003)
de films qui contient les noms des acteurs (nombre variable)
séparés





par
des
virgules + espace :

[Acteurs] : Cellian Murphy, Naomie Harris, Brendan Gleeson,
Christopher



Eccleston, Megan Burns, Noah Huntley

Pour effectuer un traitement ultérieur, j'aurais voulu créer
une








table
par
procédure VBA avec [NumFilm] et [Acteurs] :

[NumFilm] [Acteurs]
01 Cellian Murphy
01 Naomie Harris
01 Brendan Gleeson
01 Christopher Eccleston
01 Megan Burns
01 Noah Huntley

J'ai bien essayé en exportant en texte et en essayant de
réimporter





et
trouver une requête qui me fasse l'affaire... mais
nothing...









Quelqu'un aurait une idée ????

Patrice




































Avatar
PatCatNat's
Bon voilà où j'ensuis :

Private Sub BtnTrier_Click()
Dim dbsCurrent As Database
Set dbsCurrent = OpenDatabase(CurrentDb.Name)
Dim MonTab() As String
Dim MonInd As Integer

If Acteurs = "" Or IsNull(Acteurs) Then
MsgBox "Il n'y a pas d'acteurs enregistrés", 48

Else
DoCmd.SetWarnings False
DoCmd.OpenQuery ("R_ActeursFilm_Del ") 'Supprime les enregistrements de
la T_ActeursFilm de l'enregistrement courant du Formulaire
'Transformation des éléments du contrôle [Acteurs] en éléments
distincts :
MonTab = Split(Acteurs, ", ") 'Coupe au séparateur
"virgule+espace"les enregistrements du contrôle "Acteurs" du formulaire
For MonInd = 0 To UBound(MonTab) 'Cré un "tableau" avec chaque
élément trouvé
dbsCurrent.Execute "INSERT INTO [T_Acteurs] (NomActeur) VALUES ('" &
MonTab(MonInd) & "');" ' Tri et ajoute les enregistrements à la T_Acteurs
'Bogue dans la ligne du dessus si un nom d'acteur comporte une
apostrophe (ex : Beverly D'Angelo)
Next
'Fin de la transformation
DoCmd.OpenQuery ("R_ActeursFilm_Ajout") 'Ajoute les enregistrements de la
T_Acteurs + Le numéro de film à la T_ActeursFilm
DoCmd.OpenQuery ("R_Acteurs_Del ") 'Supprime les enregistrements de la
T_Acteurs

DoCmd.SetWarnings True
ListeActeurs.Requery
DoCmd.Beep
MsgBox "Tri terminé", vbInformation

End If

Set dbsCurrent = Nothing 'Libère la mémoire

End Sub

Tout marche bien sauf quand un nom d'acteur comporte une apostrophe (ex :
Beverly D'Angelo) ????????
Erreur d'execution '3075'
Erreur de syntaxe (opérateur absent) dansl'expession
"Beverly D'Angelo";'.

D'autre part, est-ce que tu peux me dire si mes commentaires sont justes STP
(çà pourrait servir à d'autres, donc autant ne pas mettre du false et j'aime
bien comprendre ce que je fais)

Merci beaucoup,

Patrice

"Gafish" a écrit dans le message de
news:
Re !



...mais beaucoup de choses m'échappent :
1/ Quand je clique sur mon bouton, pas de message d'erreurs, mais rien
ne


se
passe (apparamment...)


C'est normal, car il faut que tu mettes quelque chose dans le for.

3/ A quoi correspond "MonInd" ?

MonInd c'est un integer qui va servir de compteur. La boucle for va le

faire

passer de 0 à la taille max du tableau-1, et ainsi il va servir à aller
chercher les informations dans le table en servant d'indice.
Par exemple MonTab(MonInd) quant MonInd sera égal à 3, ira chercher les
informations contenues dans la "case" n°3 du tableau

=> que je ne sait pas quoi mettre dans la partie :
'ici tu as ton acteur dans MonTab(MonInd) tu peux donc faire ton insert
avec cela


Au tout début de ton script mets la chose suivante :
Dim dbsCurrent as Database
set dbsCurrent = opendatabase(currentDb.Name)

Ca va te faire une connexion à la base de données Access en cours. Il
faudra

que tu penses à mettre en toute fin de ton script
set dbsCurrent = nothing
pour libérer la connexion que tu viens de créer et vider l'espace mémoire
occupé par ta variable dbsCurrent.

Ensuite dans le for, à l'endroit que tu indiques, tu mettras quelque chose
du type (à adapter en fonction des tes tables et de tes champs) :

dbsCurrent.Execute "INSERT INTO [MesActeurs] (NomActeur) VALUES (' " &
MonTab(MonInd) & " ');"

ce qui va executer une requete d'insertion dans la table MesActeurs. J'ai
mis des espace autour des " et des ' mais tu pourras les enlever, c'était
juste pour une question de lisibilité ici.

Arnaud


Excusez-moi encore de tout ce dérangement.

Patrice



"Gafish" a écrit dans le message de
news:ev$
J'ai pensé à mieux depuis tout à l'heure, tu as la fonction Split qui
permet

de scinder un string en fonction d'un caractère séparateur (ici la
virgule


donc) et mettre tout cela dans un tableau.
Soit LesActeurs ton texte (ou string donc, c'est bon à connaitre, ca
fait


partie des ficelles du métier :p bon d'accord elle était facile )

Exemple :
Dim MonTab() as string
MonTab = Split(LesActeurs, ",")

Et là tu as maintenant dans ton tableau MonTab tous tes acteurs. Il ne
te


reste plus qu'à le parcourir et à faire un insert à chaque fois :

Dim MonInd as integer
For MonInd = 1 To UBound(MonTab)
'ici tu as ton acteur dans MonTab(MonInd) tu peux donc faire ton
insert

avec cela
Next


"PatCatNat's" a écrit dans le message news:
cjghal$grq$
Merci Arnaud,

J'en suis au point où je viens de regarder dans le tiroir de la
commode



de
ma fille pour trouver un sting ;o)))

Plaisanterie mise à part, j'ai regarder dans la commode Help de
visual




basic, car je ne connaissais pas !!!
Effectivement celà ressemble à ce que je cherche, mais je
sèche...(ce




n'est
pas commode... :-)))

Pourrais-tu m'écrire un bout de code sur l'idée que tu développes
STP




?

Patrice


"Gafish" a écrit dans le message de
news:
Bonjour,

Je pense que le mieux à faire c'est en vba de :
- Stocker ton champ mémo dans un string
- Avec un InStr tu repéres les emplacements de virgules
- A chaque emplacement de virgule tu prends la partie
gauche,




et
tu
fais un insert avec dans ta table
- Tu coupes ton string par la droite, en enlevant la
partie





gauche
et la virgule

Et tu boucles la dessus jusqu'à la fin de ton string. Ton string
va





se
réduite au fil des boucles, acteurs par acteurs.
Après il faudra peut être que tu géres les doublons, comment tu
fais





si
un
nom revient ?

Arnaud

"PatCatNat's" a écrit dans le message
news:





cjgcfd$jed$
Bonjour et merci,

L'utilité est de pouvoir créer un état (ou autre objet) par la
suite





pour
pouvoir choisir un acteur existant dans ma base et savoir dans
quels





films
par exemple il a joué (ou si film musical dans quels morceaux il
est





présent
aussi, etc...).
Mais le champs mémo m'intéresse aussi, car j'obtiens les données
par





copier/coller dans le net et de plus celà me permet de pouvoir
faire





des
états avec un seul champ et toutes les données dedans.
Donc comme tu dis, je tiens à faire spécifiquement une table
acteur,





mais
je
ne sais pas par quel voie passer pour trouver une formule du
type






:


"Après chaque virgule + espace je passe à un enregistrement
suivant"






Bref, tout un film...

Patrice


"JMH" a écrit dans le message de
news:%
Salut
Il te faut faire une procédure spéciale qui va te lire chaque
Enregistrement

de Film et y extraire les Acteurs(Extraction du fichier mémo
en







se
déplacant
à l'intérieur selon la logique que tu as mise en place)
Ces 2 données sont injectées dans une table, soit pour chaque
entregistrement = autant d'ajout qu'il y a d'acteurs.
Mais ton traitement ne s'arrête pas là. En effet tu as des
mêmes







acteurs
qui
sont dans des films différents, donnc il te faut une table
Acteurs.





En fait dans ton formulaire, plutot que de mettre les acteurs
en







champ
Mémo,
tu devras créer un sous-formulaire(ActeurFilm) dans lequel tu
y







mettra
les
acteurs pour le film.

Il faut savoir à quoi tu désires utiliser ça. Selon les cas ta
base





est
à
redéfinir.

Bonne journée.

Bye

"PatCatNat's" a écrit dans le message
de






news:cjfaeo$pq7$
Bonsoir,

Dans un formulaire, j'ai un champ mémo dans ma base de
données








(Access2003)
de films qui contient les noms des acteurs (nombre variable)
séparés





par
des
virgules + espace :

[Acteurs] : Cellian Murphy, Naomie Harris, Brendan Gleeson,
Christopher



Eccleston, Megan Burns, Noah Huntley

Pour effectuer un traitement ultérieur, j'aurais voulu créer
une







table
par
procédure VBA avec [NumFilm] et [Acteurs] :

[NumFilm] [Acteurs]
01 Cellian Murphy
01 Naomie Harris
01 Brendan Gleeson
01 Christopher Eccleston
01 Megan Burns
01 Noah Huntley

J'ai bien essayé en exportant en texte et en essayant de
réimporter





et
trouver une requête qui me fasse l'affaire... mais
nothing...









Quelqu'un aurait une idée ????

Patrice
































Avatar
Gafish
Oui, très juste c'est normal qu'il plante sur les apostrophes car en SQL
l'apostrophe est pour lui la fin de texte.
Il faut que tu doubles tes apostrophes.
Pour cela, vu que tu es en Access2000, tu fais un replace:
replace(TonString, " ' ", " ' ' ")
j'ai mis là encore des espaces pour des raisons de lisibilité.
Pour les commentaires c'est ok, mis à part celui-ci "bogue ci dessus..." qui
esperons le sera amené à disparaitre :)

"PatCatNat's" a écrit dans le message news:
cjh6ht$sg0$
Bon voilà où j'ensuis :

Private Sub BtnTrier_Click()
Dim dbsCurrent As Database
Set dbsCurrent = OpenDatabase(CurrentDb.Name)
Dim MonTab() As String
Dim MonInd As Integer

If Acteurs = "" Or IsNull(Acteurs) Then
MsgBox "Il n'y a pas d'acteurs enregistrés", 48

Else
DoCmd.SetWarnings False
DoCmd.OpenQuery ("R_ActeursFilm_Del ") 'Supprime les enregistrements
de

la T_ActeursFilm de l'enregistrement courant du Formulaire
'Transformation des éléments du contrôle [Acteurs] en éléments
distincts :
MonTab = Split(Acteurs, ", ") 'Coupe au séparateur
"virgule+espace"les enregistrements du contrôle "Acteurs" du formulaire
For MonInd = 0 To UBound(MonTab) 'Cré un "tableau" avec chaque
élément trouvé
dbsCurrent.Execute "INSERT INTO [T_Acteurs] (NomActeur) VALUES ('"
&

MonTab(MonInd) & "');" ' Tri et ajoute les enregistrements à la T_Acteurs
'Bogue dans la ligne du dessus si un nom d'acteur comporte une
apostrophe (ex : Beverly D'Angelo)
Next
'Fin de la transformation
DoCmd.OpenQuery ("R_ActeursFilm_Ajout") 'Ajoute les enregistrements de
la

T_Acteurs + Le numéro de film à la T_ActeursFilm
DoCmd.OpenQuery ("R_Acteurs_Del ") 'Supprime les enregistrements de la
T_Acteurs

DoCmd.SetWarnings True
ListeActeurs.Requery
DoCmd.Beep
MsgBox "Tri terminé", vbInformation

End If

Set dbsCurrent = Nothing 'Libère la mémoire

End Sub

Tout marche bien sauf quand un nom d'acteur comporte une apostrophe (ex :
Beverly D'Angelo) ????????
Erreur d'execution '3075'
Erreur de syntaxe (opérateur absent)
dansl'expession

"Beverly D'Angelo";'.

D'autre part, est-ce que tu peux me dire si mes commentaires sont justes
STP

(çà pourrait servir à d'autres, donc autant ne pas mettre du false et
j'aime

bien comprendre ce que je fais)

Merci beaucoup,

Patrice

"Gafish" a écrit dans le message de
news:
Re !



...mais beaucoup de choses m'échappent :
1/ Quand je clique sur mon bouton, pas de message d'erreurs, mais rien
ne


se
passe (apparamment...)


C'est normal, car il faut que tu mettes quelque chose dans le for.

3/ A quoi correspond "MonInd" ?

MonInd c'est un integer qui va servir de compteur. La boucle for va le

faire

passer de 0 à la taille max du tableau-1, et ainsi il va servir à aller
chercher les informations dans le table en servant d'indice.
Par exemple MonTab(MonInd) quant MonInd sera égal à 3, ira chercher les
informations contenues dans la "case" n°3 du tableau

=> que je ne sait pas quoi mettre dans la partie :
'ici tu as ton acteur dans MonTab(MonInd) tu peux donc faire ton
insert



avec cela


Au tout début de ton script mets la chose suivante :
Dim dbsCurrent as Database
set dbsCurrent = opendatabase(currentDb.Name)

Ca va te faire une connexion à la base de données Access en cours. Il
faudra

que tu penses à mettre en toute fin de ton script
set dbsCurrent = nothing
pour libérer la connexion que tu viens de créer et vider l'espace
mémoire


occupé par ta variable dbsCurrent.

Ensuite dans le for, à l'endroit que tu indiques, tu mettras quelque
chose


du type (à adapter en fonction des tes tables et de tes champs) :

dbsCurrent.Execute "INSERT INTO [MesActeurs] (NomActeur) VALUES (' " &
MonTab(MonInd) & " ');"

ce qui va executer une requete d'insertion dans la table MesActeurs.
J'ai


mis des espace autour des " et des ' mais tu pourras les enlever,
c'était


juste pour une question de lisibilité ici.

Arnaud


Excusez-moi encore de tout ce dérangement.

Patrice



"Gafish" a écrit dans le message de
news:ev$
J'ai pensé à mieux depuis tout à l'heure, tu as la fonction Split
qui




permet
de scinder un string en fonction d'un caractère séparateur (ici la
virgule


donc) et mettre tout cela dans un tableau.
Soit LesActeurs ton texte (ou string donc, c'est bon à connaitre, ca
fait


partie des ficelles du métier :p bon d'accord elle était facile )

Exemple :
Dim MonTab() as string
MonTab = Split(LesActeurs, ",")

Et là tu as maintenant dans ton tableau MonTab tous tes acteurs. Il
ne




te
reste plus qu'à le parcourir et à faire un insert à chaque fois :

Dim MonInd as integer
For MonInd = 1 To UBound(MonTab)
'ici tu as ton acteur dans MonTab(MonInd) tu peux donc faire ton
insert

avec cela
Next


"PatCatNat's" a écrit dans le message news:
cjghal$grq$
Merci Arnaud,

J'en suis au point où je viens de regarder dans le tiroir de la
commode



de
ma fille pour trouver un sting ;o)))

Plaisanterie mise à part, j'ai regarder dans la commode Help de
visual




basic, car je ne connaissais pas !!!
Effectivement celà ressemble à ce que je cherche, mais je
sèche...(ce




n'est
pas commode... :-)))

Pourrais-tu m'écrire un bout de code sur l'idée que tu développes
STP




?

Patrice


"Gafish" a écrit dans le message de
news:
Bonjour,

Je pense que le mieux à faire c'est en vba de :
- Stocker ton champ mémo dans un string
- Avec un InStr tu repéres les emplacements de virgules
- A chaque emplacement de virgule tu prends la partie
gauche,




et
tu
fais un insert avec dans ta table
- Tu coupes ton string par la droite, en enlevant la
partie





gauche
et la virgule

Et tu boucles la dessus jusqu'à la fin de ton string. Ton string
va





se
réduite au fil des boucles, acteurs par acteurs.
Après il faudra peut être que tu géres les doublons, comment tu
fais





si
un
nom revient ?

Arnaud

"PatCatNat's" a écrit dans le message
news:





cjgcfd$jed$
Bonjour et merci,

L'utilité est de pouvoir créer un état (ou autre objet) par la
suite





pour
pouvoir choisir un acteur existant dans ma base et savoir dans
quels





films
par exemple il a joué (ou si film musical dans quels morceaux
il







est
présent
aussi, etc...).
Mais le champs mémo m'intéresse aussi, car j'obtiens les
données







par
copier/coller dans le net et de plus celà me permet de pouvoir
faire





des
états avec un seul champ et toutes les données dedans.
Donc comme tu dis, je tiens à faire spécifiquement une table
acteur,





mais
je
ne sais pas par quel voie passer pour trouver une formule du
type






:


"Après chaque virgule + espace je passe à un enregistrement
suivant"






Bref, tout un film...

Patrice


"JMH" a écrit dans le message de
news:%
Salut
Il te faut faire une procédure spéciale qui va te lire
chaque








Enregistrement
de Film et y extraire les Acteurs(Extraction du fichier mémo
en







se
déplacant
à l'intérieur selon la logique que tu as mise en place)
Ces 2 données sont injectées dans une table, soit pour
chaque








entregistrement = autant d'ajout qu'il y a d'acteurs.
Mais ton traitement ne s'arrête pas là. En effet tu as des
mêmes







acteurs
qui
sont dans des films différents, donnc il te faut une table
Acteurs.





En fait dans ton formulaire, plutot que de mettre les
acteurs








en
champ
Mémo,
tu devras créer un sous-formulaire(ActeurFilm) dans lequel
tu








y
mettra
les
acteurs pour le film.

Il faut savoir à quoi tu désires utiliser ça. Selon les cas
ta








base
est
à
redéfinir.

Bonne journée.

Bye

"PatCatNat's" a écrit dans le
message








de
news:cjfaeo$pq7$
Bonsoir,

Dans un formulaire, j'ai un champ mémo dans ma base de
données








(Access2003)
de films qui contient les noms des acteurs (nombre
variable)









séparés
par
des
virgules + espace :

[Acteurs] : Cellian Murphy, Naomie Harris, Brendan
Gleeson,









Christopher
Eccleston, Megan Burns, Noah Huntley

Pour effectuer un traitement ultérieur, j'aurais voulu
créer









une
table
par
procédure VBA avec [NumFilm] et [Acteurs] :

[NumFilm] [Acteurs]
01 Cellian Murphy
01 Naomie Harris
01 Brendan Gleeson
01 Christopher Eccleston
01 Megan Burns
01 Noah Huntley

J'ai bien essayé en exportant en texte et en essayant de
réimporter





et
trouver une requête qui me fasse l'affaire... mais
nothing...









Quelqu'un aurait une idée ????

Patrice




































Avatar
philippe d'isere
bonjour à vous

le code 'Dim dbsCurrent As Database' me revoie un message d'erreur : type
defini par l'utilisateur non defini. j'utilise access xp est-ce normal ?


Rectif :
pas un sting (c dans ma musique çà...)
un string....

J'me mélange les ficelles ;o))))

Patrice

"Gafish" a écrit dans le message de
news:
Bonjour,

Je pense que le mieux à faire c'est en vba de :
- Stocker ton champ mémo dans un string
- Avec un InStr tu repéres les emplacements de virgules
- A chaque emplacement de virgule tu prends la partie gauche, et
tu

fais un insert avec dans ta table
- Tu coupes ton string par la droite, en enlevant la partie gauche
et la virgule

Et tu boucles la dessus jusqu'à la fin de ton string. Ton string va se
réduite au fil des boucles, acteurs par acteurs.
Après il faudra peut être que tu géres les doublons, comment tu fais si un
nom revient ?

Arnaud

"PatCatNat's" a écrit dans le message news:
cjgcfd$jed$
Bonjour et merci,

L'utilité est de pouvoir créer un état (ou autre objet) par la suite
pour


pouvoir choisir un acteur existant dans ma base et savoir dans quels
films


par exemple il a joué (ou si film musical dans quels morceaux il est
présent

aussi, etc...).
Mais le champs mémo m'intéresse aussi, car j'obtiens les données par
copier/coller dans le net et de plus celà me permet de pouvoir faire des
états avec un seul champ et toutes les données dedans.
Donc comme tu dis, je tiens à faire spécifiquement une table acteur,
mais


je
ne sais pas par quel voie passer pour trouver une formule du type :

"Après chaque virgule + espace je passe à un enregistrement suivant"

Bref, tout un film...

Patrice


"JMH" a écrit dans le message de
news:%
Salut
Il te faut faire une procédure spéciale qui va te lire chaque
Enregistrement

de Film et y extraire les Acteurs(Extraction du fichier mémo en se
déplacant

à l'intérieur selon la logique que tu as mise en place)
Ces 2 données sont injectées dans une table, soit pour chaque
entregistrement = autant d'ajout qu'il y a d'acteurs.
Mais ton traitement ne s'arrête pas là. En effet tu as des mêmes
acteurs



qui
sont dans des films différents, donnc il te faut une table Acteurs.
En fait dans ton formulaire, plutot que de mettre les acteurs en champ
Mémo,

tu devras créer un sous-formulaire(ActeurFilm) dans lequel tu y mettra
les


acteurs pour le film.

Il faut savoir à quoi tu désires utiliser ça. Selon les cas ta base
est



à
redéfinir.

Bonne journée.

Bye

"PatCatNat's" a écrit dans le message de
news:cjfaeo$pq7$
Bonsoir,

Dans un formulaire, j'ai un champ mémo dans ma base de données
(Access2003)

de films qui contient les noms des acteurs (nombre variable) séparés
par



des
virgules + espace :

[Acteurs] : Cellian Murphy, Naomie Harris, Brendan Gleeson,
Christopher



Eccleston, Megan Burns, Noah Huntley

Pour effectuer un traitement ultérieur, j'aurais voulu créer une
table




par
procédure VBA avec [NumFilm] et [Acteurs] :

[NumFilm] [Acteurs]
01 Cellian Murphy
01 Naomie Harris
01 Brendan Gleeson
01 Christopher Eccleston
01 Megan Burns
01 Noah Huntley

J'ai bien essayé en exportant en texte et en essayant de réimporter
et




trouver une requête qui me fasse l'affaire... mais nothing...

Quelqu'un aurait une idée ????

Patrice





















1 2 3