Importation de données par VBA s/Excel

Fermé
winston_smith81 - 24 nov. 2009 à 13:01
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 24 nov. 2009 à 14:49
Bonjour vous...

Voilà mon problème, j'ai un code, que je copie ci-après, que je dois expliquer...je ne vous cache pas que c'est pour un de mes cours à l'uni...

N'étant pas infomaticien, programmeur ou que sais-je, je n'ai aucune connaissances en programmation et nage un peu...de plus notre prof ne nous aide pas bcp en nous balançant ses codes et "démerdez vous !"...ce qui est certainement efficace d'un point de vue pédagogique, mais bcp moins du point de vue de mon système nerveux...

Je sais que certains d'entre-vous n'aiment pas donner des réponses sans qu'il y ait eu de réflexion préalable de la part de la personne qui pose cette question. C'est pourquoi je ne vous demande pas de faire ce travail à ma place (à moins que vous le vouliez, moi ça me va), mais de m'aiguiller (je sais pas trop comment) ou alors me donner une adresse web où je pourrais trouver une sorte de lexique de lignes de codes VBA, si cela existe.

Donc voilà le code que je dois décrire ligne par ligne, j'ai un peu commencé mais ne suis même pas sûr de ce que j'ai marqué...

Merci d'avance !!!

Signé : celui qui à envie de faire bouffer son PC à son prof


Sub GetStock(ByVal stockSymbol As String, ByVal StartDate As Date, ByVal EndDate As Date)

Dim DownloadURL As String

Dim StartMonth, StartDay, StartYear, EndMonth, EndDay, EndYear As String

StartMonth = Format(Month(StartDate) - 1, "00")
'Format de la variable mois de début

StartDay = Format(Day(StartDate), "00")
'Format de la variable jour de début

StartYear = Format(Year(StartDate), "00")
'Format de la variable année de début

EndMonth = Format(Month(EndDate) - 1, "00")
'Format de la variable mois de fin

EndDay = Format(Day(EndDate), "00")
'Format de la variable jour de fin

EndYear = Format(Year(EndDate), "00")
'Format de la variable année de fin

DownloadURL = "URL;http://table.finance.yahoo.com/table.csv?s=" + stockSymbol + "&a=" + StartMonth + "&b=" + StartDay + "&c=" + StartYear + "&d=" + EndMonth + "&e=" + EndDay + "&f=" + EndYear + "&g=d&ignore=.csv"
'La variable "DownloadURL" est l'adresse internet à partir de laquelle nous allons récolter les données. Cette adresse inclut les différentes autres variables de ce code (StartDay p.ex.)

With ActiveSheet.QueryTables.Add(Connection:=DownloadURL, Destination:=Range("$A$1"))

.FieldNames = True

.RowNumbers = False

.FillAdjacentFormulas = False

.PreserveFormatting = True

.RefreshOnFileOpen = False

.BackgroundQuery = True

.RefreshStyle = xlInsertDeleteCells

.SavePassword = False

.SaveData = True

.AdjustColumnWidth = True

.RefreshPeriod = 0

.WebSelectionType = xlSpecifiedTables

.WebFormatting = xlWebFormattingNone

.WebTables = "20"

.WebPreFormattedTextToColumns = True

.WebConsecutiveDelimitersAsOne = True

.WebSingleBlockTextImport = False

.WebDisableDateRecognition = False

.WebDisableRedirections = False

.Refresh BackgroundQuery:=False

End With

ActiveWindow.SmallScroll Down:=-12
Columns("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 4), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1))
Columns("A:F").EntireColumn.AutoFit


End Sub



Sub Download()

Call GetStock("YHOO", "02/01/2007", "09/05/2008")

End Sub
A voir également:

1 réponse

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 307
24 nov. 2009 à 14:49
Bonjour,

Si ce code est de ton prof d'info: il n'est pas du tout à la hauteur!!!

par exemple, erreur de débutant-qui-n'a-pas-compris-les-principes de base:
Dim StartMonth, StartDay, StartYear, EndMonth, EndDay, EndYear As String
fait que seul Endyear est du type string, les autres en variant ==> occupation néfaste de la RAM
devrait s'écrire:
dim startmonth as string, startday as string etc.
D'autre part, toute module de macro devrait commencer par Option explicit (avant le nom de la macro) en haut de page.

a partir de
With ActiveSheet.QueryTables.Add(...
c'est fait avec l'enregistreur de macro: il n'y a aucun effort d'élagage de param^tres inutiles, des instructions parasites comme
ActiveWindow.SmallScroll Down:=-12

ce qui explique pourquoi le prof vous donne le code et DDTS (Démer...Toi Tout Seul ==> acronyme d'autoformation)

cette macro est dite paramétrée avec le symbole du stock, la date début et date fin ce qui permet de moduler la recherche et de réutiliser cette macro suivant de nouveaux paramètres

le date sont transférés en texte de 2 chiffres pour donner un format lisible sur le site web(date du type (00, 00, 00 apparament en 3 champs (url) et sélectionner les valeurs dont on a besoin
ces valeurs sont ensuite extraites dans Excel par importation de données externes

si tu as besoin d'autres choses...
edit; modifié en souligné
0