Conversion texte en nombres (macro) [Fermé]

Signaler
Messages postés
10889
Date d'inscription
vendredi 12 avril 2013
Statut
Contributeur
Dernière intervention
12 octobre 2020
-
Messages postés
17242
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
6 octobre 2020
-
Bonjour,

Je rencontre un soucis avec une macro que j'essaye de créer.

Je récupère des données brutes et je dois les traiter. Parmi ces données il y a une colonne de nombres décimaux dont le séparateur est un point et qu'Excel considère donc comme du texte. J'ai besoin qu'il les considère comme des nombres pour pouvoir ensuite faire une mise en forme conditionnelle selon la valeur de la case.

Si je sélectionne ma colonne et que je vais dans remplacer et que je remplace le point par une virgule, excel les transforme automatiquement en nombres. C'est parfait c'est ce que je veux.

SAUF QUE si je fais exactement la même chose par une macro, il remplace bien les points par des virgules mais continue à considérer que c'est du texte, il m'affiche alors une erreur sur chacun et me permet de corriger l'erreur en convertissant en nombre. Mais du coup il faut les faire un par un et une macro n'est plus possible. J'ai essayé de lui dire que c'était un format "standard" ou un format "nombre" mais il s'en fiche il continue à considérer que c'est du texte tout en me signalant que quand même ça ressemble bien à un nombre ce truc.

Je cherche donc une solution pour lui faire "comprendre" que c'est des nombres mais en utilisant une macro.

J'utilise Excel 2007.

Je créé la macro en passant par l'enregistrement de macro et non en écrivant les codes. Et ça me donne ça comme code (je ne sais pas si ça peut être utile, mais mieux vaut en dire trop) :

Sub nombres()
'
' nombres Macro
'

'
    Columns("D:D").Select
    Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
End Sub


Merci d'avance.

5 réponses

Messages postés
818
Date d'inscription
jeudi 24 septembre 2015
Statut
Membre
Dernière intervention
28 octobre 2019
60
Bonjour ,

Essayes ça :

 Range("D:D").Select
    Selection.TextToColumns Destination:=Range("D2"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
        :=Array(1, 1), DecimalSeparator:=".", TrailingMinusNumbers:=True


Fais à partir de l'enregistreur de macro , puis Données > Convertir > Avancés , Séparateur de décimales : "."
Cordialement,
Nos seules limites sont celles que nous nous imposons nous-même.
La politesse et un merci ne tuent pas. Il existe un bouton pour "Résolu" pour confirmer que     votre problème n'en est plus un. Fahora
Messages postés
10889
Date d'inscription
vendredi 12 avril 2013
Statut
Contributeur
Dernière intervention
12 octobre 2020
224
Bonjour,

Ca me donne un message d'erreur pour le moment. Mais c'est toujours une piste, je vais creuser ça !

Merci
Messages postés
9578
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
12 octobre 2020
1 921
Bonjour

as tu essayé avec la fonction val
Dim st as String, sn as Double
sn= Val(st)

Cdlmnt
Messages postés
10889
Date d'inscription
vendredi 12 avril 2013
Statut
Contributeur
Dernière intervention
12 octobre 2020
224
Bonjour,

Alors j'avoue que je ne connais rien du tout au VBA, moi mon truc c'est le développement web normalement. Je vais me pencher là dessus si l'astuce de Fahora ne marche pas.

Merci
Messages postés
25366
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
12 octobre 2020
5 521
Bonjour

pour numériser le résultat il suffit:

de copier une cellule vide
de sélectionner le champ à traiter
clic droit / collage spécial /ajouter

ça peut s'ajouter à la macro par enregistrement, en réservant une cellule vide à copier mais ça serait plus propre d'avoir un code VBA pour exécuter cette numérisation.
Mais moi, je ne sais pas l'écrire, vous trouverez sans aucun doute quelqu'un sur ce forum pour vous concocter ça

crdlmnt


Messages postés
9578
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
12 octobre 2020
1 921
Et pour appliquer à une plage selectionnée
http://www.cjoint.com/c/FIgmOLvkGbq

Cdlmnt
Messages postés
17242
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
6 octobre 2020
4 283
Bonjour le fil,

teste comme cela pour la colonne D de D2 à D20 à adapter

Sub test()
For i = 2 To 20
Cells(i, 4).Replace What:=".", Replacement:=","
If Cells(i, 4) > 0 Then Cells(i, 4) = Cells(i, 4) * 1
Next i
End Sub

A+
Mike-31

Pas savoir n'est pas un échec, l'échec est le refus d'apprendre.