Afficher des plages de cotations sous conditions

Fermé
chrisnapoli - Modifié le 18 juin 2018 à 08:52
 Whismeril - 17 juil. 2018 à 08:56
Bonjour,
je n arrive toujours pas a solutionner ce casse tète
j ai une macro qui m affiche plusieurs plages vers 2 graphes sous condition
cette macro s’exécute par Bouton; elle fonctionne parfaitement ; mais je voudrais qu elle s’exécute automatiquement d 'elle même je mets le code en dessous
j ai vu que certains font tourner en boucle une macro qui copie les formule et le format sous condition et qui balaie en même temps chaque fois que la condition change ,ce n 'est pas exactement ce que je voulais faire,mais si il n ya pas d 'autres solution alors j adopterais celle ci
je mets le code en dessous de ma macro actuelle (je désire qu elle s’exécute automatiquement)
Merci de votre aide

Option Compare Text
Private Sub linkrg(target As Range, source As Range)
source.Copy
target.Parent.Activate
target.Select
target.Parent.Paste link:=True
Application.CutCopyMode = False
End Sub
Sub RecopiePlage()

Application.ScreenUpdating = True


If [AX101] = "Ok" Then
Call linkrg([CK11:CS51], [BA101:BI141])
ElseIf [AX144] = "Ok" Then
Call linkrg([CK11:CS51], [BA144:BI184])
ElseIf [AX187] = "Ok" Then
Call linkrg([CK11:CS51], [BA187:BI227])
ElseIf [AX230] = "Ok" Then
Call linkrg([CK11:CS51], [BA230:BI270])
ElseIf [AX273] = "Ok" Then
Call linkrg([CK11:CS51], [BA273:BI313])
End If
If [BZ101] = "Ok" Then
Call linkrg([DB11:DJ51], [BO101:BW141])
ElseIf [BZ144] = "Ok" Then
Call linkrg([DB11:DJ51], [BO144:BW184])
ElseIf [BZ187] = "Ok" Then
Call linkrg([DB11:DJ51], [BO187:BW227])
ElseIf [BZ230] = "Ok" Then
Call linkrg([DB11:DJ51], [BO230:BW270])
ElseIf [BZ273] = "Ok" Then
Call linkrg([DB11:DJ51], [BO273:BW313])
End If
If [AX316] = "Ok" Then
Call linkrg([CK57:CS97], [BA316:BI356])
ElseIf [AX359] = "Ok" Then
Call linkrg([CK57:CS97], [BA359:BI399])
ElseIf [AX402] = "Ok" Then
Call linkrg([CK57:CS97], [BA402:BI442])
ElseIf [AX445] = "Ok" Then
Call linkrg([CK57:CS97], [BA445:BI485])
ElseIf [AX488] = "Ok" Then
Call linkrg([CK57:CS97], [BA488:BI528])
End If
If [BZ316] = "Ok" Then
Call linkrg([DB57:DJ97], [BO316:BW356])
ElseIf [BZ359] = "Ok" Then
Call linkrg([DB57:DJ97], [BO359:BW399])
ElseIf [BZ402] = "Ok" Then
Call linkrg([DB57:DJ97], [BO402:BW442])
ElseIf [BZ445] = "Ok" Then
Call linkrg([DB57:DJ97], [BO445:BW485])
ElseIf [BZ488] = "Ok" Then
Call linkrg([DB57:DJ97], [BO488:BW528])
End If
Cells(12, 1).Activate
ActiveWindow.ScrollRow = ActiveCell.Row
End Sub




EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
A voir également:

41 réponses

