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

Aide pour réaliser un état

1 réponse
Avatar
Marc
Bonjour,

J'ai une base de donnée dont un des champs contient des mots séparés par des
points virgule. Je voudrais imprimer en faisant une rupture pour chaque mot
différent rencontré dans le champ en question.

Exemple :

Base :

Enreg1 - bleu; carré; lisse
Enreg2 - rouge; carré; mat
Enreg3 - rouge; rond; lisse


Etat (résultat à obtenir, tri par ordre alphabétique) :

bleu - Enreg1
carré - Enreg1
carré - Enreg2
lisse - Enreg1
lisse - Enreg3
mat - Enreg2
rond - Enreg3
rouge - Enreg1
rouge - Enreg3

Je ne suis vraiment pas un cador d'access. Pensez vous que cela est
facilement réalisable ?

Il y a bien entendu d'autres champs dans chaque enregistrement, mais ceux-ci
ne sont pas nécéssaires au tri.

Merci d'avance pour toute aide que vous pourriez m'apporter.

Buzzw2

1 réponse

Avatar
Gloops
Bonjour,

Pour séparer une chaîne de caractères selon un caractère donné, il y a
l'instruction Split.

Je vais essayer de te citer la syntaxe de mémoire, ce qui est très
dangereux avec Split, d'autant que l'aide donne une autre syntaxe, qui
elle n'est pas toujours reconnue.

Je propose de disposer de deux tables tabTableEntree et tabTableSortie,
avec chacune un champ ChampTexte, à dimensionner proprement (et ne
contenant pas de chaîne vide sinon il faut affiner le traitement).


Dim strEntree As String
Dim spl As Variant 'oui je sais là je ne me casse pas la tête
Dim Rs As Recordset
Dim TableEntree As TableDef, TableSortie As TableDef

strEntree = ""
Set TableEntree = CurrentDb().TableDefs("tabTableEntree")
Set TableSortie = CurrentDb().TableDefs("tabTableSortie")
Set Rs = TableEntree.OpenRecordset()
While Not Rs.EOF
strEntree = strEntree + Rs!ChampTexte + ";"
Rs.Next
Wend
Rs.Close

'à ce stade on a tous les éléments dans une seule chaîne de carac tères :
'strEntree = "bleu; carré; lisse; rouge; carré; mat; rouge; rond; l isse;"

spl = Split(strEntree, ";")
Set Rs = TableSortie.OpenRecordset()
For N = LBound(spl) To UBound(spl)
Rs.AddNew
Rs!ChampTexte = spl(N)
Rs.Update
Next
Rs.Close
Set Rs = Nothing

Et l'état de sortie pourrait être basé sur
SELECT ChampTexte FROM tabTableSortie ORDER BY ChampTexte

Il n'est pas exclu que quelqu'un nous sorte d'un chapeau une instruction
SQL qui sortirait le résultat d'une traite, ce qui, il faut bien
l'avouer, aurait plus de classe. Mais à l'heure qu'il est, voilà ce q ue
je propose.

____________________________________
Marc a écrit, le 08/05/2008 11:47 :
Bonjour,

J'ai une base de donnée dont un des champs contient des mots séparé s par des
points virgule. Je voudrais imprimer en faisant une rupture pour chaque mot
différent rencontré dans le champ en question.

Exemple :

Base :

Enreg1 - bleu; carré; lisse
Enreg2 - rouge; carré; mat
Enreg3 - rouge; rond; lisse


Etat (résultat à obtenir, tri par ordre alphabétique) :

bleu - Enreg1
carré - Enreg1
carré - Enreg2
lisse - Enreg1
lisse - Enreg3
mat - Enreg2
rond - Enreg3
rouge - Enreg1
rouge - Enreg3

Je ne suis vraiment pas un cador d'access. Pensez vous que cela est
facilement réalisable ?

Il y a bien entendu d'autres champs dans chaque enregistrement, mais ce ux-ci
ne sont pas nécéssaires au tri.

Merci d'avance pour toute aide que vous pourriez m'apporter.

Buzzw2