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

Discussion: Timer dans une macro

  1. #1
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    juillet 2017
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : juillet 2017
    Messages : 733
    Points : 232
    Points
    232

    Par défaut Timer dans une macro

    Bonjour,

    j'ai dans mes macros une séquence qui permet de mettre des "Top" dans un fichier servant de paramètre sur le serveur consulté ensuite en lecture par les macros utilisateurs sur différents PC. voici cette séquence:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      If Len(Dir(fichTopMaj)) > 0 Then        ' on voit le fichier TopMaj sur le serveur
                     Verification = OpenTopMaj(fichTopMaj)
                         If Verification = False Then     ' il existe, voir s'il est fermé ou en cours d'utilisation
                             Workbooks.Open fichTopMaj
                             Set Top = Sheets("Top")
                             Top.Range("B2:B30") = 1  ' infos paramètre
                             Workbooks(EStopMaj).Close True
                         Else
                         End If
                Else
                End If
    Pour le cas (assez improbable mais qui peut se produire) où le fichier est en utilisation juste au moment du traitement, j'imagine mettre un timer qui relance l'opération au bout de 2 secondes par exemple (maxi 3 boucles par exemple)

    J'ai trouvé sur le forum ce code pour 2 secondes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Wait Time + TimeSerial(0, 0, 2)
    J'aimerai votre avis d'expert sur cette méthode (imaginée par votre serviteur) ou me donner d'autres pistes

    merci
    Il ne savait pas que c'était impossible, donc il l' a fait...

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    juillet 2008
    Messages
    9 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : juillet 2008
    Messages : 9 331
    Points : 31 609
    Points
    31 609

    Par défaut

    Bonjour
    Je ne vais pas te répondre sur ta question mais je te suggère de voir comment lire et écrire dans un classeur fermé à l'aide d'adodb.
    Cordialement.
    J'utilise toujours le point comme séparateur décimal.

  3. #3
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    juillet 2017
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : juillet 2017
    Messages : 733
    Points : 232
    Points
    232

    Par défaut

    Bonjour,

    mon problème n'est pas d’écrire dans un fichier fermé, mais de reporter l'écriture si le classeur est ouvert par une autre personne

    Attendre qq secondes qu'une macro dans un autre classeur qui a ouvert le classeur ait le temps de positionner juste un top et refermer ce classeur

    c'est pour cela que je pensai à mon "timer" trouvé sur le forum avec 3 tentatives maxi (ca fait 6 secondes, largement le temps normalement de libérer le classeur)
    Il ne savait pas que c'était impossible, donc il l' a fait...

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    juillet 2008
    Messages
    9 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : juillet 2008
    Messages : 9 331
    Points : 31 609
    Points
    31 609

    Par défaut

    Si tu ouvre le classeur pour écrire des 1 dans B2:b20. Le sauvegarder et le fermer et gérer le cas où il est ouvert par une autre personne. Je pense que ce que j'ai proposé a le mérite d'être exploré comme alternative.
    Cordialement.
    J'utilise toujours le point comme séparateur décimal.

  5. #5
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    juillet 2017
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : juillet 2017
    Messages : 733
    Points : 232
    Points
    232

    Par défaut

    J'ai bien lu, très intéressant mais un peu au dessus de mes compétences, je testerai à à moyen terme mais dans l'immédiat j'ai peur de tout casser... En plus les quelques personnes qui utilisent l'application n'ont pas la même version d'excel...

    j'aimerai avant de me lancer trouver une solution du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Wait Time + TimeSerial(0, 0, 2)
    dans la boucle en attendant le cas échéant que le fichier soit fermé

    Mais je ne sais pas mesurer si ce genre de code à une efficacité et je ne sais pas mesurer les risques
    Il ne savait pas que c'était impossible, donc il l' a fait...

  6. #6
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    juillet 2008
    Messages
    9 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : juillet 2008
    Messages : 9 331
    Points : 31 609
    Points
    31 609

    Par défaut

    N'aies pas peur!
    Tu vas te simplifier la vie!
    Cordialement.
    J'utilise toujours le point comme séparateur décimal.

  7. #7
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    juillet 2017
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : juillet 2017
    Messages : 733
    Points : 232
    Points
    232

    Par défaut

    Je me lance,

    je reviendrai donner le résultat...

    merci
    Il ne savait pas que c'était impossible, donc il l' a fait...

  8. #8
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    juillet 2008
    Messages
    9 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : juillet 2008
    Messages : 9 331
    Points : 31 609
    Points
    31 609

    Par défaut

    Un petit coup de pousse

    Sur ton fichier FichierTop, tu nommes la plage B1:B30 TopRange avec en B1 le titre BlaBla

    Tu enregistre

    Sur ton fichier utilisateur Excel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub INSERTTOP()
    Dim FichierTOP As String
    Dim Cn As Object
     
    FichierTOP = "C:\Users\USER\Desktop\FichierTOP.xlsx"  'A remplacer par le chemin complet réseau
     
    Set Cn = CreateObject("ADODB.Connection")
    With Cn
        .Open "Provider = Microsoft.ACE.OLEDB.12.0;data source=" & FichierTOP & ";extended properties=""Excel 12.0;HDR=YES"""
        .Execute "UPDATE [TopRange] SET [BlaBla]=1"
        .Close
    End With
    Set Cn = Nothing
    End Sub
    Les mots en rouge tu les adapte dans le code si tu utilise d'autres mots
    Cordialement.
    J'utilise toujours le point comme séparateur décimal.

  9. #9
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    juillet 2017
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : juillet 2017
    Messages : 733
    Points : 232
    Points
    232

    Par défaut

    Merci pour ce coup de pouce, cela ne s'invente pas... Je vais tester cela tranquillement

    Dans le principe je ne saisis pas comment cela se passe si au moment de l'exécution de ce code le fichier est déjà en cours de mise à jour par une autre personne ?
    Il ne savait pas que c'était impossible, donc il l' a fait...

Discussions similaires

  1. Code asm dans une macro C
    Par progfou dans le forum C
    Réponses: 11
    Dernier message: 01/03/2006, 18h50
  2. Comment insérer une macro excel dans une macro word?
    Par max2245 dans le forum VBA Word
    Réponses: 15
    Dernier message: 07/01/2006, 17h44
  3. pb dans une macro excel VB
    Par syl221 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 20/10/2005, 17h29
  4. Utiliser un timer dans une application console
    Par chavers dans le forum Langage
    Réponses: 8
    Dernier message: 25/05/2005, 14h07
  5. Timer dans une feuille excel
    Par bbkenny dans le forum Macros et VBA Excel
    Réponses: 23
    Dernier message: 28/01/2005, 10h43

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