chrisnapoli
19 juin 2018 à 14:08
Bonjour
seul le code pour une feuille marche parfaitement celui de 4 feuilles ne marche pas du tout je ne sais pas pourquoi c'est trop compliqué pour moi
0
chrisnapoli
24 juin 2018 à 12:19
Bonjour
je viens d’essayer ton code pour TIMER SEUL ('4feuilles ) avec le bitcoin donc j ai modifié l heure puis j ai ouvert
les cotations tournaient en permanence avant que le timer se mette en route puis ça c'est mis a coller directement a l heure programmée dans la colonne 09:01:00 mais les OK sont toujours inscrit dans la colonne C?????
je ne peux pas juger si la procédure ok fonctionne parcequ on est pas dans une configuration normale dhabitude aucun cours n'est active au démarrage du fichier puisque l'ouverture des marches se fait a 09:00 apres il ya autre chose
lorsque je ferme le document il y a une fenêtre qui s'ouvre ou est inscrit erreur de compilation Sub ou Function non définie dans le code qui apparait dans workbook il ya call arrêt cotation en bleu qui s'affiche

j ai apres ouvert l autre fichier que tu m avais fait TIMER CAC40 seul la aussi avec le bitcoin donc les cotations tournaient au moment ou j ai ouvert le dossier mais la par contre aucun OK d'inscrit sur la colonne C a part ca le timer lui aussi collait parfaitement je te mets le code qui buggait a la fermeture sur TIMER SEUL

Option Explicit
Private Sub Workbook_Open()
Sheets("CAC40").Select
c = 383
Application.OnTime TimeValue("12:04:00"), Procedure:="RecupCotation" '"09:01:00"
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim marches, marche
Dim sh As Worksheet
    marches = Split(ndf, ",")
    For Each marche In marches
        With Sheets(marche)
            .Range("D12:H51").Value = .Range("AS12:AW51").Value
            .Range("C12:C51").ClearContents
            .Range("C11") = Now
        End With
    Next marche
    Call ArretCotation
End Sub




0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477 > chrisnapoli
24 juin 2018 à 13:18
pour éviter le message d'erreur "Sub ou Function non définie", retire le Private dans module1 devant "Sub ArretCotation()".
0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477 > chrisnapoli
24 juin 2018 à 13:23
les ok en colonne C sont effacés, normalement, à la fermeture du fichier. cela n'a peut-être pas été fait à cause du bug "Sub ou Function non définie".
0
chrisnapoli > yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024
24 juin 2018 à 13:53
Bien vu
effectivement les OK se sont effaces et les cotations en D12:H51 se sont colles a la fermeture reste plus qu a attendre demain pour voir si cela marche (mais alors je pige toujours pas ; si ces ok s affichent seulement quand les cotations sont différentes ,ils devraient des que les cours tournent etre sans arret dans la colonne C?????

reste plus que maintenant a solutionner le problème des OK sur l autre code afin d’éliminer le problème du sablier permanent
après j aurais je pense tout finit me restera que le mettre en java script pour le Web
ah j oubliais
a moins que tu sois capable de me résoudre mon problème de graphe que je t avais envoyé un jour
ce graphe marchait parfaitement
il ya du y avoir une mauvaise manip

https://cjoint.com/c/HFylZ7bXxMt
0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477 > chrisnapoli
24 juin 2018 à 15:21
les ok devraient apparaître dès que le timer tourne et que le contenu de D:H devient différent du contenu de AS:AW.

pour le sablier permanent: as-tu testé le code proposé en #119?

je regarde si je suis inspiré pour le problème de graphe
0
chrisnapoli
19 juin 2018 à 16:13
le probleme est que tu me parles comme si je connaissais la programmation
moi jai de la facilite a trouver des logiques et creer des applications mais je ne connais absolument rien au langage
alors j ai du mal d'autant que je pige pas que tu ai mis statist dans sheet alors que cela concerne seulement le premier code qui marche deja
moi c'est le deuxieme que je veux solutionner alors j ai un peu d mal a comprendre quand tu marque feuilles avec rien dedans je sais pas si il me faut mettre les quatres feuilles ou seulement la premiere
de plus ne connaissant pas les signes je vois pas très bien comment cela pourrait fonctionner il faut que tu me dises ou je faits mes erreurs
aussi tu me parles de baniere de code je ne sais même pas de quoi tu me parles
effectivement j ai vu un bouton qui pour toi est évident ,mais encore une fois pas pour moi je te mets les codes tels que je les ai ecrit
si tu veux me corriger tu le faits sinon tant pis j irai voir un devellopeur

<Option Explicit
Private Sub Workbook_Open()
Sheets("CAC40,AEX,BEL20,PSI20").Select
c = 383
Application.OnTime TimeValue("16:16:00"), Procedure:="RecupCotation" '"09:01:00"
'Range("NR12:AHW131").ClearContents
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Const ndf = "CAC40,AEX,BEL20,PSI20"
Dim marches, marche
Dim sh As Worksheet
marches = Split(ndf, ",")
For Each marche In marches
Set sh = Sheets(marche)
sh.Range("D12:H51").Value = sh.Range("AS12:AW51").Value
sh.Range("C12:C51").ClearContents
sh.Range("C11") = Now
Next marche
End Sub
Option Explicit
Dim marches() As String
Sub init_marches()
ReDim marches(3)
marches(0) = "CAC40"
marches(1) = "AEX"
marches(2) = "BEL20"
marches(3) = "PSI20"
End Sub
Sub copy_dh1()
Dim sh As Worksheet
Set sh = Sheets(CAC40, AEX, BEL20, PSI20)
sh.Range("D12:H51").Value = sh.Range("AS12:AW51").Value
sh.Range("C12:C51").ClearContents
sh.Range("C11") = Now
End Sub
Sub copy_dh()
Dim marche As Variant
Dim fl As Worksheet
For Each marche In marches
Set fl = Sheets(marche)
Call copy_dhfl(fl)
Next marche
End Sub
Sub copy_dhfl(sh As Worksheet)
sh.Range("D12:H51").Value = sh.Range("AS12:AW51").Value
sh.Range("C12:C51").ClearContents
sh.Range("C11") = Now
End Sub
<code>Private Sub Workbook_BeforeClose(Cancel As Boolean)
copy_dh
End Sub
Private Sub copy_dh()
Dim sh As Worksheet
Set sh = Sheets(feuille)
sh.Range("D12:H51").Value = sh.Range("AS12:AW51").Value
sh.Range("C12:C51").ClearContents
sh.Range("C11") = Now
End Sub

0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 685
19 juin 2018 à 18:37
Bonsoir,

Tu as réussi à utiliser le bouton une fois sur deux. ;-)

Quel est ton souci ? qu'est-ce qui ne fonctionne pas ?
0
chrisnapoli
20 juin 2018 à 00:19
de quel bouton????
je ne peux pas deviner c'est très mal explique j ai cliqué sur le bouton ou est inscrit code et ya ca qui se met >code


après je ne sais pas ou faut il le mettre et de quelle manière
pour les codes il n ya que le code du timer qui fonctionne l 'autre ne colle rien je ne sais pas si il est bien ecrit si il faut specifier les 4 feuilles la ou tu as mis sheets
c'est vraiement la devinette...?pour quelqu un qui ne connait pas c'est pourtant pas sorcier d'expliquer les choses clairement
0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
20 juin 2018 à 09:18
il suffit de sélectionner le code, puis de cliquer sur le bouton et de choisir le langage (basic pour VBA).
0
chrisnapoli > yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024
20 juin 2018 à 10:23
Bonjour
comme ceci ????
profite en pour regarder ce qui ne fonctionne pas dans ce code j ai absolument rien qui se colle dans ce code
ne faudrait il pas corriger dans workbooksheet et mettre les 4 fauilles dans Sheets("CAC40,AEX,BEL20,PSI20")

dans
workbooksheet j ai

<code basic>
</code>
Option Explicit
Private Sub Workbook_Open()
Sheets("CAC40").Select
c = 383
Application.OnTime TimeValue("09:50:00"), Procedure:="RecupCotation" '"09:01:00"
'Range("NR12:AHW131").ClearContents
End Sub



Private Sub Workbook_BeforeClose(Cancel As Boolean)
Const ndf = "CAC40,AEX,BEL20,PSI20"
Dim marches, marche
Dim sh As Worksheet
marches = Split(ndf, ",")
For Each marche In marches
Set sh = Sheets(marche)
sh.Range("D12:H51").Value = sh.Range("AS12:AW51").Value
sh.Range("C12:C51").ClearContents
sh.Range("C11") = Now
Next marche
End Sub

dans module1

<code basic>
</code>
Option Explicit
Public Durée As Date
Public c As Long
Sub RecupCotation()
Durée = Now + TimeValue("00:01:00") ' A remplacer par "00:01:00"
Application.OnTime Durée, "RecupCotation"
Range(Cells(12, c), Cells(131, c)) = Range("A12:A131").Value
c = c + 1
If c >= 908 Then ArretCotation 'N° de la dernière colonne
End Sub
Sub ArretCotation()
On Error Resume Next
Application.OnTime Durée, "RecupCotation", , False
End Sub

dans module6

<code basic>
</code>
Private Sub Workbook_BeforeClose(Cancel As Boolean)
copy_dh
End Sub
Private Sub copy_dh()
Dim sh As Worksheet
Set sh = Sheets(feuille)
sh.Range("D12:H51").Value = sh.Range("AS12:AW51").Value
sh.Range("C12:C51").ClearContents
sh.Range("C11") = Now
End Sub

dans module8

<code basic>
</code>

Option Explicit
Dim marches() As String
Sub init_marches()
ReDim marches(3)
marches(0) = "CAC40"
marches(1) = "AEX"
marches(2) = "BEL20"
marches(3) = "PSI20"
End Sub
Sub copy_dh1()
Dim sh As Worksheet
Set sh = Sheets(CAC40, AEX, BEL20, PSI20)
sh.Range("D12:H51").Value = sh.Range("AS12:AW51").Value
sh.Range("C12:C51").ClearContents
sh.Range("C11") = Now
End Sub
Sub copy_dh()
Dim marche As Variant
Dim fl As Worksheet
For Each marche In marches
Set fl = Sheets(marche)
Call copy_dhfl(fl)
Next marche
End Sub
Sub copy_dhfl(sh As Worksheet)
sh.Range("D12:H51").Value = sh.Range("AS12:AW51").Value
sh.Range("C12:C51").ClearContents
sh.Range("C11") = Now
End Sub
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 20 juin 2018 à 10:22
@chrisnapoli: à droite du bouton code du forum, tu as une petite flèche qui pointe vers le bas et qui permet de sélectionner le langage correspondant au code posté. Clique dessus et choisis "basic" pour le langage VBA comme indiqué par yg_be.

En faisant cela, cela va insérer <code basic></code> dans la fenêtre d'édition du message sur CCM.

Le bouton à gauche de la flèche insère seulement <code></code> (sans préciser le langage), et ne fait que préserver l'indentation (c'est à dire les espaces dans le code) sans aucune coloration syntaxique.

Tu dois ensuite mettre ton code entre les deux balises de code. Comme cela.

<code basic>
ton code ici
</code>

Tu peux cliquer sur le bouton "Prévisualiser" avant de cliquer sur le bouton "Valider" pour vérifier que ton message se présente correctement.

Une autre façon de faire est (comme le dit yg_be aussi) de coller d'abord ton code dans la fenêtre d'édition du forum CCM, de le sélectionner avec la souris, et de cliquer comme indiqué ci-dessus. Cela aura pour effet d'entourer le texte sélectionné des balises de code choisies.

En fait yg_be avait tout dit en une ligne de façon concise ... je me suis contenté de développer :-D

