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 :

Problème avec un macro / minuteur


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Technicien
    Inscrit en
    Janvier 2023
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2023
    Messages : 10
    Par défaut Problème avec un macro / minuteur
    Bonjour,
    je developpe depuis peu sous excell (Office 365) des Macro ...sur la base des forums que je trouve à gauche et à droite.
    Par contre là je fais face à un problème dont je ne trouve de solutions sur le net.

    J'ai créé une macro qui affiche un minuteur sur un onglet. Le document excell comporte plusieurs onglets.
    Mon problème est dès que je vais sur un autre onglet, la macro plante.
    Si j'y insère Sheets("xy") .select, dès que je change d'onglet, je reviens automatiquement à l'onglet ou le minuteur tourne. Pas pratique pour voir les autres onglets.

    Avez-vous une idée comment faire....de façon simple pour un novice.
    Merci pour votre support.
    Voici ma macro :

    Dim ok As Boolean

    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
    Sub Minuteur()
    'Sheets("Check").Select
    ok = True
    Range("D8").Value = TimeValue("00:00:00")
    Application.OnTime Now + TimeValue("00:00:01"), "mettre_a_jour"
    End Sub
     
     
    Sub mettre_a_jour()
    'Sheets("Check").Select
    If ok Then
    Range("D8").Value = [D8] + TimeSerial(0, 0, 1)
    'Range("D8").NumberFormat = "hh:mm:ss"
    Application.OnTime Now + TimeValue("00:00:01"), "mettre_a_jour"
    End If
     
    End Sub
     
    Sub ArretCalculTps()
    ok = False
    Range("D8").Value = TimeValue("00:00:00")
    End Sub

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Salut, ajoute ceci à ThisWorkbook, il devrait arrêter le minuteur quand tu quittes la feuille:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
        ' Appelé lorsque tu changes d'onglet
        Call ArretCalculTps
    End Sub

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 524
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 524
    Par défaut
    Salut,

    Ton problème vient du fait que tu utilises des références implicites.
    Range("D8").Value c'est implicitement ActiveWorkbook.ActiveSheet.Range("D8").Value (soit: la cellule D8 de feuille active du classeur actif).
    En conséquences, lorsque tu click sur une autre feuille, la feuille active change, et par effet domino, la cellule D8 aussi.

    Passe par des références explicites, et ton problème sera résolu.

  4. #4
    Membre habitué
    Homme Profil pro
    Technicien
    Inscrit en
    Janvier 2023
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2023
    Messages : 10
    Par défaut
    Citation Envoyé par deedolith Voir le message
    Salut,

    Ton problème vient du fait que tu utilises des références implicites.
    Range("D8").Value c'est implicitement ActiveWorkbook.ActiveSheet.Range("D8").Value (soit: la cellule D8 de feuille active du classeur actif).
    En conséquences, lorsque tu click sur une autre feuille, la feuille active change, et par effet domino, la cellule D8 aussi.

    Passe par des références explicites, et ton problème sera résolu.
    Merci pour le retour . Mais étant novice , cela m'est pas très clairs. Comment dans mon cas programmer cela avec des references explicites ?
    Merci encore pour votre support.

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 524
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 524
    Par défaut
    Citation Envoyé par moimeme67 Voir le message
    Merci pour le retour . Mais étant novice , cela m'est pas très clairs. Comment dans mon cas programmer cela avec des references explicites ?
    Merci encore pour votre support.
    Tous d'abord, la propriété ThisWorkbook retourne une référence vers le classeur contenant le code.
    Ensuite, l'objet Workbook contient une collection Worksheets (au pluriel) contient des références (de type Worksheet) vers les feuilles du classeur.
    Enfin, l'objet Worksheet contient la propriété Range() permettant de référencer les cellules.

    Pour référencer explicitement des cellules, il te faut référencer le classeur, la feuille et la cellule (cela s'appelle respecter la parentalité des objets), et il y a plusieurs façon de faire.
    (Pour les exemples qui suivent, je suppose que l'on essaie d'atteindre la cellule "B6" de la feuille "Calcul")
    1) Déréférencer le chemin complet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.Worksheets("Calcul").Range("B6").Value = ...
    C'est très barbare, et à force, c'est pénible.

    2) Utiliser le l'instruction With:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With ThisWorkbook.Worksheets("Calcul")
        .Range("B6").Value = ...
    End With
    3)Utiliser des variables intermédiaires:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim Wb As Excel.Workbook
    Set Wb = ThisWorkbook    '// Reference vers le classeur
     
    Dim Ws As Excel.Worksheet
    Set Ws = Wb.Worksheets("Calcul")    '// Reference vers la feuille
     
    Dim Rng As Excel.Range
    Set Rng = Ws.Range("B6")    '// Reference vers la cellule
    Rng.Value = ...

  6. #6
    Membre habitué
    Homme Profil pro
    Technicien
    Inscrit en
    Janvier 2023
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2023
    Messages : 10
    Par défaut
    @deedolith, merci pour l'info. Je vais essayer de m'y coller dans les prochains jours. Suis assez pris dans mon job en ce moment.
    Juste une question: faut-il passer à travers les 3 étapes ou bien 1 solution sur les 3 fonctionne ?

  7. #7
    Membre habitué
    Homme Profil pro
    Technicien
    Inscrit en
    Janvier 2023
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2023
    Messages : 10
    Par défaut
    Citation Envoyé par Franc Voir le message
    Salut, ajoute ceci à ThisWorkbook, il devrait arrêter le minuteur quand tu quittes la feuille:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
        ' Appelé lorsque tu changes d'onglet
        Call ArretCalculTps
    End Sub
    Merci pour la réponse mais je veux que le minuteur continue de compter. meme quand je vais sur un autre onglet...

Discussions similaires

  1. [VBA-E] Exporter un fichier Web avec une macro
    Par Wilgard dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/05/2006, 12h25
  2. tableau dynamique excel crée avec une macro
    Par alex_95 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 20/03/2006, 12h01
  3. [Excel]Faire une somme avec une macro
    Par Chlo dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 13/01/2006, 19h53
  4. Connaître la taille d'un module avec une macro VBA ou autre
    Par beegees dans le forum Général VBA
    Réponses: 15
    Dernier message: 22/11/2005, 09h47
  5. [VBA Excel] ecrire le caractere " avec une macro
    Par oktopuces dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/09/2005, 22h56

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