Formulaire - liste déroulante
Bonjour à tous,
Voici la situation.
Dans le formulaire VBA de mon fichier appelé Userform 1 il y a une liste appelée "Sélectionner le titre de votre choix dans l'indice SMI", dans la liste déroulante de droite il y a une liste de 20 noms correspondant à la feuille "titre SMI" (lié par l'outil Rowsource). Dans la colonne A il y a le nom du titre et dans la colonne B le lien pour le téléchargement.
Dans le module 1 il y a un sub appelé " GetDatatitre". Ce module comprend un import de données par internet avec une commande dans le sub appelé "URL= http://www...... (en rouge dans le code Getdatatitre juste en dessous)
J'aimerais que lorsque l'utilisateur sélectionne dans le formulaire le titre XXXX correspondant à la cellule A4 par exemple, le code télécharge ce qu'il y a dans la cellule d’à coté (cellule B4). Donc dans le sub GetDatatitre la partie "URL= " correspondrait à une cellule.
J'ai pensé faire ce code mais cela tourne indéfiniment sans fonctionner. Pouvez-vous m'aider ?
Merci d'avance
i = 2
Do While Cells(i, 3) <> " "
If Cells(i, 3) = Cells(i, 3) Then
URL = Cells(i + 1, 3)
Else
i = i + 1
End If
LoopSub GetDatatitre()
'Déclaration des variables
Dim DataSheet As Worksheet
Dim SMI2 As String
Dim URL As String
Dim i As Double
'Règles d'actualisation
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.Calculation = xlCalculationManual
'Destination de l'import
Set DataSheet = Worksheets("SMI")
'Emplacement de l'import
SMI2 = DataSheet.Range("I1").Value
Range("I1").CurrentRegion.ClearContents
[color=#FF0000]URL = "http://ichart.finance.yahoo.com/table.csv?s=UBS&a=02&b=14&c=2010&d=02&e=14&f=2013&g=d&ignore=.csv" & SMI2[/color]
'Procédure de cleaning
With DataSheet.QueryTables.Add(Connection:="URL;" & URL, Destination:=DataSheet.Range("I1"))
.BackgroundQuery = True
.TablesOnlyFromHTML = False
.Refresh BackgroundQuery:=False
.SaveData = True
End With
Columns("I:I").Select
Selection.TextToColumns Destination:=Range("I1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
Array(7, 1)), TrailingMinusNumbers:=True
End Sub
Bonjour,
Quelqu'un pour m'aider svp ?
Merci
Bonjour,
1°) Tu veux absolument tout l'historique des actions ou bien suivre leurs évolutions ?
2°) je ne comprend pas ..If Cells(i, 3) = Cells(i, 3) Then , ça sera toujours égal !
3°) A chaque demande de connexion tu crée une nouvelle QueryTable, et tu ne la supprime pas, y en a déjà une cinquantaine dans ton classeur, à terme, ça craint...
4°) Explique clairement ce que tu veux comme résultat.
5°) Regarde ce tuto sur les connexions
A te relire..
A+
Bonjour lermite,
Je te remercie pour ta réponse.
Merci encore
Re,
J'avais très bien compris ce que tu veux faire mais tu ne répond pas à mes questions..
et notamment,
Tu veux absolument tout l'historique des actions depuis 2009 ou bien suivre leurs évolutions ?
En général ont ne suit que le cours du jour, si ont veux un historique ont fait une BD avec les résultats souhaiter.
Note qu'en adaptant les noms des tes actions à la démo dont lien plus haut, tu peu suivre toutes tes actions en temps réel, suffit juste de changer les noms et 'ticker". J'ai testé et ça fonctionne.
A+
Bonjour,
Oui je souhaite conserver un historique. J'essaye encore de faire ca avec des if dans le userform mais cela ne fonctionne pas, help !
..... Extractions des renseignements vraiment .. difficile.
Oui je souhaite conserver un historique.
Ne répond toujours pas à ma question,
Avec les url comme il sont libellés tu rapatrie TOUT l'historique à chaque fois, ensuite quand tu appel une autre url tu efface tout et tu recommence...?
Ou, tu rapatrie les données du jour et tu les ajoute dans une feuille à part pour garder l'historique ?.
Tu a été voir sur le site comment sont fait les tableaux journaliers ?
Et répond aux questions svp.
Car on ne se comprends pas mutuellement
Une fois ceci fait, s'il désire choisir un autre titre, cela efface tout et cela recommence. Il n'y a pas de conservation de données, c'est simplement un outil de calcul.
J'ai écris ceci ce matin dans le bouton de lancement du formulaire. (Valeurformulaire étant le nom de la box liste déroulante), je sais que je suis un branlot mais j'espère qu'on va y arriver !
If "valeurformulaire" = "ABBN" Then
dl = Range("B2")
Else
If "valeurformulaire" = "ADEN" Then
dl = Range("B3")
Else
If "valeurformulaire" ="ATLN" Then
dl = Range("B4")
Else
If "valeurformulaire" = "BAER" Then
dl = Range("B5")
Else
If "valeurformulaire" = "CFR" Then
dl = Range("B6")
Else
dl = Range("B7")
End If
End If
End If
End If
End IfOK, allons-y alors...
Supprime tout tes If
colle ce code
Private Sub valeurformulaire_Click()
dl = Sheets("Titres SMI").Range("B" & valeurformulaire.ListIndex + 2)
End SubTu dois déclarer dl tout en haut du module.
A+
Variante:
Sub GetDataSMI()
'Déclaration des variables
Dim DataSheet As Worksheet
Dim SMI As String
Dim URL As String
URL = Sheets("Titres SMI").Range("B" & UserForm1.valeurformulaire.ListIndex + 2)
'.... suite de la procédureMerci d'avoir répondu
Alors j'ai préféré la deuxième solution car elle s'intégrait plus dans mon code. Maintenant cela ne fonctionne pas à cause de la ligne en rouge( Refresh backgroundquery:=False ).( Ce code d'import vient d'internet, je l'ai un peu modifié mais j'ai gardé la dernière partie "procédure de cleaning", apparement cela formate les cellules de ma feuille. )
Sais tu comment je peux résoudre ca ?
Merci encore
'Import des data UBS par un SUB
Sub GetDatatitre()
'Déclaration des variables
Dim DataSheet As Worksheet
Dim SMI2 As String
Dim URL As String
Dim i As Double
'Règles d'actualisation
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.Calculation = xlCalculationManual
'Destination de l'import
Set DataSheet = Worksheets("SMI")
'Emplacement de l'import
SMI2 = DataSheet.Range("I1").Value
Range("I1").CurrentRegion.ClearContents
'Lien URL
' Cette procédure permet de refaire l'allocation des titres de l'indice par leur taille
URL = Sheets("Titres SMI").Range("B" & UserForm1.valeurformulaire.ListIndex + 2)
'URL = "http://ichart.finance.yahoo.com/table.csv?s=UBS&a=02&b=14&c=2010&d=02&e=14&f=2013&g=d&ignore=.csv" & SMI2
'Procédure de cleaning
With DataSheet.QueryTables.Add(Connection:="URL;" & URL, Destination:=DataSheet.Range("I1"))
.BackgroundQuery = True
.TablesOnlyFromHTML = False
[color=#FF0000].Refresh BackgroundQuery:=False[/color]
.SaveData = True
End With
Columns("I:I").Select
Selection.TextToColumns Destination:=Range("I1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
Array(7, 1)), TrailingMinusNumbers:=True
End SubJe pense que ce devrait plutôt être comme ça...
'Procédure de cleaning
With DataSheet.QueryTables.Add(Connection:="URL;" & URL, Destination:=DataSheet.Range("I1"))
.BackgroundQuery = True
'.TablesOnlyFromHTML = False
'<span style="color: #FF0000">.Refresh BackgroundQuery:=False</span>
.SaveData = False
.Refresh BackgroundQuery:=False
.Delete
End WithParfait ! Je te remercie beaucoup !
J'ai encore une question : dans les box qui contienne des calculs j'obtiens des 0.0003039594 , j'aimerais transformer ceci en pourcentage "0.000%", comment dois-je faire ?
Merci
C'est quoi tes Box ?
C'est une textbox. Par exemple dans mon fichier excel la cellule X9 c'est la moyenne des rendements, je fais textbox1=range x9. j'aimerais que dans la textbox cela ne s'affiche pas 0.04993493 mais cette valeur en pourcentage.
Un peu compliquer...
TextBox1.Text = Format(Replace([X9].Value, ".", ",") / 100, "0.000%")A+
Bonjour,
Je vais mettre résolu pour le problème principal mais en ce qui concerne le format cela ne fonctionne pas.
Private Sub varhisto_Change()
varhisto.Text = Format(Replace(Cells(4, 12).Value, ".", ",") / 100, "0.000%")
End SubC'est que ce qui se trouve dans la cellule n'est pas le même que ce que tu montre dans ton poste précédant !!
A savoir : 0.04993493
tu colle cette valeur dans une cellule et tu verras que ça fonctionne.
Poste un exemple avec les nombres à formater.
EDIT: TE RELISANT..... QUE VIENT FAIRE CETTE FONCTION DANS LE CHANGE DU TEXBOX