Sur le reste, il y a des années que je n'ai pas fait de VBA, alors je ne me lancerai pas dedans pour tenter de t'aider sur le fond de ta/tes question(s). Cependant, vu vos nombreux échanges et les incompréhensions de part et d'autre, je partage l'avis de gbinforme que tu devrais poster ton classeur (par exemple sur https://cjoint.com/) et envoyer sur le forum le lien vers ton classeur en disant précisément ce qui selon toi ne marche pas, ce que cela fait et ce que tu voudrais que cela fasse.

Dal
0
chrisnapoli > [Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024
20 juin 2018 à 12:02
Bonjour
Merci tu es le seul qui m 'a expliqué clairement comment cela fonctionne
c'est un peu tard mais ca va me servir a l avenir
c'est un peu folklo pour l 'amateur
il suffisait de mettre la même explication dans leurs bazars et on passerait pas du temps à se poser des questions
Bonne journée
0
chrisnapoli > [Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024
20 juin 2018 à 12:11
un essai


Option Explicit
Private Sub Workbook_Open()
Sheets("CAC40").Select
c = 383
Application.OnTime TimeValue("09:50:00"), Procedure:="RecupCotation" '"09:01:00"
'Range("NR12:AHW131").ClearContents
End Sub



Private Sub Workbook_BeforeClose(Cancel As Boolean)
Const ndf = "CAC40,AEX,BEL20,PSI20"
Dim marches, marche
Dim sh As Worksheet
    marches = Split(ndf, ",")
    For Each marche In marches
        Set sh = Sheets(marche)
        sh.Range("D12:H51").Value = sh.Range("AS12:AW51").Value
        sh.Range("C12:C51").ClearContents
        sh.Range("C11") = Now
    Next marche
End Sub


0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 685
20 juin 2018 à 08:22
Bonjour,

y a ca qui se met >code après je ne sais pas ou faut il le mettre
Il me semble que tu veux faire un site internet ? sans avoir la moindre idée du code HTML ? étonnant non ?

l 'autre ne colle rien quel autre code ? celui qui fonctionnait vendredi ?

c'est vraiement la devinette...?
Là tu as parfaitement raison et comme ma boule de cristal est en panne je ne comprends pas du tout ce que tu veux...

Le plus simple serait que tu anonymises ton classeur et que tu le mettes sur un lien avec le code que tu as et que tu dises ce qui ne te donnes pas satisfaction.
0

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

Posez votre question
chrisnapoli
20 juin 2018 à 11:57
Bonjour
le site est pratiquement finie malgré ce que tu peux penser
ce que je suis entrain de faire n 'est que de l amélioration parce que je cherche a faire un outil parfait
la connaissance du langage n 'est pas un très grand problème pour moi(la preuve) des que j ai tout fini je te donnerais la possibilité de voir mon travail fini
le plus important a été de trouver la logique et la structure de mon logiciel
je ne m inquiète pas du tout l autre jour tu m 'as envoyé un code qui ne marchait pas et apres avoir un peu pesté après moi tu m 'as trouvé la solution derrière....
pour la transcription il y a des gens compétents comme toi qui trouvent toujours les solutions pour transformer ma logique
la preuve en est c'est que le develloper qui me transforme mon VBA en java script connait tres peu le VBA mais avec un peu de patiente a su metter en pratique exactement ce que je voulais dans le WEB

moi a mon age c'est un peu complique de vouloir apprendre à coder c'est trop long et j ai pas de temps pour cela je préfère me consacrer à inventer des choses et les commercialiser
je t'envoie le fichier en question celui qui colle les cotations sur 4 feuilles j ai mis accessoirement les 4 mêmes liens dde sur chaque feuille tout simplement parce que je n ai pas encore d'API et je me sert d'un logiciel qui ne peut pas copier 4 listes de liens DDE dans le même temps
ça me permet tout de même de voir si le systeme copie les 4 marches en même temps
les horaires de marchés étant les mêmes ,plus tard il me suffira d adapter l API a chaque feuille
quand tu vas ouvrir le document tu vas avoir une fenêtre qui t interroge pour mettre a jouer les liaisons tu cliques sur rien tu vas sur la croix et tu fermes cette fenêtre
https://cjoint.com/c/HFujz35kbnt
0
Salut,

Est-ce conforme à la charte du site d'aider à développer des logiciels pour les commercialiser ?
0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477 > Jeff
23 juin 2018 à 10:36
bonjour Jeff,
est-ce une question, ou un rappel à l'ordre?
je n'ai pas lu que chrisnapoli avait l'intention de commercialiser le code VBA discuté ici.
il me semble que de nombreuses questions dans les forums sont liées à des activités professionnelles, est-ce un soucis?
souhaites-tu mentionner un paragraphe précis de la charte?
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650 > Jeff
23 juin 2018 à 15:41
Bonjour,
Rien n’empêche de commercialiser le code obtenu sur le forum....
Si une personne ne souhaite pas que son code soit diffusé (et/ou) commercialisé... et bien... il ne le poste pas sur un forum publique.
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 685
20 juin 2018 à 18:40
Bonjour,

Bon j'ai ouvert le mastodonte de 101,6 Mo - là c'est du classeur ! ;-)

profite en pour regarder ce qui ne fonctionne pas dans ce code j ai absolument rien qui se colle dans ce code

J'en ai donc profité pour regarder et voir que tu n'avais pas mis la macro de copie sur passage à "ok" mais bon c'est toi le chef et donc tu fais ce que tu veux !

Ensuite j'ai fermé le classeur et j'ai constaté que "ce code qui ne fonctionne pas" était tout à fait opérationnel.
Bien sûr il faut ré-ouvrir le géant pour voir le résultat puisque tu fais tes copies à la fermeture et donc tu n'as pas le temps de le voir. Tu pourras alors constater que les copies ont été faites et que C11 sur les 4 feuilles indique ton heure de fermeture.

ce que je suis entrain de faire n 'est que de l amélioration parce que je cherche a faire un outil parfait
Si je suis la phrase de St-Ex ci-dessous je pense qu'il y a encore pas mal de choses à "retirer"...
0
chrisnapoli
20 juin 2018 à 19:29
de quelle macro parles tu ?si je ne l ai pas mis c'est parceque je ne savais pas ou la mettre sans doute ou alors que je n ai pas compris de celle dont il sagit ( met moi le code pour que je sache précisément de quoi tu me parles...??
quand tu dits que ca marche ?? tu parles des cotations qui sont sur la colonne A12: A131 qui se collent en NS12:AHW131 moi je n ai aucune de ces cotations qui se collent
je ne sais pas de quelle macro dont tu me parles (celle qui recopie les cotations de AS 12::AW51)qui se copient quand le classeur se ferme celle la y est pourtant pour ce classeur tu me dits que c'est un gros classeur je comprends pas l autre qui vient derriere est beaucoup plus gros il ya 8000 colonnes de rempiies
au fait j ai quand même solutionne le problème d avant donc ya pas de raison qu on arrive pas a solutionner celui la
excuse moi parce que je suis oblige de faire 50 choses a la fois et il arrive que je me mélange les pinceaux
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 685
20 juin 2018 à 21:13
<ital> il arrive que je me mélange les pinceaux <ital>

Donc je te laisse finir ta peinture mais il faut qu'elle soit parfaite car tu as des gros concurrents comme Léonard ;-)
0
chrisnapoli
20 juin 2018 à 22:35
ok mais dits moi au moins si mon probleme ne vient pas de la si dans this workbook il fallait peut etre que je mette
dans sheets les 4 feuilles alors que je n avais mis que celle du CAC40

Option Explicit
Private Sub Workbook_Open()
Sheets("CAC40,AEX,BEL20,PSI20").Select
c = 383
Application.OnTime TimeValue("09:01:00"), Procedure:="RecupCotation" '"09:01:00"
'Range("NR12:AHW131").ClearContents
End Sub



Private Sub Workbook_BeforeClose(Cancel As Boolean)
Const ndf = "CAC40,AEX,BEL20,PSI20"
Dim marches, marche
Dim sh As Worksheet
    marches = Split(ndf, ",")
    For Each marche In marches
        Set sh = Sheets(marche)
        sh.Range("D12:H51").Value = sh.Range("AS12:AW51").Value
        sh.Range("C12:C51").ClearContents
        sh.Range("C11") = Now
    Next marche
End Sub


a la place de

Option Explicit
Private Sub Workbook_Open()
Sheets("CAC40").Select
c = 383
Application.OnTime TimeValue("09:01:00"), Procedure:="RecupCotation" '"09:01:00"
'Range("NR12:AHW131").ClearContents
End Sub



Private Sub Workbook_BeforeClose(Cancel As Boolean)
Const ndf = "CAC40,AEX,BEL20,PSI20"
Dim marches, marche
Dim sh As Worksheet
    marches = Split(ndf, ",")
    For Each marche In marches
        Set sh = Sheets(marche)
        sh.Range("D12:H51").Value = sh.Range("AS12:AW51").Value
        sh.Range("C12:C51").ClearContents
        sh.Range("C11") = Now
    Next marche
End Sub
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 685
21 juin 2018 à 08:35
Bonjour,

moi je n ai aucune de ces cotations qui se collent
Il te faudra regarder de plus prêt et l'heure de fermeture n'y est pas non plus alors ? ;-)

dits moi au moins si mon probleme ne vient pas de la
Je ne sais pas de quel problème tu parles mais si c'est pour faire fonctionner le timer sur chaque feuille il faut modifier la procédure "RecupCotation" et non faire ta modification qui ne sert qu'à sélectionner tes 4 feuilles.

Si tu veux poser du code n'importe comment sans savoir le fonctionnement l'on est pas prêt d'avoir un classeur fonctionnel.
0
chrisnapoli
21 juin 2018 à 10:07
Bonjour
moi je pensais que ce que tu m avais donné pour la procédure du timer sur les 4 feuilles étaient bon etant donne que je t avais déjà précisé que le timer avec une seule feuille fonctionnait parfaitement et que c'etait le second qui ne marchait pas
je pensais que du moment que ca marchait sur la première feuille le codes que tu m as envoye faisait que la procédure s’exécutait sur les autres feuilles
je peux pas deviner ,ne connaissant pas le langage
le timer doit évidement marcher sur la même cadence sur les 4 feuilles et quand j aurais l api directement a la place des DDE les cotations inscrites en A12:A51 seront différente mais se colleront dans chaque feuille respective au même emplacement
peut être alors faut il que j'applique au fichier 4 feuilles le même Timer que celui qui est inscrit sur celui de une seule feuille (qui fonctionne très bien) le mettre dans le module 1
et modifié seulement dans workbookopen et inscrire les 4 feuilles comme ceci je

Option Explicit
Private Sub Workbook_Open()
Sheets("CAC40,AEX,BEL20,PSI20").Select
c = 383
Application.OnTime TimeValue("09:01:00"), Procedure:="RecupCotation" '"09:01:00"
'Range("NR12:AHW131").ClearContents
End Sub



Private Sub Workbook_BeforeClose(Cancel As Boolean)
Const ndf = "CAC40,AEX,BEL20,PSI20"
Dim marches, marche
Dim sh As Worksheet
    marches = Split(ndf, ",")
    For Each marche In marches
        Set sh = Sheets(marche)
        sh.Range("D12:H51").Value = sh.Range("AS12:AW51").Value
        sh.Range("C12:C51").ClearContents
        sh.Range("C11") = Now
    Next marche
End Sub

et dans module 1 je mets le Timer tel qu'il était inscrit sur l autre fichier

Public Durée As Date
    Public c

Sub RecupCotation()
    Durée = Now + TimeValue("00:01:00") ' A remplacer par "00:01:00"
    Application.OnTime Durée, "RecupCotation"
    Range(Cells(12, c), Cells(131, c)) = Range("A12:A131").Value
    c = c + 1
    If c >= 908 Then ArretCotation 'N° de la dernière colonne
End Sub


Sub ArretCotation()
    On Error Resume Next
    Application.OnTime Durée, "RecupCotation", , False
End Sub

  Public Durée1 As Date
    Public c As Long
    Public TempsInitial1 As Date
    Public TempsInitial1Num As Double
    Public T1
    Public Tempo1

Sub RecupCotation1()
    If T1 >= 60 Then T1 = 0 '60
    Durée1 = Format(TempsInitial1Num + (T1 * Tempo1), "hh:mm:ss")
    Application.OnTime Durée1, "RecupCotation1"
    Range(Cells(12, c), Cells(131, c)) = Range("A12:A131").Value
Dim l As Long
For l = 12 To 51
    If Cells(l, "C").Value <> "ok" Then
        If Cells(l, "D").Value <> Cells(l, "AS").Value _
            Or Cells(l, "E").Value <> Cells(l, "AT").Value _
            Or Cells(l, "F").Value <> Cells(l, "AU").Value _
            Or Cells(l, "G").Value <> Cells(l, "AV").Value _
            Or Cells(l, "H").Value <> Cells(l, "AW").Value Then
            Cells(l, "C").Value = "ok"
        Else
            Cells(l, c).ClearContents
            Cells(l + 40, c).ClearContents
            Cells(l + 80, c).ClearContents
        End If
    End If
Next l
    Application.Wait Now + TimeValue("00:00:01")
    TempsInitial1Num = TempsInitial1Num + Tempo1
    If c >= 908 Then ArretCotation1 'N° de la dernière colonne des cotations à la minute
    c = c + 1
End Sub
Sub ArretCotation1()
    On Error Resume Next
    Application.OnTime Durée1, "RecupCotation1", , False
End Sub
  











0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 685
21 juin 2018 à 12:00
re
Pour ton classeur 4 feuilles tu mets ce code dans thisworkbook
Option Explicit
Private Sub Workbook_Open()
Sheets("CAC40").Select
c = 383
Application.OnTime TimeValue("09:00:00"), Procedure:="RecupCotation" '"09:01:00"
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim marches, marche
Dim sh As Worksheet
    marches = Split(ndf, ",")
    For Each marche In marches
        With Sheets(marche)
            .Range("D12:H51").Value = .Range("AS12:AW51").Value
            .Range("C12:C51").ClearContents
            .Range("C11") = Now
        End With
    Next marche
    Call ArretCotation
End Sub

et celui-ci dans ton module 1
Option Explicit
Public Durée As Date
Public c As Long
Public Const ndf = "CAC40,AEX,BEL20,PSI20"
Sub RecupCotation()
Dim marches, marche
    marches = Split(ndf, ",")
    For Each marche In marches
        With Sheets(marche)
            .Cells(12, c).Resize(120, 1) = .Range("A12:A131").Value
        End With
    Next marche
    c = c + 1
    If c >= 908 Then
        ArretCotation 'N° de la dernière colonne
    Else
        Durée = Now + TimeValue("00:01:00") ' A remplacer par "00:01:00"
        Application.OnTime Durée, "RecupCotation"
    End If
End Sub
Sub ArretCotation()
On Error Resume Next
Application.OnTime Durée, "RecupCotation", , False
End Sub
0
chrisnapoli
21 juin 2018 à 18:09
re
dits moi ,ce bout de code je le glisse ou?dans le fichier 4 feuilles?
il permet effacer les cellules tant que le prix d'ouverture n 'a pas ete fixé

ub RecupCotation1()
    If T1 >= 60 Then T1 = 0 '60
    Durée1 = Format(TempsInitial1Num + (T1 * Tempo1), "hh:mm:ss")
    Application.OnTime Durée1, "RecupCotation1"
    Range(Cells(12, c), Cells(131, c)) = Range("A12:A131").Value
Dim l As Long
For l = 12 To 51
    If Cells(l, "C").Value <> "ok" Then
        If Cells(l, "D").Value <> Cells(l, "AS").Value _
            Or Cells(l, "E").Value <> Cells(l, "AT").Value _
            Or Cells(l, "F").Value <> Cells(l, "AU").Value _
            Or Cells(l, "G").Value <> Cells(l, "AV").Value _
            Or Cells(l, "H").Value <> Cells(l, "AW").Value Then
            Cells(l, "C").Value = "ok"
        Else
            Cells(l, c).ClearContents
            Cells(l + 40, c).ClearContents
            Cells(l + 80, c).ClearContents
        End If
    End If
Next l
    Application.Wait Now + TimeValue("00:00:01")
    TempsInitial1Num = TempsInitial1Num + Tempo1
    If c >= 908 Then ArretCotation1 'N° de la dernière colonne des cotations à la minute
    c = c + 1
End Sub


0
chrisnapoli
21 juin 2018 à 17:17
Grand Merci cela marche parfaitement maintenant ;je viens d'essayer , tu es un champion....
par contre
j ai un conflit sur le code que tu m 'as réalisé l autre jour
le processus des OK change parfaitement le pas, les plages s'affichent au bon endroit les graphes tournent en temps réel, tout se fait automatiquement mis a part que toutes les secondes le sablier bleu s'enclenche (comme si le fichier s'enregistrait sans interruption)et perturbe le systeme ,ce qui fait que quand je me sert des autres macros pour passer d'un graphe a l autre c'est impossible parce que ca me ramène tout le temps immediatement sur le premier graphe on dirait que quelque chose tourne en boucle??? as tu une idée de la cause????
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 685
22 juin 2018 à 10:09
Bonjour,

as tu une idée de la cause????
Absolument elle est là : le mastodonte de 101,6 Mo - là c'est du classeur !

- ton classeur a 10000 colonnes enregistrées et moins de 1000 utiles
- tu as 9000 lignes enregistrées et 134 utiles
- tu pourrais diminuer la taille de 50% en supprimant l'inutile pour fluidifier
- tu as plus de 1200 requêtes qui s'exécutent et autant de déclenchement de calculs
- tu as des graphes qui sont recalculés
- tout cela dans la minute : le processeur a besoin d'être bien ventilé !

Il est sans doute possible de limiter les calculs à une fois par minute ce qui devrait laisser un peu de répit mais comme tu vas rajouter des requêtes différentes et l'utilisation de tes graphes il y aura d'autre taf.

Je ne connais pas la configuration de ton système mais il a intérêt à être vraiment au top en multi-threads pour supporter ce type de fonctionnement.

ce que je suis entrain de faire n 'est que de l amélioration parce que je cherche a faire un outil parfait
Il me semble qu'il reste pas mal de boulot ;-)
0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
22 juin 2018 à 11:13
je pense qu'il faut chercher ce qui te ramène tout le temps immédiatement sur le premier graphe.
peut-être un Activate, un Select ou un ScrollRow en trop au mauvais endroit, dans un code démarré automatiquement (timer ou _calculate ou _change)?
il me semble qu'un classeur trop chargé et un ordi pas assez puissant ne devraient pas te ramèner tout le temps immédiatement sur le premier graphe.
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 685
22 juin 2018 à 12:02
Bonjour yg_be,

En fait, sur la macro des "ok" il a mis un activate sur A12 donc au moindre calcul il revient nécessairement ! ;-)
0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477 > gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020
Modifié le 22 juin 2018 à 12:37
0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477 > gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020
22 juin 2018 à 12:25
bonjour gbinforme, pourquoi as-tu écrit "cela ne fonctionne pas" en #53? à cause de
Dim marches() As Worksheet
?
0
chrisnapoli
22 juin 2018 à 13:22
Bonjour
Attention de ne pas confondre les problèmes, la procédure des OK sur le fichier 4 feuilles n y est plus parce que je ne sais pas ou la mettre exactement a part ca le classeur marche très très bien j ai un classeur beaucoup plus gros que celui la, qui marche aussi parfaitement
donc il faut répondre a ma question ,
ou mettre et de quelle manirère intégrer la procédure que m avait fait YGBE pour que les cotations s'effacent tant que le cours d'ouverture n 'est pas enregistré sur une valeur (ceci était fait pour le classeur une feuiile maintenant il faut l adapter au classeur 4 feuilles (je ne sais pas comment???)

pour le deuxième problème il n 'est absolument pas lié au gros fichier puisque c'est un autre fichier independant

le problème des oK n 'est pas du tout le même cela concerne le code qui me permet d'afficher plusieurs plages il n 'est pas associe au classeur 4 feuilles 'cela n 'a rien a voir c'est un problème a mon avis de quelque chose qui tourne en boucle dans ton code- sinon le code remplit sa fonction
le seul ennui c'est que sans arrêt le sablier enregistrement semble en marche et cela m empêche de me servir d'une macro qui me fait remonter le deuxième graphe a l 'écran

encore une fois ces 2 fichiers sont complètement différents et même si j ouvre le fichier ou est ce problème sans que l 'autre fonctionne le sablier est toujours présent
par contre si je garde ce fichier en enlevant ton code et en revenant a la source au tout premier graphe que j avais créé(sans avoir de plages a copier )le problème du sablier disparaît je mets le code que tu m'as fait et qui a ce problème de sablier en dessous


Private Sub worksheet_Calculate()
Const cok = "AX101,AX144,AX187,AX230,AX273,BZ101,BZ144,BZ187,BZ230,BZ273,AX316,AX359,AX402,AX445,AX488,BZ316,BZ359,BZ402,BZ445,BZ488"
Const cpo = "CK11:CS51,CK11:CS51,CK11:CS51,CK11:CS51,CK11:CS51,DB11:DJ51,DB11:DJ51,DB11:DJ51,DB11:DJ51,DB11:DJ51,CK57:CS97,CK57:CS97,CK57:CS97,CK57:CS97,CK57:CS97,DB57:DJ97,DB57:DJ97,DB57:DJ97,DB57:DJ97,DB57:DJ97"
Const cpd = "BA101:BI141,BA144:BI184,BA187:BI227,BA230:BI270,BA273:BI313,BO101:BW141,BO144:BW184,BO187:BW227,BO230:BW270,BO273:BW313,BA316:BI356,BA359:BI399,BA402:BI442,BA445:BI485,BA488:BI528,BO316:BW356,BO359:BW399,BO402:BW442,BO445:BW485,BO488:BW528"
Dim elk, elo, eld, idc As Integer
Static avd(20)
    Application.EnableEvents = False
    Application.Calculation = xlCalculationManual
    elk = Split(cok, ","): elo = Split(cpo, ","): eld = Split(cpd, ",")
    For idc = 0 To UBound(elk)
        If LCase(avd(idc)) <> "ok" And LCase(Range(elk(idc)).Value) = "ok" Then
            Range(eld(idc)).Copy
            Range(elo(idc)).Select
            Range(elo(idc)).Parent.Paste link:=True
        End If
        avd(idc) = Range(elk(idc)).Value
    Next idc
    Application.Calculation = xlCalculationSemiautomatic
    Application.EnableEvents = True
    Cells(12, 1).Activate
ActiveWindow.ScrollRow = ActiveCell.Row


    
End Sub

0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
22 juin 2018 à 13:30
attention à ne pas laisser les lignes 21 et 22 dans la sub worksheet_Calculate.
0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
Modifié le 22 juin 2018 à 13:46
les lignes 6 à 21 en #76
doivent être adaptées, puis insérées
après la ligne 10 du module1 en #74

adaptations à faire:
mettre un . devant tous les Cells

de plus, la ligne avec dim devra être mise un peu plus haut dans module1, juste après la ligne dim existante.
0
chrisnapoli
22 juin 2018 à 13:40
tu veux dire que je dois enlever au code ???

ActiveWindow.ScrollRow = ActiveCell.Row

0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477 > chrisnapoli
22 juin 2018 à 13:48
enlever les lignes 21 et 22, comme numérotées en #82.
0
chrisnapoli
22 juin 2018 à 13:49
non je viens de l enlever et le sablier est toujours actif
par contre peux tu me dire ou je doit mettre la procédure des OK(qui effaçait les valeurs tant que le cours d'ouverture n était pas donné) dans le code qu a fait gbinforme pôur le Timer 4 feuilles
0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
22 juin 2018 à 14:58
lis bien le #84.
es-tu encore ramené tout le temps immédiatement sur le premier graphe?
0
chrisnapoli
22 juin 2018 à 14:37
DE quelle manière cela doit être adapté pour aller dans le module 1????
et pour l'autre problème ca ne marche pas j ai enlevé ce que tu m as dits 21 et22 en 82 et j ai toujours le sablier qui marche?????
0
chrisnapoli
22 juin 2018 à 16:47
comme ceci???

basic
Option Explicit
Public Durée As Date
Public c As Long
Dim l As Long
Public Const ndf = "CAC40,AEX,BEL20,PSI20"
Sub RecupCotation()
Dim marches, marche
marches = Split(ndf, ",")
For Each marche In marches
With Sheets(marche)
.Cells(12, c).Resize(120, 1) = .Range("A12:A131").Value
Dim l As Long
For l = 12 To 51
If Cells.l, "C").Value <> "ok" Then
If Cells.(l, "D").Value <> Cells.(l, "AS").Value _
Or Cells.(l, "E").Value <> Cells.(l, "AT").Value _
Or Cells.(l, "F").Value <> Cells.(l, "AU").Value _
Or Cells.(l, "G").Value <> Cells.(l, "AV").Value _
Or Cells.(l, "H").Value <> Cells.(l, "AW").Value Then
Cells.(l, "C").Value = "ok"
Else
Cells.(l, c).ClearContents
Cells.(l + 40, c).ClearContents
Cells.(l + 80, c).ClearContents
End If
End If



></code>
0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
22 juin 2018 à 17:14
es-tu encore ramené tout le temps immédiatement sur le premier graphe?
merci d'utiliser la coloration syntaxique.
0
chrisnapoli > yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024
22 juin 2018 à 18:10
pourquoi me demandes tu ca j ai enleve comme tu m as dits le bout de code et le sablier est toujours en route je n ai pas regarde alors si ca m ramenait sur le premier graphe maintenant la bourse est fermée et je ne peuix plus controler est ce qur tu peux me dire si ma correctionconcernant le fichier 4 feuilles est bonne ou pas
Cells(12, 1).Activate 
ActiveWindow.ScrollRow = ActiveCell.Row 
0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477 > chrisnapoli
Modifié le 22 juin 2018 à 18:34
je te demande cela parce que c'est cela que je tente de corriger.
l'indentation du code (la présence d'espaces au début de certaines lignes) est très importante pour en faciliter la lecture: peux-tu veiller, dans le futur, à la préserver?
0
chrisnapoli > yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024
22 juin 2018 à 18:16
Option Explicit 
Public Durée As Date 
Public c As Long 
Dim l As Long 
Public Const ndf = "CAC40,AEX,BEL20,PSI20" 
Sub RecupCotation() 
Dim marches, marche 
marches = Split(ndf, ",") 
For Each marche In marches 
With Sheets(marche) 
.Cells(12, c).Resize(120, 1) = .Range("A12:A131").Value 
Dim l As Long 
For l = 12 To 51 
If Cells.l, "C").Value <> "ok" Then 
If Cells.(l, "D").Value <> Cells.(l, "AS").Value _ 
Or Cells.(l, "E").Value <> Cells.(l, "AT").Value _ 
Or Cells.(l, "F").Value <> Cells.(l, "AU").Value _ 
Or Cells.(l, "G").Value <> Cells.(l, "AV").Value _ 
Or Cells.(l, "H").Value <> Cells.(l, "AW").Value Then 
Cells.(l, "C").Value = "ok" 
Else 
Cells.(l, c).ClearContents 
Cells.(l + 40, c).ClearContents 
Cells.(l + 80, c).ClearContents 
End If 
End If 


