Probleme: données téléchargées via une macro sont au format nombre US

jay18 Messages postés 5 Date d'inscription mardi 2 décembre 2008 Statut Membre Dernière intervention 6 décembre 2008 - 2 déc. 2008 à 20:56
userrrqi115 Messages postés 181 Date d'inscription mardi 18 novembre 2008 Statut Membre Dernière intervention 4 février 2011 - 7 déc. 2008 à 11:06
Hello tout le monde,

Je suis un débutant en VBA et j'ai trouvé un fichier qui permet de télécharger les cours de bourse via yahoo.com.

Sur le fichier, il suffit de mettre le symbole de l'action et d'appuyer sur le bouton et tout se récupere. Si l'exemple du fichier marche impecc, lorsque je mets un nouveau symbole (par exemple BNP.PA), les données se téléchargent cette fois en format US, avec des nombres du style 5.60

Cela me pose probleme car lorsque je veux calculer les moyennes mobiles par exemple, les fonctions ne reconnaissent pas les chiffres avec les points, me renvoyant des erreurs "valeurs?" Pareil c'est embetant pour faire un graphique.

Pouvez vous m'aider?je vous laisse l'exmple pour que vous constatiez par vous même (essayer avec BNP.PA par exemple)
Par contre c'est où qu'on peut joindre les fichiers

Un grand merci

9 réponses

userrrqi115 Messages postés 181 Date d'inscription mardi 18 novembre 2008 Statut Membre Dernière intervention 4 février 2011
3 déc. 2008 à 13:01
Hello,

Essaie d'utiliser ceci lorsque ton téléchargement est fini :
Dim plagecontenantlesdatas
    Set plagecontenantlesdatas = Application.Union(Range("a1:c3"), Range("f1:h3")) 'exemple de plage
   
    plagecontenantlesdatas.Select
    Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

Le seul truc à déterminer c'est la plage succeptible d'accueillir ces datas en format US.

BR

USERRRQI115
Simple user
Great brain
0
jay18 Messages postés 5 Date d'inscription mardi 2 décembre 2008 Statut Membre Dernière intervention 6 décembre 2008
3 déc. 2008 à 15:40
Hello,

Merci de ton aide. Par contre, je n'arrive pas a le faire fonctionner. La fonction set range("A1:B1000") me renvoit au debogeur. Si je la supprime et que je ne mais que le selection.replace, j'ai un message d'erreur automation.

J'espere que je ne vais pas devoir changer ma version excel
0
userrrqi115 Messages postés 181 Date d'inscription mardi 18 novembre 2008 Statut Membre Dernière intervention 4 février 2011
3 déc. 2008 à 16:02
Hello,

Si tu ne veux travailler que sur la plage "A1:B1000", supprime le set et a variable, sélectionne simplement cette plage (= plage continue donc pas utile d'utiliser Union)
soit :

Range("A1:B1000").select
puis place le selection.replace.

BR

USERRRQI115
Simple user
Great brain
0
jay18 Messages postés 5 Date d'inscription mardi 2 décembre 2008 Statut Membre Dernière intervention 6 décembre 2008
4 déc. 2008 à 13:36
Hello USERRRQI115,

Ca marche impecc seulement si j'utilise le code suivant :

Dim feuille As Worksheet
For Each feuille In Worksheets
feuille.Columns("C:I").Replace What:=".", Replacement:=",", LookAt:=xlPart, SearchOrder:=xlByColumns, MatchCase:=False
Next feuille

Le dernier probleme, c'est que les chiffres sont bons, leur virgule est correcte mais ils ne sont pas considérés en tant que nombre,c'est a dire qu'il faut que je clique sur la petite fenetre erreur et convertir en nombre et la tout est bon.

Aurais tu une idée du pourquoi de cette erreur?

Merci beaucoup de ton aide
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
userrrqi115 Messages postés 181 Date d'inscription mardi 18 novembre 2008 Statut Membre Dernière intervention 4 février 2011
4 déc. 2008 à 16:53
Hello,

La pluspart du temps cette erreur survient lorsque la source des données n'est pas totalement compatible.
Le plus simple pour régler cette erreur est d'effectuer un opération sur le nombre stocké en texte.
Alors plutôt que de devoir le faire à la mimine sur toutes les feuilles, tu peux inclure une boucle sur une variable de type range par exemple :
Dim celulle as Range
For each cellule In Range("C1:I1000")
cellule.value=1*cellule.value
next cellule

BR
USERRRQI115
Simple user
Great brain
0
jay18 Messages postés 5 Date d'inscription mardi 2 décembre 2008 Statut Membre Dernière intervention 6 décembre 2008
5 déc. 2008 à 17:03
Hello

J'ai essayé ton code, ca me bloque au niveau de la ligne:

cellule.value=1*cellule.value ==> incompatibilité de type "erreur 13"
0
userrrqi115 Messages postés 181 Date d'inscription mardi 18 novembre 2008 Statut Membre Dernière intervention 4 février 2011
6 déc. 2008 à 17:07
Hello,

Si cette erreur survient c'est que dans la boucle on essaie de multiplier un texte. les 2 causes les plus probables sont :
1) une des données dans la plage sélectionnée est de type texte (genre un titre de colonne)
2) la boucle s'exécute sur des données dont le point ne s'est pas encore tranformé en virgule.

BR

USERRRQI115
Simple user
Great brain
0
jay18 Messages postés 5 Date d'inscription mardi 2 décembre 2008 Statut Membre Dernière intervention 6 décembre 2008
6 déc. 2008 à 22:34
Hello,

Un grand merci ca marche impecc, je m'étais en effet trompé de cellule dans le code.

J'ai juste une derniere petite question (la derniere promis Javascript:Insert_Emoticon('/imgs2/smile_big.gif');!)

En fait mes données vont etre stockées dans un tableau avec le cours de la veille, le plus haut,le plus bas...Ces données changent donc chaque fois que je cliques sur le bouton. J'ai deux cellules qui prend en compte la valeur max et min du cours de la veille.

Ces deux cellules viennent alimenter un graphique, qui s'actualise donc egalement chaque jour. Mon probleme est le suivant : je selectionne le range D8:I2000 par exemple, même si mes données ne vont, pour l'instant qu'à la cellule 600 (tout va dépendre de la date de départ)

Les cellules suivantes (qui sont également selectionnées dans le code) vont renvoyées la valeur 0. Cette valeur va etre pris en compte dans mon ma cellule MIN et va donc fausser mon graphique.

Y a t il un moyen que la macro qui convertie en nombre ne s'applique qu'aux cellules qui s'activent lorsqu'on appuie sur le bouton? J'ai essayé de le modifier en faisant entrer activesheet par exemple ou selection, mais ca ne fonctionne pas non plus.

En tout cas un grand merci, tu m'as permis d'avancer dans mon projet à vitesse grand V
0
userrrqi115 Messages postés 181 Date d'inscription mardi 18 novembre 2008 Statut Membre Dernière intervention 4 février 2011
7 déc. 2008 à 11:06
Hello,

Il te faut ajouter une condition à l'exécution du cellule.value = 1* cellule.value.
Celle ci par exemple : If cellule.Value <> "" Then
BR

USERRRQI115
Simple user
Great brain
0
Rejoignez-nous