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 :

Arrêt de la macro aprés Workbooks.Open


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Arrêt de la macro aprés Workbooks.Open
    Tout d'abords bonjour tout le monde, je suis nouveau ici. Pour un projet professionnel je me suis mis au VBA Excel. Ayant une petite expérience personnelle sous VB6.

    Voila mon soucis, je développe un classeur qui sera utilisé par plusieurs personnes. le mode partage de excel ne correspond pas car non compatible avec les macros.
    j'ai donc décidé qu'à chaque ouverture du fichier excel sur un poste différent, le fichier s'ouvre en lecture seule (via un Workbooks.Open ... ReadOnly:=True) placé dans le Workbook_Activate(). Ça marche très bien, j'enregistre depuis la macro sans soucis ultérieurement.
    Mais il y a un mais, le code placé à la suite de Workbooks.Open ne s'exécute pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Workbook_Activate()
    MsgBox "avant open"
     
        Workbooks.Open Filename:=chemin, ReadOnly:=True
    MsgBox "aprés open"
     
    End Sub
    j'ai trouvé un article intéressant sur le site de Microsoft malheureusement il ne s'applique pas à mon cas , je n'ai pas de raccourcis pour l'exécution de ma macro.

    J'ai un morceau de code important à placer après ce workbooks.open si vous avez une info n'hésitez pas .

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Bon apparemment je vois que personne n'a de solution sous la main ^^.

    J'ai essayé plusieurs choses depuis mon premier post mais rien de satisfaisant.
    • Lancer un timer avant le workbooks.open faisant appel à une procédure après le workbooks.open
    • Utiliser le Workbooks_active()

    Rien ne marche.

    Le problème étant de continuer l'initialisation de mon programme après le workbooks.open.
    Alors je pourrais mettre un bouton en plein milieu d'une feuille et demander à l'utilisateur de cliquer dessus pour lancer l'init, mais je ne trouve pas ça élégant.

    Je passe peut être à coté d'une méthode...
    Encore une fois si vous avez quelque chose, n'hésitez pas ^^.

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Points : 547
    Points
    547
    Par défaut
    Salut,

    Il ne serait pas plus simple de mettre le fichier en lecture seul dans ces attributs.

  4. #4
    Membre actif Avatar de Many31
    Profil pro
    Inscrit en
    Février 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 198
    Points : 210
    Points
    210
    Par défaut
    Salut,

    Peux tu utiliser un fichier séparé? Dans ce cas tu peux utiliser le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Fichier_Lec As Workbook
     
    Private Sub Workbook_Open()
        chemin = "chemin\nom fichier.xls"
        Set Fichier_Lec = Workbooks.Open(Filename:=chemin, ReadOnly:=True)
        MsgBox "OK"
     
    End Sub
    qui marche très bien.

    ¨Pour l'enregistrement par la suite tu peux utiliser dans le fichier en lecture seule l'événement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel as Boolean)

  5. #5
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Points : 119
    Points
    119
    Par défaut
    tu souhaite ouvrir ton classeur dans l'ouverture ?
    je comprends pas bien le principe de mettre un workbook.open dans un workbook.activate ....
    ce n'es pas très clair

    et si tu as un truc si important à mettre après un workbook.open
    utilise les évènements de thisworkbook du nouveau classeur

    Private sub workbook_open ()
    Là tu mets ton code important
    end sub

    Edit : grillé ...

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Salut Minick,

    J'ai essayé cette méthode, mais j'avais ensuite un soucis pour enregistrer le fichier ^^.

    Mais en enregistrant le fichier dans un temp, effaçant le fichier en lecture seule puis en enregistrant le fichier en lecture seule ça peut le faire.

    J'essaye dés que possible. Merci de ton aide.

    Salut Many31,

    Si cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Set Fichier_Lec = Workbooks.Open(Filename:=chemin, ReadOnly:=True)
    fonctionne, je suis fou ^^ je vais essayer ça, merci.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par DébutantVba Voir le message
    Salut Minick,

    J'ai essayé cette méthode, mais j'avais ensuite un soucis pour enregistrer le fichier ^^.

    Mais en enregistrant le fichier dans un temp, effaçant le fichier en lecture seule puis en enregistrant le fichier en lecture seule ça peut le faire.

    J'essaye dés que possible. Merci de ton aide.
    Malheureusement ça ne marche pas.
    La macro ne peux pas écraser ou effacer un fichier en lecture seule. Il me sort une erreur.

    Many,

    Peux tu utiliser un fichier séparé
    Je ne comprend pas ton histoire de fichier séparé.
    Sinon j'ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Set Fichier_Lec = Workbooks.Open(Filename:=chemin, ReadOnly:=True)
    En le mettant dans Workbook_Open(), le fichier s'ouvre bien en lecture seule, mais il ne vas pas plus loin.

    Je suis surpris que ça fonctionne chez toi. Tu a Excel 2003 également ?

    Citation Envoyé par david_atx Voir le message
    tu souhaite ouvrir ton classeur dans l'ouverture ?
    L'utilisateur démarre le fichier en lecture/écriture et la macro le rouvre en lecture seule, pour que plusieurs utilisateurs puissent l'ouvrir en même temps.


    je comprends pas bien le principe de mettre un workbook.open dans un workbook.activate ....
    ce n'es pas très clair
    Pour être franc j'ai essayé de le mettre un peu partout ^^ Workbook_Open(), Workbook_Activate()...


    et si tu as un truc si important à mettre après un workbook.open
    utilise les évènements de thisworkbook du nouveau classeur
    Ils ne se lancent malheureusement pas, sauf les événements que l'utilisateur provoque.

  8. #8
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 919
    Points
    55 919
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Comme dit dans une des premières réponses, il faut enregistrer le fichier de manière à ce qu'il soit ouvert obligatoirement en lecture seule (avec mp).

    Tu ne peux pas avoir dans un fichier excel une macro qui ferme CE fichier puis qui rouvre CE MEME fichier, car le processus VBA est évidemment tué à la fermeture du classeur.

    Donc, ton ouverture en lecture seule DOIT venir d'ailleurs, et elle vient de ce que tu enregistres ton classeur en imposant la lecture seule à l'ouverture

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Salut tout le monde,

    Pierre Fauconnier, merci pour ta réponse, mais je n'ai pas tout pigé, enfin je pense avoir compris l'essentiel - Excel ne peut pas fermer une macro et la poursuivre.

    J'ai réussi tant bien que mal à faire ce que je voulais, ça marche parfaitement sur mon PC, mais en sera-t-il de même sur les autres ...
    Je ne vous demande pas spécialement de tester cette macro, mais, si vous avez le temps, de regarder si quelque chose vous choque ...

    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
    Private Sub Workbook_Open()
    'le workbook est appelé 2 fois, la première fois en lecture écriture, la 2ieme en lecture seule.
    If ActiveWorkbook.ReadOnly = False Then
     
        Dim rep As Long
        rep = Shell("Excel.exe /r " & """" & ActiveWorkbook.FullName & """")
     
        'si il y a plusieurs workbook ouvert il ne faut pas tuer le PID (c'est le cas si l'utilisateur a ouvert plusieurs documents excel)
        'si il y en a qu'un d'ouvert, il faut tuer le PID puisqu'on en a démarré un autre.
        If Application.Workbooks.Count > 1 Then
        'on tue le workbook
            On Error Resume Next
            Set Wb = GetObject(ActiveWorkbook.FullName)
            Wb.Close False
        Else
        'on tue le PID
            rep = Shell("taskkill /PID " & GetCurrentProcessId & " /F")
        End If
     
    Else
    Application.WindowState = xlMaximized
    MsgBox "suite du code"
    End If
    End Sub
    il faut déclarer ceci dans un module :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Public Declare Function GetCurrentProcessId Lib "kernel32.dll" () As Long
    Encore merci pour votre aide ^^

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Bonjour à tous, je détecte exactement le même problème, mais uniquement lorsque je lance ma macro avec un raccourci clavier.
    J'espère obtenir une réponse :
    http://www.developpez.net/forums/d87...selectionnees/

    Le but était d'affecter le raccourci clavier Ctrl+Shift+P au lancement de cette macro... qui en revanche fonctionnait très bien lorsque je la lançait à partir du menu elle fonctionne en revanche très bien.

    Et bien, mon problème est résolu, en supprimant le "Shift" de mon raccourci clavier. C'est dommage, la combinaison "Ctrl+Shift+P" était géniale.

    Autre remarque, en supprimant la fonction "Open", et en ouvrant le classeur de destination dans Excel AVANT de lancer la macro, ça fonctionne (logique). C'est contraignant, mais ce pourrait être une solution dans certains cas.

Discussions similaires

  1. Utiliser des macros Excel sous open office
    Par Memes dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 08/11/2007, 21h46
  2. Workbook.open et la macro s'arrête
    Par bart64 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/07/2007, 16h43
  3. [VBA-E]exécution lente de la macro après aperçu
    Par cwain dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 28/03/2006, 17h49
  4. [VBA-E] Lancer workbook open
    Par ptitsoleil87 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 31/12/2005, 12h40
  5. Ouverture CSV par Workbooks.open
    Par PoPmiSiR dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 14/10/2005, 10h19

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