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
Loop
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       

[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
53aide-excel.xlsm (96.31 Ko)

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 , je ne suis pas sur de comprendre le sens de ta question lermite. A chaque fois que l'utilisateur choisis un titre dans la liste, c'est censé importé les données dans les cellules de la feuille "SMI" prédéfinies dans le module 1 avec le "URL=" cela marche parfaitement lorsque j'y met le lien pour un titre. En voulant faire le formulaire, je veux qu'il ai le choix du titre, d'ou les 20 liens. Il ne télécharge qu'un titre qui va se comparer avec la performance de l'indice.

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 If

OK, allons-y alors...

Supprime tout tes If

colle ce code

Private Sub valeurformulaire_Click()
    dl = Sheets("Titres SMI").Range("B" & valeurformulaire.ListIndex + 2)
End Sub

Tu 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édure

Merci 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 Sub

Je 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 With

Parfait ! 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 Sub

C'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

Rechercher des sujets similaires à "formulaire liste deroulante"