0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477 > chrisnapoli
Modifié le 22 juin 2018 à 18:34
la ligne 4 doit être supprimée, et la ligne 12 déplacée après la ligne 7.
en ligne 14, tu as erronément remplacé une parenthèse par un point: compare avec le #76.
dans les lignes 14 à 24, ajoute un point immédiatement avant chaque mot Cells
0
chrisnapoli
22 juin 2018 à 18:32
ok mais le probleme du sablier qui tourne en permanence c'est quoi qui fait cela ??
c'est bien cela qui empeche le graphe d’exécuter la macro de positionnement sur le graphe du haut
0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
22 juin 2018 à 20:25
si tu changes le nom de la procédure worksheet_Calculate, cela continue-t'il à tourner en permanence?
si non, il faudra sans doute diminuer la fréquence d'exécution, ou la quantité de travail, directe ou indirecte, de cette procédure. relis le #77. ou bien utiliser un ordi plus performant.
0
chrisnapoli
23 juin 2018 à 07:45
si je change le nom de workbook calculate que dois je mettre alors a la place??
je ne comprend pas non plus pourquoi vous dites que c'est mon ordi qui n 'est pas assez puissant quand je fait tourner ce fichier il n y a que lui qui tourne et c'est de loin le plus petit des fichiers il n y a que les graphes et les dde dessus il fait seulement 6.86 mo
tu ne m as pas dit si le code que j ai modifie pour le classeur 4 feuilles étaient correct
0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477 > chrisnapoli
23 juin 2018 à 10:21
si tu changes le nom de la procédure worksheet_Calculate (en zorglub), cela continue-t'il à tourner en permanence?
as-tu lu le #96?
0
chrisnapoli
23 juin 2018 à 11:06
Bonjour
première des remarques je constate encore une fois qu il y a des gens ci qui ne savent même pas de quoi ils parlent

