bonsor
est-ce-que quelqu'un peut me proposer une solution pour convertir une colonne de type texte en double sans perte de donnée
(mon sgbd est MS access )
merci d'avance pour l'aide
Version imprimable
bonsor
est-ce-que quelqu'un peut me proposer une solution pour convertir une colonne de type texte en double sans perte de donnée
(mon sgbd est MS access )
merci d'avance pour l'aide
Bonjour,
Changer directement le type de données de la colonne directement dans la table ne fera que supprimer tout ce que n'est pas numérique. Il faut donc travailler avec une requête et une fonction utilisateur (aucune native n'étant disponible).
Dans un module VBA tu écris cette fonction.
Et dans la requête tu la sollicite de cette façon :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 Function fSupprimerAlpha(mValeur As Variant) As Variant '--------------------------------------------------------------------------------------- ' Procedure : fSupprimerAlpha / Function ' Author : fabrice CONSTANS (MVP) ' Developpez.com ' Date : 03/06/2012 ' Modified : ' Description : épure une chaine de caractère pour retourner une valeur numérique ' tient compte du sép. décimal et des + et - ' Parameters : mValeur contient la valeur à transformer ' Return Value : retourne une valeur numérique valide ' '--------------------------------------------------------------------------------------- Dim i As Integer If IsNull(mValeur) Or Len(mValeur) = 0 Then fSupprimerAlpha = Null Exit Function End If mValeur = Replace(mValeur, ",", ".") ' à inverser suivant le type de séparateur utilisé ' supprime tous les caracteres alpha For i = 1 To Len(mValeur) ' tout ce qui n'est pas numérique à l'exception des séparateurs If Not IsNumeric(Mid(mValeur, i, 1)) And _ Not Mid(mValeur, i, 1) Like "*[,,.]*" And _ Not Mid(mValeur, i, 1) Like "*[+,-]*" Then ' remplace par un espace mValeur = Replace(mValeur, Mid(mValeur, i, 1), " ") End If Next ' renvoi la nouvelle valeur sans les espaces fSupprimerAlpha = Replace(mValeur, " ", "") End Function
"select ..., fSupprimerAlpha([ChampAconvertir]) as nouvelleValeur, ... FROM ...."
Cordialement,
Hello,
très bonne idée ça, en plus, on voit bien le défilement du raisonnement.
Pourrais-je ajouter que dans le cas où tu as une chaîne de caractère vide en bout de process :
devenantCode:fSupprimerAlpha = Replace(mValeur, " ", "")
Code:
1
2
3
4
5
6 mValeur = Replace(mValeur, " ", "") If Len(mValeur) = 0 then fSupprimerAlpha = Null Else fSupprimerAlpha = mValeur End If
Effectivement elle est perfectible, elle sera bientôt dans la FAQ. A voir dans la rubrique que tu sais. ;)