Importation de données

Bonjour à tous !

Je me permets de poster un message sur ce forum car je rencontre un problème lors de l'importation de données dans un fichier.

Lorsque j'importe des données d'un fichier .csv dans mon fichier Excel de traitement via une macro spécifique, il arrive que le séparateur décimal de celles-ci soit un point ou une virgule. Pour y remédier et traiter toujours des données numériques, je peux être amené à remplacer les points par des virgules. J'utilise alors ce code tout simple ci-dessous, issu de l'enregistreur de macro :

Columns("A:H").Select

Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=False

En effet, j'aimerai qu'une cellule contenant "1.056" devienne "1,056". Lorsque je réalise cette opération manuellement, aucun souci. En revanche j'en rencontre un lorsque c'est la macro qui le fait. Tant que la valeur est inférieure à 1.0 cela fonctionne bien mais pour les valeurs supérieures à 1 j'obtiens "1.056" --> "105600,00" !

J'ai essayé pleins de choses, pleins de manières différentes pour tenter d'avoir toujours des valeurs numériques et ne pas se trainer de points mais rien à faire. Et là je ne comprends pas ce que fait la macro...

J'espère être clair, je ne sais pas si quelqu'un a déjà rencontré ce problème.

Merci d'avance pour vos réponses en tout cas !

Bonjour,

Le remplacement se fait-il sur le CSV ou le fichier final ? Je pense qu'il faut se pencher sur le format du nombre, le séparateur de décimal, quelque chose de ce côté là. J'ai essayé de reproduire l'effet observé sur un fichier, sans succès. Serait-il possible de nous fournir un exemple ?

Cdlt,

@Ergotamine,

J'ai testé les deux solutions sans plus de succès.

Pour être très concret, voici un exemple de données après import dans mon fichier Excel (ou directement dans le fichier csv) :

0.00092610.95
0.00112621.00
0.00122641.05

Lorsque je sélectionne manuellement ces cases, que je fais remplacer les "." par des "," j'obtiens ceci :

0,00092610,95
0,00112621,00
0,00122641,05

C'est exactement ce que je cherche à obtenir mais de façon automatisé. Lorsqu'en revanche la macro exécute la commande suivante :

Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=True

J'obtiens ceci :

0,00092610,95
0,0011262100000
0,012264105000

Toutes les valeurs supérieures à 1 se voient multipliés par un facteur 10^5 tandis que les valeurs inférieures à 1 sont bien converties. Je précise que j'ai essayé de changer les paramètres de la commande VBA "replace" sans succès.

Je pense aussi que c'est une histoire de séparateur décimal et de paramétrage mais impossible de m'en sortir...

Bonjour,

Vous auriez un exemple du bout du fichier CSV à nous fournir ?

C'est plus facile pour analyser et proposer une solution.

Merci.

Cdlt,

Voici un exemple de données que je souhaite convertir automatiquement au format numérique.

Bonjour,

Merci !

Ca avait bien à voir avec ces séparateurs de décimaux mais je ne connais pas l'explication extacte.

En tout cas ce code te permet de remplacer le . par des . reconnu alors automatiquement par Excel comme des virgules ce qui converti le tout automatiquement en nombre :

Sub TEST()
Cells.Replace What:=".", Replacement:=".", LookAt:=xlPart
End Sub

Cdlt,

Super !! Merci beaucoup Ergotamine !

Je m'en rappellerai à l'avenir, même si c'est c'est difficilement compréhensible !

Bonne continuation !

Rechercher des sujets similaires à "importation donnees"