jeff avant d avancer des contre vérités feraient bien de relire les messages
c'est un développeur qui me fait le logiciel en java script
les codes que je fait ici sont pour mon propre fichier et d'ailleurs il me serait impossible de m 'en servir autrement a cause de la législation plus que sévère sur les marches boursiers
ces codes me permettent de faire tourner en temps réel ma logique sur excel pour que le développer comprenne ce que je veux réaliser en aucun cas ils ne sont commercialisé si il avait suivi tant soit peu nos échanges il se serait aperçu que il y a une partie qui est consacre a un timer qui ne peut aller sur le web évidement, et de plus que l ensemble des procédures sont dissociées pour la bonne raison qu au final n'iront sur le web que la partie graphique de plus cette partie est transcrit en java script par mon développer si il n en est pas convaincu c'est alors qu il n a rien compris
mais la jalousie est un vilain Default
a 60 ans passé et au chôme du je suis encore fier de pouvoir essayer de m 'en sortir par mon imagination et ma créativité ,lui en déplaisede toute facon cela glisse sur moi
je n ai pas ce genre de soucis avec toi et gbinforme ,même si des fois on s'envoie des vannes c'est pas bien méchant
revenons en a nos moutons


tu me dits de changer le nom de la procédure

ok je le mets comme çà alors??mais je ne pourrais l essayer que lundi avec le temps réel qui tourne


