IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[VBA-E] comment realiser une macro "passive"


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2002
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 4
    Par défaut [VBA-E] comment realiser une macro "passive"
    Bonjour a tous,

    j ai un probleme avec une macro que j ai realisée. Cette macro s'execute toutes les 5 min et lorsque elle s'execute elle active directement le classeur dans lequel elle vit m empechant de travailler sous excel.. j ai essayer l insyruction Application.ScreenUpdating = False mais ça ne marche pas

    pourriez vous m aider svp

    merci

  2. #2
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    Il y a sans aucun doute un paradoxe entre vouloir et ne pas vouloir !
    Voilà une stratégie pour le moins curieuse : je veux qu'une macro s'exécute mais je ne veux pas qu'elle s'exécute !
    (A moins que tu ne veuilles dire : "qu'elle travaille en arrière plan" et pas "qu'elle soit passive")....
    Explique toi clairement, s'il te plait. La précision est la première des conditions à réunir en matière de développement !

  3. #3
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Pour modifier une valeur de cellule tu n'est pas obligé d'activer la feuille concernée... , montre nous ton code de copie...

  4. #4
    Futur Membre du Club
    Inscrit en
    Mars 2002
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 4
    Par défaut
    voila mon code (ce que je veux en fait pour preciser c est que la feuille s'update toutes les 5 min sans pour cela activer la feuille a chaque fois):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Dim Lheure As Double
    Dim Interval As Integer
     
    Sub LancerTimer(NbS As Integer)
    'L'application ExecutionTimer se lancera toutes les 0 heure, 0 minute et Interval seconde
       Interval = NbS
       Application.OnTime Now + TimeSerial(0, 0, Interval), "ExecutionTimer"
    End Sub
     
    Sub ArretTimer()
       On Error Resume Next
       Application.OnTime Lheure, "ExecutionTimer", , False
    End Sub
     
     
    Sub ExecutionTimer()
    'code à exécuter à la fin de chaque Interval secondes
    i
    i
    i
    i
    i
    For j = 1 To nbre_titre
        For i = 1 To duree
            Worksheets("VL").Cells(duree - i + 1 + 20, 1 + j) = Worksheets("VL").Cells(duree - i + 20, j + 1)
        Next i
    Next j
    i
    i
    i
    end sub
     
    Sub indicateur()
    LancerTimer (Worksheets("VL").Cells(2, 2) * 60)
    End Sub

  5. #5
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    c'est quoi les i : ?
    - qu'elle est la valeur des variables nbre_titre et de duree

    - rajoute un DoEvents dans la boucle For J.. afin de laisser la main au systéme..

    - J'ai pas vu ou tu rappelle ton timer aprés la 1° exécution ?

  6. #6
    Futur Membre du Club
    Inscrit en
    Mars 2002
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 4
    Par défaut
    _ les i sont juste pour dire que je n ai pas ecrit tous le code
    _ nbre_titre et duree sont des double non fixes dependant des parametres
    _ je rajoute
    Lheure = Now + TimeSerial(0, 0, Interval)
    Application.OnTime Lheure, "ExecutionTimer"
    avant le end sub

    merci

  7. #7
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par Marc
    _ les i sont juste pour dire que je n ai pas ecrit tous le code
    ....

    merci
    ben dans le code que tu nous montre tu ne change pas de feuille ni de classeur ... alors c'est peu-être dans le i ... ? Activate ? select...

  8. #8
    Futur Membre du Club
    Inscrit en
    Mars 2002
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 4
    Par défaut
    voila mon code complet

    je n arrive pas a faire travailler la macro en arriere plan


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    Dim Lheure As Double
    Dim Interval As Integer
     
    Sub LancerTimer(NbS As Integer)
     
    'L'application ExecutionTimer se lancera toutes les 0 heure, 0 minute et Interval seconde
       Interval = NbS
       Application.OnTime Now + TimeSerial(0, 0, Interval), "ExecutionTimer"
    End Sub
     
    Sub ArretTimer()
       On Error Resume Next
       Application.OnTime Lheure, "ExecutionTimer", , False
    End Sub
     
    Sub ExecutionTimer()
    'code à exécuter à la fin de chaque Interval secondes
     
    Dim duree As Double
    Dim nbre_titre As Double
    Dim nom_titre() As String
    Dim matVL() As Double
    Dim pas As Double
    Dim gain() As Double
    Dim MGH() As Double
    Dim MGB() As Double
    Dim h() As Double
    Dim b() As Double
    Dim RSI() As Double
    Dim temps As Double
    Dim MaxVL() As Double
    Dim MinVL() As Double
    Dim Stochastique() As Double
    Dim MMA() As Double
    Dim MME12() As Double
    Dim MME26() As Double
    Dim MACD() As Double
    Dim Bolsup() As Double
    Dim Bolinf() As Double
    Dim bol() As Double
    Dim ROC() As Double
     
     
     
    iWs = ActiveSheet.Index
     
     
    'stockage de la duree et du pas et du nombre de titre
    ThisWorkbook.Activate
    Sheets("VL").Select
    Cells(19, 2).Select
    nbre_titre = Range(Selection, Selection.End(xlToRight)).Count
    pas = Worksheets("VL").Cells(2, 2)
    duree = Worksheets("VL").Cells(3, 2)
     
    'on stock les nom des titres
    ReDim nom_titre(nbre_titre) As String
    For j = 1 To nbre_titre
        nom_titre(j) = Worksheets("VL").Cells(19, 1 + j)
    Next j
     
    'on affiche le temps
    temps = pas
    For i = 1 To duree
        Worksheets("VL").Cells(20 + i, 1) = temps * 60
        temps = temps + pas * 60
    Next i
    'on decale de une ligne les VL
    For j = 1 To nbre_titre
        For i = 1 To duree
            Worksheets("VL").Cells(duree - i + 1 + 20, 1 + j) = Worksheets("VL").Cells(duree - i + 20, j + 1)
        Next i
    Next j
    'stockage des VL
    ReDim matVL(duree, nbre_titre) As Double
    For j = 1 To nbre_titre
        For i = 1 To duree
            matVL(i, j) = Worksheets("VL").Cells(21 + i, 1 + j)
        Next i
    Next j
     
    'calcul des differents parametres
    '
    '
     
    'on affiche
    For j = 1 To nbre_titre
        Worksheets("Resultat").Cells(6, 1) = "Titre"
        Worksheets("Resultat").Cells(6, 1 + j) = nom_titre(j)
        Worksheets("Resultat").Cells(7 + 2, 1) = "RSI 14"
        Worksheets("Resultat").Cells(7 + 2, 1 + j) = RSI(j)
        Worksheets("Resultat").Cells(8 + 2, 1) = "Stochastique 20"
        Worksheets("Resultat").Cells(8 + 2, 1 + j) = Stochastique(j)
        Worksheets("Resultat").Cells(9 + 2, 1) = "Moyenne Mobile 20"
        Worksheets("Resultat").Cells(9 + 2, 1 + j) = MMA(j)
        Worksheets("Resultat").Cells(10 + 2, 1) = "MACD 12 26"
        Worksheets("Resultat").Cells(10 + 2, 1 + j) = MACD(j)
        Worksheets("Resultat").Cells(11 + 2, 1) = "borne bollinger sup 20"
        Worksheets("Resultat").Cells(11 + 2, 1 + j) = Bolsup(j)
        Worksheets("Resultat").Cells(12 + 2, 1) = "borne bollinger inf 20"
        Worksheets("Resultat").Cells(12 + 2, 1 + j) = Bolinf(j)
        Worksheets("Resultat").Cells(13 + 2, 1) = "ROC 20"
        Worksheets("Resultat").Cells(13 + 2, 1 + j) = ROC(j)
    Next j
    Worksheets("Resultat").Select
     
     
     
     
    'code obligatoire
       Lheure = Now + TimeSerial(0, 0, Interval)
       Application.OnTime Lheure, "ExecutionTimer"
    End Sub
    Sub indicateur()
    LancerTimer (Worksheets("VL").Cells(2, 2) * 60)
    End Sub
    Merci de bien vouloir utiliser les balises de code, on ne va pas modifier tous tes messages.

  9. #9
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    bon c'est bien les i qui poser porbléme ...

    je crois que je t'ai déjà donné une partie de la réponse...;

    Supprime tous les Select/selection/activave de ton code...

    par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    'stockage de la duree et du pas et du nombre de titre
    ThisWorkbook.Activate
    Sheets("VL").Select
    Cells(19, 2).Select
    nbre_titre = Range(Selection, Selection.End(xlToRight)).Count
    pas = Worksheets("VL").Cells(2, 2)
    devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    'stockage de la duree et du pas et du nombre de titre
    With ThisWorkbook.Sheets("VL")
    nbre_titre = Range(.Cells(19, 2), .Cells(19, 2).End(xlToRight)).Count
    End With
    pas = Worksheets("VL").Cells(2, 2)
    .. etc..etc.. dis nous si il y as des activate/select... que tu n'arrive pas à supprimer..

    pense aussi à rajouter l'instruction DoEvents dans tes boucles... afin de donner la main au systéme pour le reste...

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/04/2008, 10h34
  2. [VBA-E]Comment Temporiser une macro ?
    Par Mou dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/04/2007, 14h40
  3. [VBA-E] Comment appliquer une macro sur plusieurs cellules
    Par jeanpierreco dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 25/01/2007, 10h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo