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

Extraction des valeurs numériques dans une chaine

3 réponses
Avatar
RENAUD Eric
Bonjour,
J'ai un champ [Jours de transport] avec des libéllés comme suit :

2 Jours de transport
5 Jours de transport
10 Jours de transport
Pas de jours de transport

Je souhaiterai avec un champ calculé pouvoir récupèrer respectivevement 2,
5, 10 et 0 (si pas de jours)
J'ai fait avec Excel mais là je sèche.
D'avance merci.

3 réponses

Avatar
Dragan
Bonjour Renaud,
d'après ce que tu écris il y a une valeur numérique devant le mot " Jour"
quand les 3 premières lettres sont différentes du mot "Pas". Donc :

IF LEFT([J de t],3)="Pas"
THEN NbJours=0
ELSE NbJours=CINT(LEFT([J de t], INSTR([J de t]," Jour")-1))

sur une seule ligne :
NbJours IIF(LEFT([J de t],3)="Pas",0,CINT(LEFT([J de t],INSTR([J de t]," Jour")-1)))


"RENAUD Eric" a écrit :

Bonjour,
J'ai un champ [Jours de transport] avec des libéllés comme suit :

2 Jours de transport
5 Jours de transport
10 Jours de transport
Pas de jours de transport

Je souhaiterai avec un champ calculé pouvoir récupèrer respectivevement 2,
5, 10 et 0 (si pas de jours)
J'ai fait avec Excel mais là je sèche.
D'avance merci.





Avatar
TopJB
Bonjour,

La solution de Dragan me semble bonne.

En voici une autre donc tu peux faire dans un module :

--------------- Début du code ---------------------

Function RecupNbJourTransport (ChaineATraiter as string) as integer
'ChaineATraiter resprésente la valeur de ton champ que tu passe en
paramètre à la fonction
'Si tu veut retourner une chaine de caractère tu remplace 'integer' par
'string'

Dim StrTable() as String

'Découpage dans un tableau de ta chaîne sur la lettre "J" pour jour
'Donc ce qui donne pour:
'2 Jours de transport => dans la première case de ton tableau tu auras
"2 " et dans la seconde "Jours de transport"
'Pas de jours de transport => dans la première case de ton tableau tu
auras "Pas de " et dans la seconde "jours de transport"
StrTable = Split(ChaineATraiter,"J")

'Ensuite on vérifie si la première case est un numérique
'Si oui on stocke le chiffre sinon on stocke 0
'La fonction Trim supprime les espaces avant et après une chaine de
caractères
if IsNumeric(Trim(StrTable(0))) then
'La tu peut enlever le Cint si tu veut retourner une chaine de
caractère au lieu d'un numérique
RecupNbJourTransport = Cint(trim(StrTable(0))
else
'Si tu veux retourner une chaine de caractère au lieu d'un numérique
mets "0" à la place de 0
RecupNbJourTransport = 0
end if

End Function

----------------- Fin du code --------------------

Donc à l'endroit ou tu veut récupérer le nombre de jour tu appelle la
fonction est écrivant :

'TaVariable' = RecupNbJourTransport(me.[Jours de transport])

Voilà

Cordialement


RENAUD Eric a écrit :
Bonjour,
J'ai un champ [Jours de transport] avec des libéllés comme suit :

2 Jours de transport
5 Jours de transport
10 Jours de transport
Pas de jours de transport

Je souhaiterai avec un champ calculé pouvoir récupèrer respectivevement 2,
5, 10 et 0 (si pas de jours)
J'ai fait avec Excel mais là je sèche.
D'avance merci.




Avatar
Eric
Bonsoir,


En plus simple :

Dans un contrôle indépendant de formulaire/état:
en Source controle : =VRAIFAUX(Pas EstNull([Jours de
transport]);CNUM([Jours de transport]);"")

Dans une requête:
NBJ:CNUM([Jours de transport])

Dans du code :
NBJ=VAL([Jours de transport])

mais il faudra tester si le champ n'est pas null soit en critère sur le
champ [Jours de transport] dans la requête soit via un if dans le code

RENAUD Eric a écrit :
Bonjour,
J'ai un champ [Jours de transport] avec des libéllés comme suit :

2 Jours de transport
5 Jours de transport
10 Jours de transport
Pas de jours de transport

Je souhaiterai avec un champ calculé pouvoir récupèrer respectivevement 2,
5, 10 et 0 (si pas de jours)
J'ai fait avec Excel mais là je sèche.
D'avance merci.





--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr