Pb:Nommer une cellule variable dans une macro

Bonjour à tous,

Je vous contacte, car j'ai besoin de votre aide pour corriger une macro créée à partir de son enregistrement sous Excel (pas optimisée en fait, moche, mais fonctionnelle)…:?

Elle est fait pour demander de copier la cellule (variable) d'une première feuille, aller sur un site internet et coller dans l'URL, la valeur de la cellule copier et mettre le tableau souhaité dans une seconde feuille, une fois cette étape passée copier une cellule dans cette nouvelle feuille et la coller dans une troisième puis revenir sur la seconde feuille et effacer le contenu de celle-ci sans effacer la requête afin de recommencer avec une boucle, car il y a plusieurs cellules de la première feuille à copier tant que la cellule suivante de la colonne n'est pas vide… je crois que c'est clair comme cela non…

Je pense que l'erreur vient du fait que j'appelle mal la cellule " Sheets("feuille1").Cells(2, J)" car je ne sais pas comment faire pour désigner la cellule Bj de la feuille1 (avec j variable)

Mais pour plus de clarté, voilà ma macro

Sub Yahoo()
'
' Code_Classification_Yahoo Macro
'
Dim J As Integer
J = 18
If Sheets("feuille1").Cells(2, J) <> "" Then

Sheets("feuille2").Select
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://fr.finance.yahoo.com/q/ls?s=" & Sheets("feuille1").Cells(2, J), Destination:=Range( _
"$B$3"))
.Name = "ls?s=" & Sheets("feuille1").Cells(2, J)
.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 = """yfncsubtit"",15"
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False

End With

    Sheets("feuille2").Select
    Range("C5").Select
    Selection.Copy
    Sheets("feuille3").Select
    Range("$K$36").Select
    ActiveSheet.Paste
    Sheets("feuille2").Select
    Range("B3:C9").Select
    Application.CutCopyMode = False
    Selection.QueryTable.Delete
    Selection.ClearContents

J = J + 1

End If

End Sub

Merci d'avance pour votre aide

E.C

Bonsoir,

Si j'ai bien compris ton soucis, pour désigner la cellule Bj -> Sheets("feuille1").Cells(J, 2) ou J équivaut à la ligne et 2 à la colonne B.

Essaye ton code comme ceci :

Sub Yahoo()
' Code_Classification_Yahoo Macro
Dim J As Integer
J = 18
If Sheets("feuille1").Cells(J, 2) <> "" Then
With Sheets("feuille2")
    .Select
With .QueryTables.Add(Connection:= _
"URL;http://fr.finance.yahoo.com/q/ls?s=" & Sheets("feuille1").Cells(2, J), Destination:=Range( _
"$B$3"))
.Name = "ls?s=" & Sheets("feuille1").Cells(2, J)
.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 = """yfncsubtit"",15"
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
.Range("C5").Copy Destination:=Sheets("feuille3").Range("K36")
End With
With .Range("B3:C9")
    .ClearContents
    .QueryTable.Delete
End With
J = J + 1
End If
End Sub

Amicalement

Dan

Bonsoir Dan,

J'ai repris tes corrections et la macro fonctionne… ta seconde partie est bien plus simple que celle que j'avais écrite via l'enregistreur Excel de macro.

J'ai changé la condition if par celle de while

Cependant, alors que j'ai essayé de faire varier le "K36" sur la partie Range("C5").Copy Destination:=Sheets("feuille3").Range("K36") remplacé par Range("C5").Copy Destination:=Sheets("feuille3").cells(11,i)

Avec i nouvelle variable qui commence a 36 et un second compteur i=i+1 et bien j'ai un problème d'affichage, car dans la feuille 3 en K36 j'ai une cellule vide, en K37 idem, K38 idem, K39 j'ai une valeur affichée et k40 cellule vide et k41 affichage de la valeur…

J'ai pensé qu'en fait la partie clearcontent effaçait avant que la macro puisse copier ce qui fait que de temps en temps la macro copie une cellule vide… c'est pourquoi j'ai tenté d'introduire la ligne de commande [Range("C5").Copy Destination:=Sheets("feuille3").cells(11,i)] a la fin de la première partie avant de mettre fin a la boucle endwith cpendant cela n'a rien changé et si ce n'est qu'il copie juste la première valeur en k36 et les autres cellules il les laisse vide…

J'ai repris la condition if mais c'est pareille… je sèche…

Tu en connais la raison de cet affichage????

Sinon comment trouves-tu la première partie (celle de la requête)? Est-elle optimale ou peut-elle être améliorée ?

Merci pour ton aide…et celle des autres a venir

E.C

