Sub RecopiePlage() [Résolu] - VB / VBA

Sub RecopiePlage() Fichier sub » Articles Private sub vba (Résolu) » Forum - VB / VBA Convertir des fichiers de sous-titres (srt, sub, ssa, txt) » Conseils pratiques - Sous-titres VBA - Ecrire/lire une série de TextBox en une seule Sub » Conseils pratiques - Bureautique Polices: anti-aliasing, hinting et sub-pixel rendering » Conseils pratiques - Infographie

Bonjour,
je n ai toujours pas de solutions pour résoudre ce problème je voudrais savoir pourquoi seule la première des conditions marche dans ce code

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])
ElseIf [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])
ElseIf [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])
ElseIf [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
End Sub









Forum

Sub RecopiePlage() Fichier sub » Articles Private sub vba (Résolu) » Forum - VB / VBA Convertir des fichiers de sous-titres (srt, sub, ssa, txt) » Conseils pratiques - Sous-titres VBA - Ecrire/lire une série de TextBox en une seule Sub » Conseils pratiques - Bureautique Polices: anti-aliasing, hinting et sub-pixel rendering » Conseils pratiques - Infographie

Web: www.shapebootstrap.net

56 réponses

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

bonsoir, peut-être en remplacant

ElseIf [BZ101] = "Ok" Then

par
End if If [BZ101] = "Ok" Then

Reply
réponses:
  • auteur

  • auteur

    bonjour
    j ai essaye ce que tu m as dit de faire, de 2 facons mais aucune ne donne de résultats et j ai toujours dans les deux cas la plage CK11:CS51 qui affiche normalement ( il y a bien inscrit égale)les 3 autres continuent a afficher leurs formules je ne sais pas ce qui ne va pas


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

  • yg_be

    la Sub RecopiePlage() est-elle exécutée?
    pour tester, tu cliques sur la line sub, et tu fais F5.
    ou tu y ajoutes un msgbox pour vérifier qu'elle est exécutée.

  • auteur

    j ai fait ce que tu m 'as dit il a fallu que je clique 3 fois sur F5 et les 3 plages qui ne fonctionnaient pas se sont mis correctement je n ai plus que des =donc c'est parfait
    est ce que cette solution va rester telle quelle dans le temps ??
    est ce que tu peux m 'expliquer pourquoi ça ne s’exécutait pas ?? ou bien peut être est ce une procédure a faire obligatoirement??

  • yg_be

    bizarre que tu aies dû faire trois fois F5: que s'est-il passé entre-temps?
    je ne sais pas pourquoi ce code se retrouve dans la procédure RecopiePlage().
    quand souhaites-tu que ce code soit exécuté? peut-être chaque fois que le contenu des cellules où il peut y avoir "ok" change? ou bien via un bouton?

  • auteur

    Avant c’était seulement la première plage a gauche du premier graphe qui fonctionnait en temps réel chaque fois que le OK apparaissait dans une des 5 cellules correspondantes aux plages
    j ai cinq barres de progression différentes (donc 10 plages par graphe,5 de chaque coté), j ai 2 graphes soit au total 20 plages

    sur les 3 autres emplacements tout fonctionnait mais avec le système d'anciennes formules statiques
    Donc a présent je pense que tout devrait marcher automatiquement en temps réel sans mettre de bouton( c'est le but)
    quand j ai appuyé sur F5 c'est dabord le cote droit du premier graphe qui s'est mis en place puis la deuxième fois c'est la partie droite du deuxième graphe et enfin au final la partie gauche du 2 eme graphe

    j ai encore a régler le problème du timer mais je suis entrain de me poser la question si le code n 'est pas étranger au dysfonctionnement et si cela n 'est pas du à un simple problème du logiciel DDE????qui empêcherait que les quatres marchés enregistrent les cotations dans le même temps( puisque j avais déjà constaté qu il était impossible de consulter les marches en même temps et qu'il fallait sortir d'une liste pour aller activer une autre et comme la procédure de départ du timer est égale il faudrait peut être que j 'essaye d'activer le matin un autre marche que le CAC 40 et si cela fonctionne alors je pense qu il faudra que je change de logiciel DDE (certains permettent d'activer autant de liens que l 'on désire dans la même session)
    la, en ce moment je suis occupé à solutionner des choses encore bien plus complexes
    tant que j ai les idées en tete 'j avance même si parfois je trébuche ,l'important c'est d'avoir la bonne idée après on trouve toujours la mise en oeuvre

  • auteur

    Bonjour
    j ai fait les essais , cela ne fonctionne pas en automatique il faut que j actionne la macro pour que les plages s'actualisent en fonction des OK donc il faut ajouter un code qui permette que cela se fasse automatiquement tout seul.....

  • yg_be

    quand souhaites-tu que ce code soit exécuté? peut-être chaque fois que le contenu des cellules où il peut y avoir "ok" change? ou bien via un bouton?

  • auteur

    chaque fois que le contenue des cellules ou il peut y avoir OK change

  • yg_be

    as-tu déjà une procédure "change" pour cette feuille?

  • auteur

    bonjour
    je n 'ai que ce code dans cette feuille

    Option Explicit


    Sub Worksheet_SelectionChange(ByVal target As Range)
    Dim Lig As Byte, Col As Byte
    If Not Application.Intersect(target, Range("CV12:CV51,CX12:CX51,CV58:CV97,CX58:CX97")) Is Nothing Then
    Range("DP2") = target
    End If
    End Sub

  • yg_be

    alors, à ajouter à la fin du module de cette feuille:

    Private Sub Worksheet_Change(ByVal Target As Range) If Not Application.Intersect(Target, Range("AX101,AX144,AX187,AX230,AX273")) Is Nothing Then     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 ElseIf Not Application.Intersect(Target, Range("BZ101,BZ144,BZ187,BZ230,BZ273")) Is Nothing Then     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 ElseIf Not Application.Intersect(Target, Range("AX316,AX359,AX402,AX445,AX488")) Is Nothing Then     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 ElseIf Not Application.Intersect(Target, Range("BZ316,BZ359,BZ402,BZ445,BZ488")) Is Nothing Then     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 End If  End Sub 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 

    si cela fonctionne, tu pourras supprimer le code que tu montres en #2, devenu inutile.

  • auteur

    je l ai mis directement dans la feuille comme ceci
    a la suite de ce qu il y avait alors que le code lui était dans un module faut il le laisser dans la feuille ou mettre ce code seul dans le module en remplacement de l autre????
    Option Explicit


    Sub Worksheet_SelectionChange(ByVal target As Range)
    Dim Lig As Byte, Col As Byte
    If Not Application.Intersect(target, Range("CV12:CV51,CX12:CX51,CV58:CV97,CX58:CX97")) Is Nothing Then
    Range("DP2") = target
    End If
    End Sub
    Private Sub Worksheet_Change(ByVal target As Range)
    If Not Application.Intersect(target, Range("AX101,AX144,AX187,AX230,AX273")) Is Nothing Then
    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
    ElseIf Not Application.Intersect(target, Range("BZ101,BZ144,BZ187,BZ230,BZ273")) Is Nothing Then
    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
    ElseIf Not Application.Intersect(target, Range("AX316,AX359,AX402,AX445,AX488")) Is Nothing Then
    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
    ElseIf Not Application.Intersect(target, Range("BZ316,BZ359,BZ402,BZ445,BZ488")) Is Nothing Then
    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
    End If

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

  • yg_be

    le nouveau code doit aller dans la feuille, et, si cela fonctionne, tu pourras supprimer l'ancien code que tu montres en #2, devenu inutile (ou à garder en souvenir, ou pour si jamais).

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bbonjour
j ai mis le code ainsi dans la feuille le graphe fonctionne en temps réel les OK changent de cellules au bon timing mais le pas des changements ne se répercutent pas sur les 2 graphes ????
peut être faut il linscrire a un autre emplacement????

Option Explicit


Sub Worksheet_SelectionChange(ByVal target As Range)
Dim Lig As Byte, Col As Byte
If Not Application.Intersect(target, Range("CV12:CV51,CX12:CX51,CV58:CV97,CX58:CX97")) Is Nothing Then
Range("DP2") = target
End If
End Sub



Private Sub Worksheet_Change(ByVal target As Range)
If Not Application.Intersect(target, Range("AX101,AX144,AX187,AX230,AX273")) Is Nothing Then
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
ElseIf Not Application.Intersect(target, Range("BZ101,BZ144,BZ187,BZ230,BZ273")) Is Nothing Then
If [BZ101] = "Ok" Then
Call linkrg([DB11:DJ51], [BO101:BW141])
ElseIf [BZ144] = "Ok" Then

etc......

Reply
réponses:
  • yg_be

    qu'est-ce qui fait changer les "ok"?
    cela fonctionne-t-'il si tu changes les "ok" à la main?

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

ce qui fait changer les OK ce sont ces formules ex sur un cote

=SI(BY101>0,0175;"OK";"")
=SI(ET(BY144>0,014;BY144<=0,0175);"OK";"")
=SI(ET(BY187>0,009;BY187<=0,014);"OK";"")
=SI(ET(BY230>0,005;BY230<=0,009);"OK";"")
=SI(ET(BY273>=0;BY273<=0,005);"OK";"")

Chaque BY correspond a un MAX d'une plage

=MAX(BO102:BW141)
=MAX(BO145:BW184)
=MAX(BO188:BW227)
=MAX(BO231:BW270)
=MAX(BO274:BW313) ce qui correspond pour ce cote a 5 barres de progressions comme ceci

0,25% 0,50% 0,75% 1,00% 1,25% 1,50% 1,75% 2,00% >2,00%

0,20% 0,40% 0,60% -0,80% 1,00% 1,20% 1,40% 1,60% >1,60%

0,15% 0,30% 0,45% 0,60% 0,75% 0,90% 1,05% 1,20% >1,20%

0,10% 0,20% 0,30% 0,40% 0,50% 0,60% 0,70% 0,80% >0,80%

0,05% 0,10% 0,15% 0,20% 0,25% 0,30% 0,35% 0,40% >0,40%

le OK change chaque fois que une des cotations dépassent la condition inscrite dans les cellules BY(pour ce cote dans notre exemple)
il y a deux graphes chaque graphe a un cote positif et un cote négatif il y a au total 20 plages qui permettent de rendre les 2 graphes visiblent a l ecran beaucoup plus animés
puisque selon le max il passe de un pas de 0.05% au minimum a la plus grande progression qui est de 0.25% en 0.25% les formules dans les plages sont de ce type
exemple pour la plus petite progression de 0.05en 0.05

0,05% 0,10% 0,15% 0,20% 0,25% 0,30% 0,35% 0,40% >0,40%


=SIERREUR(SI(ET(BC12>=0;BC12<=0,0005);BC12;"");"")
=SIERREUR(SI(ET(BC12>0,0005;BC12<=0,001);BC12;"");"")
=SIERREUR(SI(ET(BC12>0,001;BC12<=0,0015);BC12;"");"")
=SIERREUR(SI(ET(BC12>0,0015;BC12<=0,002);BC12;"");"")
=SIERREUR(SI(ET(BC12>0,002;BC12<=0,0025);BC12;"");"")
=SIERREUR(SI(ET(BC12>0,0025;BC12<=0,003);BC12;"");"")
=SIERREUR(SI(ET(BC12>0,003;BC12<=0,0035);BC12;"");"")
=SIERREUR(SI(ET(BC12>0,0035;BC12<=0,004);BC12;"");"")
=SIERREUR(SI(BC12>0,004;BC12;"");"")
il ya 360 formules de ce type par plage puisque cela correspond aux 40 valeurs du Cac40 soit 360*5*4=7200

Reply
réponses:
  • yg_be

    si tout cela change quand les cotations changent, je pense qu'il vaut mieux retourner à la solution en #2, et faire

    call RecopiePlage()
    juste après avoir recopié les cotations.

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

j ai mis le code comme ceci dans la feuille a la suite du premier code quand je mets les deux parenthèses après call RecopiePlage elles s'effacent d'elles même j ai aussi le message suivant qui apparaît quand j essaye d'activer le graphe
seuls les commentaires peuvent apparaître après end sub end function ou end property
je ne sais pas si c'est pas mieux de trouver pourquoi ne marche pas le code d'avant parceque la procédure égale est parfaitement respectée, le graphe tourne en temps reel c'est seulement au changement des OK que quelque chose cloche moi je crois que c'est dans l écriture du code parce que le début du code ressemble étrangement a celui qui le précède ;hors celui qui le précède ne fonctionne que si il y a action sur les cellules et dans notre cas on a pas d'action sur les cellules c'est elles qui changent elles même

Private Sub Worksheet_Change(ByVal target As Range)
If Not Application.Intersect(target, Range("AX101,AX144,AX187,AX230,AX273")) Is Nothing Then
et
Sub Worksheet_SelectionChange(ByVal target As Range)
Dim Lig As Byte, Col As Byte
If Not Application.Intersect(target, Range("CV12:CV51,CX12:CX51,CV58:CV97,CX58:CX97")) Is Nothing Then
Range("DP2") = target le code de #2 je l ai inscrit ainsi

Option Explicit
Sub Worksheet_SelectionChange(ByVal target As Range)
Dim Lig As Byte, Col As Byte
If Not Application.Intersect(target, Range("CV12:CV51,CX12:CX51,CV58:CV97,CX58:CX97")) Is Nothing Then
Range("DP2") = target
End If
End Sub
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])
Call RecopiePlage
End If
End Sub

Reply
réponses:
  • auteur

  • yg_be

    ma suggestion:
    si tout cela change quand les cotations changent, je pense qu'il vaut mieux retourner à la solution en #2, et faire call RecopiePlage() juste après avoir recopié les cotations (donc, sans doute, dans le timer).

    c'est quoi "le code d'avant" que tu souhaites plutôt faire marcher?

  • auteur

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

  • yg_be

    je pense qu'il faut ajouter

    call recopieplage()
    dans le timer.

  • auteur

    en fait étant donne que cela marche parfaitement avec le Bouton ,n 'est il pas possible d’écrire
    si une seule des cellules (BZ101;BZ144;BZ187;BZ230;BZ273;BZ316;BZ359;BZ402;BZ445;BZ448;AX101;AX144,AX187;AX230;AX273;AX316;AX359;AX402;AX445;AX448 contenant les OK changent ;alors actionner la macro RecopiePlage

  • yg_be

    je pense que non, car ces cellules ne changent pas, leur contenus étant des formules. c'est ce qu'on avait fait en #15, mais Worksheet_Change ne fonctionnait pas, car les cellules ne changeaient pas.

  • auteur

    moi je pense quil faut ecrire un code disant chaque fois qu une des 10 cellules de la plage () passe de OK a ("");OU chaque fois qu'une des 10 cellules de la plagle () , passe de OK a ("") ,alors exécuter la macro recopiePlage

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

je viens de mettre le code dans un module a part et la macro s'actionne parfaitement-mais par bouton j ai enlevé call recopieplage() donc c'est qu on est pas du tout loin de la vérité maintenant il faut trouver un moyen que le changement de OK se fasse seul
de plus lorsque j ai essaye il y avait un résultat qui correspondait parfaitement a la réalité 2 plages étaient complètement différente d'un cote et de l autre mais ça reflétait exactement l équivalent de ce que donnait les OK

Reply
réponses:
  • yg_be

    je pense qu'il faut ajouter

    call recopieplage()
    dans le timer.

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

cela ne servirait a rien puisque le timer est a part de la partie graphique je l ai désolidarise puisque il m empêche de pouvoir travailler sur le fichier
de plus ces deux graphiques ou je veux faire changer le pas de progression me servent uniquement pour modèle afin que le develloper qui me transcrit ma logique sur le web en java script comprenne exactement ce que je fait

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonjour
toujours pas de solution ?? le graphe a tourne toute la journée la macro marche mais il faut l actionner ne pourrait on pas ecrire un code qui dise que lorsque un OK est dans une des 20 cellules ; alors copier en mode valeur ce OK sur la cellule directement a droite pour le cote positif et directement a gauche pour le cote negatif puis un autre code qui dit des que le contenue d 'une des 20 cellules ou est inscrit OK est egal a ("") ; actionner la macro recopie plage autant de fois qu il y a de changements ..???

les OK actuels du cote positifs sont en BY101; BY144;BY187;BY230;BY273;BY316.BY359;BY402;BY445,

les OK actuels du cote négatif en AX101; AX144;AX187;AX230;AX273;AX316.AX359;AX402;AX445

Reply
réponses:
  • yg_be

    on pourrait sans doute écrire un code qui fait ce que tu décris (je n'ai pas tout compris), MAIS le soucis, c'est de déclencher l’exécution de ce code.
    c'est pour cela que je pense au timer, qui, j'imagine, vient modifier les valeurs des cellules de départ. j'imagine mal? qu'est-ce qui provoque un changement dans les valeurs retournées par les formules?

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

le timer est étranger complètement a cette procédure puisque on ne s'en sert pas pour ces 2 graphes

il faut dabord comprendre le systeme
a la base ce sont 2 graphiques a barres de progression identique mise a part que un donne les cotations par rapport au début de la séance et l autre par rapport a la veille
au depart j ai choisi par facilite de faire les barres avec un pas de 0.25 en 0.25 c'est a dire que la barre demarre a zero et s'arrete a 2.00% comme ceci
>-2,00% -2,00% -1,75% -1,50% -1,25% -1,00% -0,75% -0,50% -0,25% pour le negatif et
0,25% 0,50% 0,75% 1,00% 1,25% 1,50% 1,75% 2,00% >2,00%pour le positif
j ai par la suite décidé pour que les graphes soient plus animes d"ajouter 5 pas cela démarre en 0.05 puis en 0.10 puis en 0.15 puis en 0.20 et au final j arrive a l ancien graphe 0.25 pour que ce systeme fonctionne j ai créé les plages correspondantes a ces graphes chaque plage a les formules adaptes pour son pas pour que le systeme s actionne j ai sélectionné chaque plage pour avoir le Max qui est évidement le même dans chaque plage c'est le critère qui est inscrit dans la cellule ou viennent se mettre les OK qui font que les plages changent
exemple si je suis dans la plus petite plage qui part de 0 a 0.40%
je dit si le max de cette plage est supérieur ou égal a 0 et inférieur ou égal a 0.50 alors mettez moi OK dans la cellule
pour la deuxième barre je mets comme critère si le max est supérieur a 0.5% et inférieur ou égal a 0.9% alors mettez moi OK dans la cellule
pour la troisiem barre je mets comme critere si le max est supérieur a 0.9% et inferieur ou egal a 1.4% alors mettez moi OK dans la cellule
pour la quatrième barre je mets comme critère si le max est supérieur a1.4% et inférieur ou égal a 1.75% alors mettez moi OK dans la cellule
pour la cinquième barre( la derniere) je mets comme critère si le max est supérieur a 1.75% alors mettez moi OK dans la cellule
pour le négatif c'est la même chose en inversant les signes
Donc c'est bien les OK qui sont chargé de régler les plages a mesure que le max augmente ou diminue
on peut parfois avoir un pas différent sur les 4 plages des 2 graphes selon les cours qui s'affichent ou doivent apparaître sur les 2 graphes principaux i
pour moi du moment que la macro provoque le changement manuellement(si un Ok a change evidement) je pense qu i est tout a fait possible de faire un code

j ai pense a dupliquer les cellules OK en mode valeur a cote pour qu il n y ai aucune formule dans la cellule vu ce que tu m 'as dit hier
je pense que le code peut distinguer une cellule OK et une cellule ou il n y a rien dedans (maintenant je ne sais pas comment s'ecrit en code la détection de changement dans une cellule????

en fait il ne faudrait plus faire référence aux plages simplement dire """chaque fois qu une des cellules passent d' OK a ("") alors actionner la macro recopieplage je ne vois pas d'autres moyens que celui ci cela fait une action pour copier en mode valeur les cellules contenant les OK et un autre code qui actionne ces cellules en mode valeur des que l une d'entre elles change

Reply
réponses:
  • auteur

  • yg_be

    qu'est-ce qui provoque un changement dans les valeurs retournées par les formules?

  • auteur

    ce sont les liens DDE qui transmettent les cours en temps reel

  • yg_be

    ce qui confirme l'idée qu'il faut appeler

    call recopieplage()
    dans le code du timer, qui, j'imagine, recopie les données obtenues pas DDE.

  • auteur

    non le timer copie les cotations toutes les minutes il sert seulement pour alimenter mes données statistiques
    les graphes sont alimentes directement par les dde en instantanée

  • yg_be

    alors on pourrait tenter de faire Worksheet_Change dans l'onglet contenant les données fournies par le dde.

  • auteur

    comment ??i parceque la cotation qui provoque le changement dans les 2 graphes est la =différence d'une operation mathematique entre la valeur de deux liens DDE(dern/ouvert)

    ouverture % dern/ouv dernier exemple pour la premiere =(BD12-BB12)/BB12
    47,110 1,040% 47,600
    106,450 1,362% 107,900
    98,020 1,398% 99,390
    27,690 1,029% 27,975
    116,600 1,286% 118,100
    21,595 1,088% 21,830
    54,190 -0,554% 53,890
    39,820 -0,075% 39,790
    113,000 1,903% 115,150
    15,375 0,260% 15,415
    11,905 1,260% 12,055
    65,640 0,457% 65,940
    13,625 -0,477% 13,560
    117,500 -0,128% 117,350
    492,700 -0,183% 491,800
    44,350 0,383% 44,520
    63,680 1,351% 64,540
    207,100 -0,145% 206,800
    300,550 0,449% 301,900
    111,500 0,493% 112,050
    14,840 -0,337% 14,790
    144,400 -1,177% 142,700
    20,140 -0,050% 20,130
    59,900 0,000% 59,900
    83,340 0,348% 83,630
    103,150 0,533% 103,700
    43,165 0,846% 43,530
    66,070 0,484% 66,390
    74,500 1,987% 75,980
    37,450 0,214% 37,530
    83,260 -0,312% 83,000
    115,600 0,260% 115,900
    20,300 0,296% 20,360
    26,870 2,568% 27,560
    52,260 0,899% 52,730
    192,550 -1,506% 189,650
    54,760 0,730% 55,160
    19,555 -0,716% 19,415
    84,360 0,735% 84,980
    21,620 0,463% 21,720

    % ouv/clot ouverture % dern/CLV
    0,641% 47,110 1,688%
    0,996% 106,450 2,372%
    0,730% 98,020 2,137%
    -0,036% 27,690 0,993%
    0,344% 116,600 1,635%
    1,266% 21,595 2,368%
    2,130% 54,190 1,564%
    0,708% 39,820 0,632%
    0,311% 113,000 2,219%
    -0,324% 15,375 -0,065%
    1,405% 11,905 2,683%
    0,382% 65,640 0,841%
    0,665% 13,625 0,185%
    0,513% 117,500 0,385%
    0,613% 492,700 0,429%
    0,499% 44,350 0,884%
    0,632% 63,680 1,991%
    0,730% 207,100 0,584%
    1,178% 300,550 1,633%
    0,723% 111,500 1,220%
    0,781% 14,840 0,441%
    0,487% 144,400 -0,696%
    0,978% 20,140 0,928%
    0,605% 59,900 0,605%
    0,859% 83,340 1,210%
    0,979% 103,150 1,517%
    0,676% 43,165 1,528%
    0,670% 66,070 1,158%
    0,976% 74,500 2,982%
    1,614% 37,450 1,832%
    0,289% 83,260 -0,024%
    0,522% 115,600 0,783%
    -0,295% 20,300 0,000%
    -0,408% 26,870 2,150%
    0,403% 52,260 1,306%
    0,000% 192,550 -1,506%
    0,810% 54,760 1,546%
    0,695% 19,555 -0,026%
    0,764% 84,360 1,505%
    0,465% 21,620 0,929%

  • yg_be

    à quelle fréquence veux-tu réagir aux changements de ok? pourquoi pas via un timer?

  • auteur

    bonjour
    non je ne veux pas avec un timer parceque le timer ja deja vu qu il creait des perturbations et des retards en fin de journée de plus un timer va m empecher de travailler sur le fichier
    si il n ya pas de solutions pour résoudre mon problème j ai vu sur le forum qu une personne avait un soucis avoisinant et le gars lui a fait un code de copier coller et balaie ,sous condition les formules de ses plages vers d'autres plages , ce n 'est pas exactement ce que je voulais parceque moi je suis persuadé qu il doit existe un moyen d'activer cette macro des le changement dans une des cellules

  • yg_be

    on a essayé d'activer le code quand les cellules "ok" changeaient, mais cela n'a pas déclenché parce que les cellules ne changent pas, c'est juste le résultat de la fonction qui change. penses-tu à d'autres cellules qui changent réellement?
    ou bien via Worksheet_Calculate(), à investiguer.

  • yg_be

    je voulais écrire "le résultat de la formule"

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

oui je comprends bien ce que tu veux me dire
alors si au lieu de mettre dans le code la condition OK,on mettait les criteres du MAX des plages qui sont inscrit dans d autres cellules
(puisque eux ils changent )
lorsqu' ils atteindront le critère inscrit dans la formule alors peur être que le changement se fera automatiquement
on dirait pour les plages

BO101:BW141;BO144:BW184;BO187:BW227;BO230:BW270;BO273:BW313

condition1
SI(BY101>0,0175)
condition 2
SI(ET(BY144>0,014;BY144<=0,0175)
Condition3
SI(ET(BY187>0,009;BY187<=0,014)
Condition4
SI(ET(BY230>0,005;BY230<=0,009)
Condition5
SI(ET(BY273>=0;BY273<=0,005)

etc pour les autres plages...

. de quelle maniére inscrire ces formules a la place des OK????

Reply
réponses:
  • yg_be

    le soucis, c'est de déclencher le code, donc pas utile de modifier le contenu du code.
    pour le déclencher, on peut utiliser
    soit un timer,
    soit Worksheet_Change, si on trouve des cellules qui changent vraiment (qui déclenchent Worksheet_Change)
    soit (je vais regarder si cela a du sens) via Worksheet_Calculate()

  • yg_be

    à première vue, Worksheet_Calculate() me semble une bonne option, cela déclenche quand une fonction de la feuille est réévaluée (peut-être trop souvent, on verra).
    pour tester, ajouter dans la feuille:

    Private Sub Worksheet_Calculate() call RecopiePlage()  End Sub

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

est ce que tu peux me corriger mon code je ne sais pas de quelle façon cela s’écrit?????? (elles se mettent en rouge, je ne dois pas respecterle mode d'ecriture sans doute...)
après j essayerais
les cellules prises en compte ,cette fois ne sont pas inertes elles correspondent au max de chaque plage donné en temps réel

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 [AY101] <-0,0175" Then
Call linkrg([CK11:CS51], [BA101:BI141])
ElseIf [AY144] <-0,014 ; [AY144] >=-0,0175 Then
Call linkrg([CK11:CS51], [BA144:BI184])
ElseIf [AY187] <-0,009 ; [AY187]>=-0,014 Then
Call linkrg([CK11:CS51], [BA187:BI227])
ElseIf [AY230] <-0,005 ; [AY230] >=-0,009Then
Call linkrg([CK11:CS51], [BA230:BI270])
ElseIf [AY273] <0 ; [AY273] >)-0,005 Then
Call linkrg([CK11:CS51], [BA273:BI313])
End If
If [BY101] >0,0175 Then
Call linkrg([DB11:DJ51], [BO101:BW141])
ElseIf [BY144] >0,014 ; [BY144] <=0,0175 Then
Call linkrg([DB11:DJ51], [BO144:BW184])
ElseIf [BY187] >0,009 ;[BY187]<=0,014 Then
Call linkrg([DB11:DJ51], [BO187:BW227])
ElseIf [BY230] >0,005 ; [BY230]<=0,009Then
Call linkrg([DB11:DJ51], [BO230:BW270])
ElseIf [BY273] >= 0 ; [BY273] <=0,005Then
Call linkrg([DB11:DJ51], [BO273:BW313])
End If
If [AY316] <=0,0175 Then
Call linkrg([CK57:CS97], [BA316:BI356])
ElseIf [AY359] <-0,014 ; [AY359] >=-0,0175 Then
Call linkrg([CK57:CS97], [BA359:BI399])
ElseIf [AY402] <-0,009 ; [AY402] >=-0,014Then
Call linkrg([CK57:CS97], [BA402:BI442])
ElseIf [AY445] <=0,005 ; [AY445] >=-0,009 Then
Call linkrg([CK57:CS97], [BA445:BI485])
ElseIf [AY488] <0 ; [AY488] >=-0,005 Then
Call linkrg([CK57:CS97], [BA488:BI528])
End If
If [BY316] > 0,0175 Then
Call linkrg([DB57:DJ97], [BO316:BW356])
ElseIf [BY359] >0,014 ; [BY359] <=0,0175 Then
Call linkrg([DB57:DJ97], [BO359:BW399])
ElseIf [BY402] >0,009 ;[BY402] <=0,014 Then
Call linkrg([DB57:DJ97], [BO402:BW442])
ElseIf [BY445] >0,005 ; [BY445] <=0,009 Then
Call linkrg([DB57:DJ97], [BO445:BW485])
ElseIf [BY488] >=0 ; [BY488] ;<=0,005 Then
Call linkrg([DB57:DJ97], [BO488:BW528])
End If
Cells(12, 1).Activate
ActiveWindow.ScrollRow = ActiveCell.Row
End Sub

Reply
réponses:
  • yg_be

    en VBA, toujours des points décimaux, je pense

    [AY101] <-0.0175


    au lieu de:
    [AY488] <0 ; [AY488] >=-0,005
    probablement
    [AY488] <0 and [AY488] >=-0.005

  • auteur

    bon je vais essayer
    que veux tu dire par je voulais ecrire le resultat de la formule?? parceque le resultat est constemment en mouvement....

  • yg_be

    je voulais corriger mon texte précédent:
    on a essayé d'activer le code quand les cellules "ok" changeaient, en utilisant Worksheet_Change, mais cela n'a pas déclenché parce que les cellules ne changent pas, c'est juste le résultat de la formule qui change.

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

il y en a un qui m a dit de mettre ca dans la feuille
Private Sub Worksheet_Calculate()
Call RecopiePlage
End Sub et de garder le code recopieplage dans le module

j ai essaye ca marche mais le probleme est que ca tourne en boucle et ca copie sans interruption
alors quil faudrait que ca copie des que un ok a change de cellule et que la copie ne se fasse que une fois
ainsi le pas reste le meme tant que le Ok n a pas change a nouveau de cellule

Reply
réponses:
  • yg_be

    RecopiePlage() est toujours comme en #22?
    je pense qu'on peut l'améliorer pour ne faire la copie que quand un "ok" change.

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

oui je mets le code que je veux
ca donne le même résultat avec l'ancien et le nouveau c'est exactement pareil je suis oblige d actionner la macro manuellement avec le bouton
si tu dits qu on peut l améliorer c'est daccord mais il faut qu il copie des qu'un des 4 Ok change et qu'il copie une seule fois tant que aucun autre changement n 'est détectée parceque sinon ca va faire comme je t ai dit tourner sans arrêt en boucle et c'est pas bon

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

pour gagner un peu de temps, nouvelle sub linkrg:

Private Sub linkrg(Target As Range, source As Range) Application.ScreenUpdating = False source.Copy Target.Parent.Activate Target.Select Target.Parent.Paste Link:=True Target.PasteSpecial (xlPasteFormats) Application.CutCopyMode = False Application.ScreenUpdating = True End Sub 

je propose ceci pour éviter de recopier tout le temps tout, ceci ne devrait plus recopier la première série que quand un "ok" y change. si c'est bon, j'adapte pour les trois séries suivantes:
Sub RecopiePlage() Static ax1 As Integer  If [AX101] = "Ok" Then     If ax1 <> 101 Then         Call linkrg([CK11:CS51], [BA101:BI141])         ax1 = 101     End If ElseIf [AX144] = "Ok" Then     If ax1 <> 144 Then         Call linkrg([CK11:CS51], [BA144:BI184])         ax1 = 144     End If ElseIf [AX187] = "Ok" Then     If ax1 <> 187 Then         Call linkrg([CK11:CS51], [BA187:BI227])         ax1 = 187     End If ElseIf [AX230] = "Ok" Then     If ax1 <> 230 Then         Call linkrg([CK11:CS51], [BA230:BI270])         ax1 = 230     End If ElseIf [AX273] = "Ok" Then     If ax1 <> 273 Then         Call linkrg([CK11:CS51], [BA273:BI313])         ax1 = 273     End If 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 End Sub

Reply
réponses:
  • auteur

    Bonjour
    j ai fait les essais ce matin rien ne se passe c'est desesperant

  • yg_be

    peux-tu utiliser plutôt les deux nouveaux sujets de discussion que tu viens de créer?

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

j ai mis le code comme ceci dans le module matin je verrais si ca marche demain matin

Private Sub linkrg(Target As Range, source As Range)
Application.ScreenUpdating = False
source.Copy
Target.Parent.Activate
Target.Select
Target.Parent.Paste Link:=True
Target.PasteSpecial (xlPasteFormats)
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub
Sub RecopiePlage()
Static ax1 As Integer

If [AX101] = "Ok" Then
If ax1 <> 101 Then
Call linkrg([CK11:CS51], [BA101:BI141])
ax1 = 101
End If
ElseIf [AX144] = "Ok" Then
If ax1 <> 144 Then
Call linkrg([CK11:CS51], [BA144:BI184])
ax1 = 144
End If
ElseIf [AX187] = "Ok" Then
If ax1 <> 187 Then
Call linkrg([CK11:CS51], [BA187:BI227])
ax1 = 187
End If
ElseIf [AX230] = "Ok" Then
If ax1 <> 230 Then
Call linkrg([CK11:CS51], [BA230:BI270])
ax1 = 230
End If
ElseIf [AX273] = "Ok" Then
If ax1 <> 273 Then
Call linkrg([CK11:CS51], [BA273:BI313])
ax1 = 273
End If
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:BW402])
ElseIf [BZ402] = "Ok" Then
Call linkrg([DB57:DJ97], [BO402:BW445])
ElseIf [BZ445] = "Ok" Then
Call linkrg([DB57:DJ97], [BO445:BW488])
ElseIf [BZ488] = "Ok" Then
Call linkrg([DB57:DJ97], [BO488:BW528])
End If
End Sub

Reply
réponses:
  • yg_be

    peux-tu utiliser plutôt les deux nouveaux sujets de discussion que tu viens de créer?

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed