Problème de conversion en numérique

2 réponses
Avatar
ThierryP
Bonjour le forum, bonjour Denis (!),

Eternel problème..... Conversion de valeurs depuis un fichier csv dans Excel
Windows et EXcel en Français (pas de séparateur de millers, décimal = ,)
J'ai des valeurs qui proviennent d'un fichier csv par extraction :
1,085.50
57.50
170.80
1,313.80
Forcément, Excel ne reconnaÍ®t pas de numériques lÍ -dedans. Donc, je fais (syntaxe via l'enregistreur, donc bonne Í  priori) :
'------------------------------------------------------------------------------------------
With Union(ActiveWorkbook.Sheets(2).Range("B7"), ActiveWorkbook.Sheets(2).Range("B11"))
.Replace What:=",", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
.NumberFormat = "#,##0.00"
.HorizontalAlignment = xlRight
End With
'------------------------------------------------------------------------------------------
A l'affichage, j'ai maintenant :
1085,5
57,50
170,80
1313,8
Pourquoi la première et la dernière cellule ne sont pas au bon format ? Et si je sélectionne une de ces cellules et que je fais Entrée dans la barre de saisie le bon format apparaÍ®t (1 085,50) ????????

Aidez-moi Í  finir moins bête !!!!
Merci d'avance,

ThierryP

2 réponses

Avatar
MichD
Bonjour,
Je t'ai fait un petit exemple de code pour ton problème.
J'ai copié les données de ton message dans la feuille "Feuil1" et dans
la plage A1:A4
'---------------------------------------
Sub test()
With Worksheets("Feuil1")
With .Range("A1:A4")
'Supprime le caractère "Espace insécable" s'il existe
.Replace What:=Chr(160), Replacement:="", LookAt:=xlPart
'Supprime le caractère "Espace barre espacement" s'il existe
.Replace What:=Chr(32), Replacement:="", LookAt:=xlPart
'Remplace d'abord le Point par "_"
.Replace What:=".", Replacement:="_", LookAt:=xlPart
'Remplace la virgule par ""
.Replace What:=",", Replacement:="", LookAt:=xlPart
'Remplace la "-" par ","
.Replace What:="_", Replacement:=",", LookAt:=xlPart
'Remplace la "," par "." 'C'est ici que l'affichage
's'aligne Í  droite.
'Le séparateur décimal est le point en VBA et
'la virgule dans la feuille de calcul. Ça demande un
'moment de réflexion ;-))
.Replace What:=",", Replacement:=".", LookAt:=xlPart
.NumberFormat = "#,##0.00"
End With
End With
End Sub
'---------------------------------------
Dans ta procédure, cette ligne de code :
.HorizontalAlignment = xlRight
permet d'afficher le contenu des cellules Í  droite, mais le format des
cellules est toujours texte. Dans Excel, dès que le format est
numérique, Excel affiche le contenu Í  droite Í  moins que la cellule ait
reçu un format particulier.
Ce dont il faut se rappeler, pour que le contenu passe d'un format Í 
l'autre (texte Í  numérique) la cellule doit passer en mode "Édition" et
au moment de valider, le nouveau format prend place et automatiquement
le contenu numérique s'affiche Í  droite.
MichD
Avatar
ThierryP
Bonjour Denis,
Comme d'habitude, rien Í  redire !!!!!
Et évidemment, je n'avais pas pensé au remplacement intermédiaire !
Comme quoi la programmation c'est un vrai métier :-):-):-)
Un grand merci !
ThierryP