Salut le forum

Tu donnes 2 exemples de cote à récupérer et je t'adapte la macro.

Car la on ne sait pas qui et quoi lire.

Mais avec le décalage horaire, tu auras surement déjà reçu une réponse, lors de ma connection.

Mytå

re,

à mon avis, tu as une instruction mal placée dans la boucle de la variable i.

Pas sûr de ce que je te propose sans voir ton fichier ou ta macro mais essaye avec :

  • .Range("C5").Copy Destination:=Sheets("feuille3").Range("K" & i)
  • mettre le i = 36 juste arès de J=18
  • mettre i = i + 1 après l'instruction .Range("C5").Copy Destination:=Sheets("feuille3").Range("K" & i)

Amicalement

Dan

Bonjour à Dan, Bonjour Mytå et bonjour les tous les autres,

Voila je pense que se sera plus clair avec un fichier joint (https://www.excel-pratique.com/~files/doc/lgjSUSuivi_valeurs_v1.0.xlsm) … n'est pas Mytå! . Je l'ai simplifié, car il y avait des feuilles inutiles.

Tout d'abord, j'ai utilisé MSN money (add on financier de Microsoft)

Voilà…

Sinon j'ai modifié suivant tes instructions Dan et rien de différent….Je ne comprends vraiment pas d'où vient le bug…

Merci pour votre aide a tous et surtout toi Dan

E.C

re,

Ton fichier est au format excel 2007. Aafin que je puisse le lire merci de le mettre au format .xls (excel 2003, 2000 ...)

A te relire

Dan

bonjour Dan,

le voila donc en format 2003...effectivement c'est peut etre plus facile comme cela!8)

https://www.excel-pratique.com/~files/doc/r3MyWSuivi_valeurs_v1.0.xls

Merci de ton aide Dan

E.C

1fichierrecup.xlsm (12.52 Ko)

re,

Pas facile sans avoir des données en feuille 2.

En regardant ton fichier, la macro ne correspond pas à cellle que je t'ai donnée...

Essaye ceci où j'ai corrigé :

Sub classsification_Yahoo()
' classsification_Yahoo Macro
Dim J As Integer, i As Integer
J = 5
i = 3
If Sheets("Feuille1").Cells(J, 3) <> "" Then
    With Sheets("Feuille2")
    .Select
        With .QueryTables.Add(Connection:= _
            "URL;http://fr.finance.yahoo.com/q/ls?s=" & Sheets("Feuille1").Cells(J, 3), Destination:=Range( _
            "$B$3"))
            .Name = "ls?s=" & Sheets("Feuille1").Cells(J, 3)
            .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 = """yfncsubtit"",15"
            .WebPreFormattedTextToColumns = True
            .WebConsecutiveDelimitersAsOne = True
            .WebSingleBlockTextImport = False
            .WebDisableDateRecognition = False
            .WebDisableRedirections = False
            .Refresh BackgroundQuery:=False
            End With

    .Range("C5").Copy Destination:=Sheets("Feuille3").Range("C" & i)
    i = i + 1
    End With

    With Sheets("Feuille2").Range("B3:C9")
    .ClearContents
    .QueryTable.Delete
    End With
    J = J + 1
End If
end sub

Tu peux aussi raccourci le code en supprimant toutes les instructions mises à FALSE. Enfin fais un essai pour voir si tout est correct.

Dan

Salut Dan,

En fait la feuille2 est juste la pour la requête...

Oui la macro ne correspondait pas tout a fait car j'ai voulu la mettre dans un nouveau dossier Excel pour l'exemple car mon dossier 1er était trop volumineux et n'avait trop rien a voir avec cette macro...

J'ai repris ta nouvelle macro et cela ne fonctionne pas non plus car en feuille3 on n'as pas, en colonne C la suite des codes Yahoo ...

En fait je viens de m'apercevoir que pour Alti il n'y a pas de page disponible pour Temps-Réel/ECN (le cours en temps réel), cependant en changeant l'adresse de la requête on peu récupérer les codes Yahoo qui sont en fait des codes Reuters quelque soit la valeur…

J'essaie et je te tiens au courant

E.C

voila la nouvelle macro avec la nouvelle requete et le probleme reste entier....

Sub classsification_Yahoo()
' classsification_Yahoo Macro
Dim J As Integer, i As Integer
J = 5
i = 3
If Sheets("Feuille1").Cells(J, 3) <> "" Then
    With Sheets("Feuille2")
    .Select
        With .QueryTables.Add(Connection:= _
            "URL;http://fr.finance.yahoo.com/q/pr?s=" & Sheets("Feuille1").Cells(J, 3), Destination:=Range( _
            "$B$3"))
            .Name = "ls?s=" & Sheets("Feuille1").Cells(J, 3)
            .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 = "23"
        .WebPreFormattedTextToColumns = True
        .WebConsecutiveDelimitersAsOne = True
        .WebSingleBlockTextImport = False
        .WebDisableDateRecognition = False
        .WebDisableRedirections = False
        .Refresh BackgroundQuery:=False
            End With

    .Range("C4").Copy Destination:=Sheets("Feuille3").Range("C" & i)
    i = i + 1
    End With

    With Sheets("Feuille2").Range("B3:C8")
    .ClearContents
    .QueryTable.Delete
    End With
    J = J + 1
End If
End Sub

Je ne comprends pas trop pourquoi.... et toi

Merci de ton aide

E.C

re,

Ne peux tu pas me donner un fichier plus complet de manière à comprendre ce que tu fais, ce sera plus facile.

Je n'ai pas la possibilité d'utiliser le Query comme tu le fais pour avoir des données.

Dan

salut,

En fait j'ai essayé une boucle while et cela a très bien fonctionné... donc la macro tourne bien c'est OK

Si quelqu'un peut embellir cette macro en la simplifiant ce serait un vrai plus...

Merci a Tous et a Dan en particulier

E.C

re,

Pour cela, il faudrait voir la macro finale mais comme je te l'ai écrit vant tu peux déjà supprimer les instructions FALSE.

Dan

Nad-Dan a écrit :

re,

Pour cela, il faudrait voir la macro finale mais comme je te l'ai écrit vant tu peux déjà supprimer les instructions FALSE.

Dan

ben non en fait... je l'ai fait mais il apparait alors des messages d'erreurs...

Autre suggestion?

E.C

Salut le forum

On va commencer avec un fichier qui fonctionne, avant d'aller plus loin.

A tester : Requête_Yahoo

Mytå

Mytå a écrit :

Salut le forum

On va commencer avec un fichier qui fonctionne, avant d'aller plus loin.

A tester : Requête_Yahoo

Mytå

Salut Mytå,

je viens de checker ta macro ... elle est bien.

cependant, comme je l'ai écrit précédemment je recherche les code Yahoo ou Reuters adossé a un code Isin (exemple : ISIN=FR0000125486 Yahoo ou Reuters=DG.PA) c'est pourquoi j'indiquais a Dan qu'il y avait l'adresse suivante pour la requête qui était préférable pour trouver a tous les coups le code de correspondance adéquat qui est :

http://fr.finance.yahoo.com/q/pr?s=FR0000125486 (ce code ISIN est juste un exemple) ...

La requête alors doit interroger le net puis récupérer le bon code et le mettre dans la bonne cellule...

La macro de Dan est bonne en y intégrant une boucle tant que...

Et la tienne est intéressante pour son optimisation...mais la tienne copie les cours (regarde dans le lien choisi en exemple le tableau "CARTE D'IDENTITÉ" regroupe toutes les infos qui nous intéressent…

En tout les cas ta macro fonctionne tout comme celle de Dan of course

Merci de vos aides...

E.C

Re le forum

Tu veux récupérer

ISIN:    FR0000125486
Code Reuters:    DG.PA
Code Local :    DG
Auditeur:    Deloitte Touche Tohmatsu
Nombre employés:    158.628 ( 31/12/2007 )
    142.500 ( 31/12/2006 )

Mais quoi faire ensuite avec.

Plus le fils avance moins je comprends ta demande

Mytå

ma demande était simple a la base...euh je crois qu'elle l'est toujours... c'était simplement de récupérer les codes reuters...en fonction du code ISIN de la feuille1... et de les classer dans une feuille3... voir conversations précédentes et l'exemple joint...

voila en fait j'avais un problème dans le traitement de cells() car je ne savais pas l'appeler pour m'apercevoir grâce a Dan que j'avais inversé les lignes et les colonnes.

la macro tel que faite a présent fonctionne bien (avec la boucle tant que) mais elle est trop lourde et pas belle...c'est pourquoi ton aide est la bienvenue...

c'est mieux comme explication...

Merci de ton aide

E.C

Re le forum

Si ta macro fonctionne, merci de joindre un fichier si tu veux de l'aide.

Sinon on passe par une requête avec un fichier .iqy qui lui permet de lire une page

web entière et ensuite de la traiter avec une macro du style.

Cells.Find(What:="abc", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False).value

Mytå

Merci aussi, d'utiliser répondre au lieu de citer les balises Quote ne servent à rien

Répondre est en bas de la ficelle.

Rechercher des sujets similaires à "nommer variable macro"