Problème macro

d'abord bonjour car suis nouveau sur le forum

commencons par le debut :

j'ai un fichier exel avec 9 feuilles qui contiennent tous un chrono ( le meme sur chaque feuille )

la macro du chrono est dans module 1.

voici la syntaxe ;

Dim ok As Boolean

Sub Demarrechrono()

ok = True

Range("c10") = TimeSerial(0, 0, 10)

Call decompte

End Sub

Sub decompte()

If ok Then

If Range("c10") = 0 Then

ok = False

Range("c10") = TimeSerial(0, 0, 0): End

End If

Range("c10") = Range("c10") - TimeSerial(0, 0, 1)

Range("c10").NumberFormat = "mm:ss"

Application.OnTime Now + TimeValue("00:00:01"), "deCompte"

End If

End Sub

mon probleme est que quand je lancce le chrono sur la feuille 1 tout marche bien.le decompte fini, je passe sur la feuille 2 et je lance le chrno.

et la le probleme est que quand je lance chrono feuille 2 le chrono feuille 1 se lance aussi

ma queston est :

comment dissocier cette macro afin de l'appliquer a chaque feuille séparément ?

j'espere avoir ete assez clair dans mon explication

en attente 'dune reponse de votre part .

cordialement

Bonsoir,

En fait de chrono, il s'agit de compte-temps... Pas très précis puisque tu ne mesures pas le temps écoulé... Il pourra donc y avoir des décalages.

L'instruction End me paraît à supprimer, elle n'a aucune utilité dans ce contexte et provoque souvent des anomalies, et pour sortir Exit Sub convient très bien.

Pour le problème que tu soulèves, il faut le voir dans ton fichier...

Cordialement.

Bonjour,

Passes la feuille en argument à ta Sub Decompte !

tu peux me donner des explications.

argument ça veut dire quoi

Re,

Un argument est une valeur que demande une procédure ou fonction !

Dans ton cas, avec ceci :

Sub Decompte(NomFe As String)

la Sub "Decompte" demande de façon obligatoire l'argument de type String "NomFe" donc, voici le code complet :

Dim ok As Boolean

Sub Demarrechrono()

    Dim NomFe As String

    NomFe = "Feuil2" '<--- adapter le nom de la feuille !

    ok = True

    Worksheets(NomFe).Range("c10") = TimeSerial(0, 0, 10)

    Decompte NomFe

End Sub

Sub Decompte(NomFe As String)

    With Worksheets(NomFe)

        If ok Then

            If .Range("c10").Value = 0 Then

                ok = False
                .Range("c10").Value = TimeSerial(0, 0, 0)
                Exit Sub

            End If

            .Range("c10").Value = .Range("c10").Value - TimeSerial(0, 0, 1)
            .Range("c10").NumberFormat = "mm:ss"

            'attention, ici c'est un peu particulier, comme c'est un String
            'qui est demandé en argument, il faut doubler les guillemets pour OnTime (comme pour OnAction !)
            Application.OnTime Now + TimeValue("00:00:01"), "'Decompte """ & NomFe & """'"

        End If

    End With

End Sub

si j ai bien compris comme J' ai 5 feuilles j'inclut ça

dans 5 modules ? ou je met ça sur la feuille?

merci de m aider car suis pas très bien doue

résolut

j'ai essayé de mettre ce que tu m'as dit dans un module en renseignant le nom de la feuille ( tour1)bon cz marche mais que sur une feuille.

une fois le temps écoulé je passe dur la feuille 2 et la ça ne marche pas puisqu' in faudrait que j'aille changer le nom de la feuille dans la macro.

as tu une solution?

merci par avance

Bonjour

Je ne sais pas si quelque chose de ce style pourrait aller. A approfondir:

Sub Demarrechrono()
    Dim NomFe As String
    For i = 1 To 9
        NomFe = "Feuil" & i
        ok = True
        Worksheets(NomFe).Range("c10") = TimeSerial(0, 0, 10)
        Decompte NomFe
    Next
End Sub

Dans le cas où tes feilles se nomment Feuil1, Feuil2 etc...

Sinon

NomFe = Worksheets(i).Name

Bon courage

A+

Bonsoir à tous !

Pour ma part j'ai estimé un fichier nécessaire et je m'abstiens donc de toute intervention sur le fond tant que je n'ai pu examiner un fichier... mais je constate que la discussion s'éternise sans aboutir en l'absence !

Cordialement.

Bonjour,

Tu peux déclencher ton décompte sur la procédure événementielle "Activate" des feuilles ou alors le mieux, c'est avec un bouton sur chacune d'elles mais il n'y aura en fait qu'un seul décompte et c'est la première qui appelle qui mettra un terme au décompte pour tous les décomptes lancés donc, il faut modifier le code pour que la procédure soit appelée jusqu'au dernier décompte et c'est ce qui est fait ci-dessous (mise OK à False seulement à la fin du dernier décompte) :

Dim OK As Boolean

Sub Demarrechrono(NomFe As String)

    OK = True

    With Worksheets(NomFe).Range("c10")

        .Value = TimeSerial(0, 0, 10)
        .NumberFormat = "mm:ss"

    End With

    Decompte NomFe

End Sub

Sub Decompte(NomFe As String)

    Dim Fe As Worksheet

    With Worksheets(NomFe).Range("C10")

        If OK Then

            OK = False

            'boucle afin de mettre OK à True tant qu'un décompte est actif
            For Each Fe In Worksheets

                If Fe.Range("C10").Value > 0 Then OK = True: Exit For

            Next Fe

            If OK = False Then Exit Sub

            If .Value > 0 Then .Value = .Value - TimeSerial(0, 0, 1)

            'attention, ici c'est un peu particulier, comme c'est un String
            'qui est demandé en argument, il faut doubler les guillemets pour OnTime (comme pour OnAction !)
            Application.OnTime Now + TimeValue("00:00:01"), "'Decompte """ & NomFe & """'"

        End If

    End With

End Sub

Sur chacune des feuilles une bouton ActiveX est posé et nommé avec le même nom (ici, "MonBouton") car étant attaché à la feuille, le compilateur sait les différencier c e qui permet d'avoir pour chacun d'eux une procédure identique :

Private Sub MonBouton_Click()

    Demarrechrono MonBouton.Parent.Name

End Sub

ok merci pour tout .problème résolu

encore merci à tous ceux qui ont participé

Rechercher des sujets similaires à "probleme macro"