Private Sub zorglub ()




0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477 > chrisnapoli
23 juin 2018 à 11:17
en effet, cela va permettre de répondre à la question en #97.
0
chrisnapoli
23 juin 2018 à 11:44
en fait je crois que le sablier tourne en permanence tout simplement parceque le code qu a fait gbinforme colle en permanence les plages correllées directement aux OK
alors quil ne devarit coller qu'une seule fois et ne coller à nouveau que si il y a un nouveau changement détecté dans une des 4 cellules
0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
23 juin 2018 à 13:19
je respecte ta croyance, et je ne la partage pas. peux-tu la prouver?
tu peux, pour tester, déclencher le code de la sub _calculate même sans cotations, simplement en ajoutant une formule (par exemple =1) dans une cellule inutilisée de la feuille.
0
chrisnapoli > yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024
23 juin 2018 à 13:37
""en fait je crois que le sablier tourne en permanence tout simplement parceque le code qu a fait gbinforme colle en permanence les plages correllées directement aux OK ""

ce n 'est pas une croyance c'est maintenant une constatation claire
je mets son code le sablier apparait ,j enleve son code le temps réel me donne les cotations le graphe est anime et le sablier n apparait plus(evidement aucune plage n 'est collé; cela reste sur le pas qui avait été enregistré avant la modification
0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477 > chrisnapoli
Modifié le 23 juin 2018 à 13:51
tu as constaté que le code _calculate provoquait le problème du sablier.
et tu crois que c'est parce que ce code colle en permanence. c'est sur ce point que j'ai des doutes.
pour prouver ton point, tu peux, pour tester, déclencher le code de la sub _calculate même sans cotations, simplement en ajoutant une formule (par exemple =1) dans une cellule inutilisée de la feuille.
tu peux aussi mettre un point d'arret sur une des trois lignes suivantes, pour savoir quand le code fait une copie.
Range(eld(idc)).Copy
Range(elo(idc)).Select
Range(elo(idc)).Parent.Paste link:=True 
0
chrisnapoli
23 juin 2018 à 20:27
ok pigé
celui ci marche maintenant parfaitement mis a part que je ne sais pas ou mettre lea procedure des ok qui effacent les cotations qui n ont pas encore leur cours d'ouverture
c'est la question que je te posais l autre jour et je voudrais savoir pourquoi ce fichier st si lourd sinon je la i essaye avec les mêmes liens dde sur les 4 feuilles et ca colle parfaitement tout en même temps dit moi stp comment je fait pour inclure la procédure que tu a vais faits toi même?? pour le reste je pense que l on va y arriver aussi petit a petit
0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
23 juin 2018 à 21:42
la procedure des ok qui effacent les cotations qui n ont pas encore leur cours d'ouverture: n'est ce pas la procédure RecupCotation()? ce n'est pas une nouvelle procédure, pourquoi demandes-tu où la mettre? c'est la procédure qui est exécutée par le timer toutes les minutes.
je pense avoir compris que tu as deux fichiers, un avec les 4 feuilles par marché, et un autre. comment s’appellent ces deux fichiers? j'ai l'impression qu'il y a des choses en double, inutiles, dans les deux fichiers, ce qui m’empêche de bien comprendre.
0
chrisnapoli
23 juin 2018 à 22:04
oui j ai 2 fichiers le premier que tu m avais fait Timer CAC 40 seul et l autre Timer Seul celui qui ne marchait pas a 4 feuilles beinform a modifie le code il marche sauf la procedure des ok qui ny est plus je sais pas de quelle menire lintegrer j ai ca dans le 4 feuilles
dans workbook


<Option Explicit
Private Sub Workbook_Open()
Sheets("CAC40").Select
c = 383
Application.OnTime TimeValue("09:01:00"), Procedure:="RecupCotation" '"09:01:00"
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim marches, marche
Dim sh As Worksheet
marches = Split(ndf, ",")
For Each marche In marches
With Sheets(marche)
.Range("D12:H51").Value = .Range("AS12:AW51").Value
.Range("C12:C51").ClearContents
.Range("C11") = Now
End With
Next marche
Call ArretCotation
End Sub

dans module1


code basic>
module1 Option Explicit
Public Durée As Date
Public c As Long
Public Const ndf = "CAC40,AEX,BEL20,PSI20"
Sub RecupCotation()
Dim marches, marche
marches = Split(ndf, ",")
For Each marche In marches
With Sheets(marche)
.Cells(12, c).Resize(120, 1) = .Range("A12:A131").Value
End With
Next marche
c = c + 1
If c >= 908 Then
ArretCotation 'N° de la dernière colonne
Else
Durée = Now + TimeValue("00:01:00") ' A remplacer par "00:01:00"
Application.OnTime Durée, "RecupCotation"
End If
End Sub
Sub ArretCotation()
On Error Resume Next
Application.OnTime Durée, "RecupCotation", , False
End Sub


</code>

dans module 8



Option Explicit
Dim marches() As String
Sub init_marches()
ReDim marches(3)
    marches(0) = "CAC40"
    marches(1) = "AEX"
    marches(2) = "BEL20"
    marches(3) = "PSI20"
End Sub
Sub copy_dh1()
Dim sh As Worksheet
    Set sh = Sheets(CAC40, AEX, BEL20, PSI20)
     sh.Range("D12:H51").Value = sh.Range("AS12:AW51").Value
    sh.Range("C12:C51").ClearContents
    sh.Range("C11") = Now
End Sub
Sub copy_dh()
Dim marche As Variant
Dim fl As Worksheet
    For Each marche In marches
        Set fl = Sheets(marche)
        Call copy_dhfl(fl)
    Next marche
End Sub
Sub copy_dhfl(sh As Worksheet)
    sh.Range("D12:H51").Value = sh.Range("AS12:AW51").Value
    sh.Range("C12:C51").ClearContents
    sh.Range("C11") = Now
End Sub




0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477 > chrisnapoli
23 juin 2018 à 22:51
où se trouve le code que tu as montré en #93?
merci d'être précis: nom du fichier, nom du module.
0
chrisnapoli
23 juin 2018 à 23:07
il n'y ai pas ce code dans le fichier TIMER SEUL
l ya dans le module 1 ceci
tu as le fichier c'est toi qui ma envoye le lien tout a lheure tu peux voir le code tel quil est écrit entirement

 Option Explicit
Public Durée As Date
Public c As Long
Public Const ndf = "CAC40,AEX,BEL20,PSI20"
Sub RecupCotation()
Dim marches, marche
    marches = Split(ndf, ",")
    For Each marche In marches
        With Sheets(marche)
            .Cells(12, c).Resize(120, 1) = .Range("A12:A131").Value
        End With
    Next marche
    c = c + 1
    If c >= 908 Then
        ArretCotation 'N° de la dernière colonne
    Else
        Durée = Now + TimeValue("00:01:00") ' A remplacer par "00:01:00"
        Application.OnTime Durée, "RecupCotation"
    End If
End Sub
Sub ArretCotation()
On Error Resume Next
Application.OnTime Durée, "RecupCotation", , False
End Sub






0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477 > chrisnapoli
24 juin 2018 à 11:07
suggestion pour module1:
Option Explicit
'Public Durée As Date
Public c As Long
Public Const ndf = "CAC40,AEX,BEL20,PSI20"
Sub recupcotation()
Dim marches, marche, l As Integer, Durée As Date
    marches = Split(ndf, ",")
    For Each marche In marches
        With Sheets(marche)
            .Cells(12, c).Resize(120, 1) = .Range("A12:A131").Value
            For l = 12 To 51
                If .Cells(l, "C").Value <> "ok" Then
                    If .Cells(l, "D").Value <> .Cells(l, "AS").Value _
                            Or .Cells(l, "E").Value <> .Cells(l, "AT").Value _
                            Or .Cells(l, "F").Value <> .Cells(l, "AU").Value _
                            Or .Cells(l, "G").Value <> .Cells(l, "AV").Value _
                            Or .Cells(l, "H").Value <> .Cells(l, "AW").Value _
                        Then
                        .Cells(l, "C").Value = "ok"
                    Else
                        .Cells(l, c).ClearContents
                        .Cells(l + 40, c).ClearContents
                        .Cells(l + 80, c).ClearContents
                    End If
                End If
            Next l
        End With
   Next marche
    c = c + 1
    If c >= 908 Then
        ArretCotation
    Else
        Durée = Now + TimeValue("00:01:00")
        Application.OnTime Durée, "RecupCotation"
    End If
End Sub
Private Sub ArretCotation()
On Error Resume Next
Application.OnTime 0, "RecupCotation", , False
End Sub
0
chrisnapoli
25 juin 2018 à 16:31
re comment sais tu qu il ya 9928 colonnes et 5903 lignes-dans( TIMER SEUL) puisque des colonnes et lignes ont été supprimes
c'est seulement dans le fichier complet ou il y a tout, sur (CAC 40) que ce nombre est présent le FIchier TIMER SEUL est le même mais dégraissé en conséquence je ne comprends pourquoi si les feuilles lignes et colonnes supprimes ne sont plus présentes dans ce fichier elles sont comptabilisées
il ya actuellement sur chaque feuille de TIMER SEUL seulement 907 colonnes sur 131 lignes à chaque feuille et il y a 4 feuilles si ces colonnes et lignes ont été supprimes comment se fait il qu il soit si lourd
est ce parce que c'est une copie de CAC dégraissé???? c'est quand même étonnant parce que lorsque j ai fait les copies j ai enlevé les feuilles qui ne me servaient pas et les codes aussi il faut déjà résoudre cet énigme et après on verra pourquoi y a conflit entre les fichier et les graphes
en ce moment tourne le gros fichier CAC 40 ou il y a tout réuni statistiques graphes en temps réel et Timer)
il marche depuis 10 h ce matin et a part un peu de retard du timer sur l heure il n y a rien a signaler
0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
25 juin 2018 à 18:27
j'ai observé cela dans le fichier que tu as partagé récemment.
0
chrisnapoli > yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024
6 juil. 2018 à 10:15
Bonjour
la premirere partie de mon logiciel est terminée
si tu veux voir le résultat ,tu te mets sur skype tu rentres ag81000 et je te fait voir
tu as il me semble le droit de voir puisque tu m 'as aidé grandement à le réaliser , et je t'en remercie chaleureusement
Bonne journée
0
chrisnapoli
25 juin 2018 à 23:03
ca y est j'ai fait un autre fichier nouveau TIMER SEUL BIS il ne fait plus 100 mo il ne fait que 165 KO avec les 4 feuilles
demain j 'essaye
0
chrisnapoli > chrisnapoli
5 juil. 2018 à 13:57
Bonjour
je reviens vers toi a nouveau
je suis entrain d'essayer de construire un graphe a chandelier j ai besoin que tu me dises de quelle maniere modifier mon TIMER 4 feuilles pour avoir le timer qui collent toutes les segondes'a la place de une minute
mon soucis est que"" toujours pareil tant que le cours d'ouverture n a pas ete donne il faut que le timer efface les cotations chaque valeur independement de l 'autre"""
deuxieme soucis c'est que 3600 secondes *par 8h30 de cotation cela fait 30600 colonnes
plus de colonnes que contient Excel alors va falloir trouver une solution(peut être coller les cotations dans le sens des lignes)???????
0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477 > chrisnapoli
7 juil. 2018 à 14:00
je comprends le soucis avec 30600 colonnes, mais pourquoi est-ce un soucis d'effacer sélectivement tant que le cours d'ouverture n'est pas connu? cela ne fonctionne pas?
copier dans le sens des lignes semble une bonne idée, mais il faudra modifier tout ton classeur et tout son code. c'est du boulot. pour qui?
0
Bonjour
ce nouveau fichier sera indépendant de l autre( le timer 4 feuilles) tournera toujours sur un autre ordinateur
les données que je vais coller ne sont pas les mêmes par ailleurs...

pour le moment j ai fait un serveur localhost] qui me recupere les données sur mon fichier Excel (alimente par les DDE) et qui fait tourner mes graphes sur le web en langage javascript
j attend de voir si c'est efficace et après je prendrais ma décision j aurais bien aimer faire tourner ça dans excel pour voir ce que cela donnait
en fait je pense pas qu il soit tres difficile de faire un autre timer en segonde et mettre les destinations dans le sens des lignes
je n ai aucunement l intention de toucher celui de 4 feuilles dabord parcequ il me sert pour tout autre chose qui est complètement indépendant de cette nouvelle solution et puis aussi parce que ça marche trop bien
je m en sert tous les jours il n ya pas une seconde de retard en fin de journée sur les 4 feuilles
Bonne soirée je vous dirais plus tard
0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
9 juil. 2018 à 00:20
je pense également pas compliqué de faire un nouveau timer qui agit toutes les secondes.
peut-être utile de prévoir quoi faire si le timer prend du retard et ne parvient pas à travaille chaque seconde.
0
Bonjour
pourquoi penses tu que le timer va prendre du retard??(au premier fichier il y avait du retard parce qu il y avait un problème sur mon fichier
désormais il n y a pas une seconde de retard sur la journée (maintenant il est vrai que ça ne colle que chaque minute)

Ce Timer aurait 120 valeurs a copier dans le sens des lignes sur grosso modo 30600 lignes ce qui ferait 3 672 000 chiffres
0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
9 juil. 2018 à 10:43
je ne sais pas si le timer va prendre du retard, je me prépare aux conséquences d'un retard éventuel.
0
Bonjour
je me sert du timer 4 feuilles depuis pas mal de temps tout fonctionne parfaitement

mais petit probleme j ai le timer qui travaille d'un cote seul et quand j ouvre l'autre fichier ou il y a le graphe qui tourne en temps reel ca me provoque des perturbations sur le fichier graphe ,de temps en temps j ai une colonne de liens DDE qui disparaît
je ne sais pas pourquoi le timer et le fichier du graphe sont en conflit des que j arrete le graphe alors mon timer colle a nouveau parfaitement
0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
12 juil. 2018 à 19:54
une colonne qui disparaît, ou bien une colonne dans laquelle le timer n'enregistre pas les cotations? comme si le timer avait sauté une minute?
0
bonsoir
alors une colonne dans le fichier du timer dans lequel il n enregistre pas les cotations et une colonne ou disparaissent les liens dde sur l'autre fichier ou tourne le graphe au même instant
il est impossible de faire tourner correctement ls 2 fichiers en même temps
0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
12 juil. 2018 à 23:16
je pense avoir une idée du fonctionnement du timer. j'imagine qu'il copie les cotations vers une colonne de son propre fichier, en fonction du moment.
j'imagine aussi que les liens dde sont dans dans le fichier du timer.
je ne comprends pas vraiment l'idée de disparition des liens dde dans l'autre fichier.
j'ai besoin de comprendre l'ensemble pour me faire une idée de qui suspecter, de qui corriger. je suppose qu'à un moment donné, tout le monde est trop occupé, et les actions ne se produisent pas dans l'ordre attendu.
0
Bonjour

dhabitude j utilise le timer 4 feuilles qui fonctionnent parfaitement hors depuis 2 jours j utilise le timer une feuille parceque je ne m interresse qu' a un seul marché ;je ne sais pas pourquoi la procédure des OK ne se fait plus
je te mets le fichier tu verras y a deux macros une qui te mènera vers les liens dde et l 'autre vers les heures je pense que ce conflit comme tu dits viens que un fichier est occupé sur une tache (celui du graphe marche en temps reel chaque fois qu une cotation change ; et le timer lui est réglée sur une minute
qu est ce qui fait que les fichiers interagissent l un sur l autre?????

https://www.cjoint.com/c/HGnmkiewmTq
0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477 > chrisnapoli
13 juil. 2018 à 18:02
merci de recommencer ton explication en donnant chaque fois le nom de chaque élément (macro et fichier).
quels sont les liens entre les deux fichiers? (à part le fait qu'ils occupent tous les deux le même Excel, je suppose)
0
bonsoir
le fichier c'est le fichier que j ai envoyé Timer cac40 seul.... les macros sont Allerheures et quand tu es sur la partie ou se collent les heures tuas un autre bouton macro allerdde tu verras les liens dde vont de K12 :O51
l autre fichier c'est c graphe webbis c'est la ou tourne un graphe seul avec les liens DDE chaque fichier independement marche parfaitement mais des quon les mets ensemble ca ne marche plus
0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477 > chrisnapoli
13 juil. 2018 à 21:25
quels sont les liens entre les deux fichiers? (à part le fait qu'ils occupent tous les deux le même Excel, je suppose)
0