Conserver valeurs extraites d'un CSV via ADO en nombre

Will-e-coyote

XLDnaute Occasionnel
Bonsoir,

J'extrais via ADO une série de champs depuis un fichier CSV dont certains sont des chiffres. Le problème est double :
1 - Il y a un séparateur de milliers sur les nombres composant ces champs
2 - Les chiffres (sans séparateurs de milliers) sont aussi considérés comme du texte

Par code VBA j’élimine les espaces importés dans les champs concernés.... Je sais que normalement il ne me reste plus qu'a multiplier par 1 ces champs pour régler le problème, mais avouez tout de même que c'est inélégant au possible !!!

N'y a-t-il vraiment que cette façon de faire ?

Merci de votre participation...
 

Dranreb

XLDnaute Barbatruc
Re : Conserver valeurs extraites d'un CSV via ADO en nombre

Bonsoir.
Non, il n'est jamais nécessaire de multiplier ce String par 1 pour avoir une expression numérique. L'affecter à une variable déclarée As Double le convertit aussi en numérique. Si besoin de l'affecter à un Variant tel qu'une propriété Value de Range, le convertir soit avec Val soit avec CDbl selon le séparateur décimal.
 

Will-e-coyote

XLDnaute Occasionnel
Re : Conserver valeurs extraites d'un CSV via ADO en nombre

Merci Dranreb

Je dois être bête, mais je ne vois pas comment traduire cela en code: j'ai un range(cells(1,1),Cells(3,40)) qui contient ces valeurs mais je n'y arrive pas (fonction CDbl vu que j'ai des virgules.....)

Merci de tes lumières par avance...
 

JNP

XLDnaute Barbatruc
Re : Conserver valeurs extraites d'un CSV via ADO en nombre

Bonjour le fil :)
D'après mes tests, avec du vrai texte, des chiffres considérés comme texte (avec et sans espace de séparation de milliers), le simple fait du mettre 1 dans une cellule vide, de le copier et de multiplier via un collage spécial en sélectionnant toute les cellules laisse les textes inchangés et repasse tous les chiffres en format numérique :rolleyes:...
Bonne journée :)
 

Dranreb

XLDnaute Barbatruc
Re : Conserver valeurs extraites d'un CSV via ADO en nombre

Bonjour.
Comprends pas. Vous parlez d'abord d'un fichier CSV et ensuite vous dites que vous avez ces valeurs dans des cellules.
Joignez des exemplaires assez courts d'un CSV et d'une feuille Excel résultante correspondante à obtenir.
 

Will-e-coyote

XLDnaute Occasionnel
Re : Conserver valeurs extraites d'un CSV via ADO en nombre

Je suis en consultation du site via mon smartphone.... Je ne fais qu'importer des données via ado d'un fichier csv sur un xlsm.... Après un import via requête SQL je voulais juste que mes chiffres importes soient reconnus comme tel vu qu'a cause du format csv ou ils sont avec virgule et séparateur de milliers ils se retrouvent au format texte dans le xlsm.... Je cherche donc a faire une macro qui le fais le plus proprement possible.....

En tout cas merci pour vos réponses... Le coup du cdbl me semblait prometteur, mais je ne parvient pas a l'appliquer aux valeurs de ma plage d'un seul coup !
 

Dranreb

XLDnaute Barbatruc
Re : Conserver valeurs extraites d'un CSV via ADO en nombre

Si vous ne voulez pas le lire autrement qu'en l'important directement dans une feuille, il ne vous reste plus qu'à traiter à postériori chaque valeur de cellule.
Pour une rapidité raisonnable n'utilisez pas Cells(L, C).
Déclarez T() As Variant
faite T = TouteLaPlage.Value au début
travaillez sur les T(L, C), et tout à la fin:
TouteLaPlage.Value = T
 

JNP

XLDnaute Barbatruc
Re : Conserver valeurs extraites d'un CSV via ADO en nombre

Merci beaucoup JNP, mais c'est aussi ce que je voulais éviter....:cool:
Hum, tu parles de traiter par VBA les cellules une à une pour d'abord ôter les séparateurs millier, puis de les multiplier une à une par 1 pour les transformer, je te propose une solution qui remplace tout ça en multipliant tes milliers voir million de cellule en une seule fois avec un collage spécial sans même avoir besoin d'avoir recours à VBA, je ne comprends pas pourquoi tu veux éviter... :p
Bonne suite :)
 

Will-e-coyote

XLDnaute Occasionnel
Re : Conserver valeurs extraites d'un CSV via ADO en nombre

Merci JNP,

C'etait juste que je trouvais ça artisanal le fait d'écrire 1 dans une cellule pour aller ensuite la coller-spécial en multipliant ma plage....

For Each C in MonRange.Cells
C.Value = CDbl(C.Value)
Next

Marche bien aussi, mais je ferai un test avec cette méthode pour voir celle qui va le plus vite.... actuellement ma macro qui extrait par SQL depuis 4 CSV d'une bonne 50 de Mo chacun avec retraitement de certaines colonnes prend un bonne trentaine de secondes sur un PC vieux de plus de 5 ans


La suite bientot
 

MJ13

XLDnaute Barbatruc
Re : Conserver valeurs extraites d'un CSV via ADO en nombre

Re

Comme dit Jean-Noël :), en général si une technique fonctionne bien, cela ne sert pas à grand chose d'en changer.

De plus avec un temps d'une trentaine de secondes sur 4 fichiers en SQL, cela me semble difficile d'optimiser.

Encore hier, j'ai mis 65000 images sur une feuille en 31 000 secondes, c'est dire ;).
 

Statistiques des forums

Discussions
312 331
Messages
2 087 360
Membres
103 528
dernier inscrit
hplus