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 :

HELP : pb de repartage de fichier apres un accès Exclusif


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut HELP : pb de repartage de fichier apres un accès Exclusif
    Bonjour,

    Description du problème :


    1 Fichiers Excel en mode « classeur partagés ». Ce fichier contient des références vers des macros complémentaires qui effectuent certains traitements sur le fichier. Ces traitements fonctionnent très bien en mode classique mono-utilisateur (classeur exclusif).


    Pour pouvoir effectuer les traitements en mode pluri-utilisateurs, les macros ont besoin d’accéder au fichier en mode « exclusif ». L’instance « demandeuse » des traitements prend alors la main en mode exclusif sur le fichier et effectue les traitements nécessaires, puis remet le fichier en mode partagé. « Jusque là OK. Sauf que… »

    Le problème c’est que lorsque l’instance demandeuse prend la main sur le fichier en mode exclusif, les autres instances ouvertes sont alors « déconnectés » du fichier (c.à.d : que le fichier reste ouvert et disponible pour visualisation et modification, mais toute tentative de sauvegarde sera un échec).

    Seule solution, inenvisageable ici : sauvegarder en local autre part, puis « merger »…)

    En résumé, même si l’on a prend soin de rendre le fichier à nouveau partagé après avoir effectué les traitements exclusifs, les instances déconnectées ne sont pas rechargées avec les nouvelles données du fichier lorsque le fichier est à nouveau rendu partagé.

    Je cherche donc un moyen de réveiller/updater ces instances automatiquement, sans avoir à fermer le fichier et à le rouvrir.

    Un truc du style, une « pop-up » qui préviendrait que le fichier vient d’être updaté et que si on veut on peut retriever les nouvelles données, quitte à perdre ce que l’on a modifié…



    Help please…

    Le cas est facilement simulable en lançant 2 instances d’un même fichier excel sur 2 instances d’excel, flaggué comme partagé, puis en flagguant l’une des 2 instances comme non partagée, puis en la repassant en partagé, puis en tentant de sauvegarder la seconde.

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Ok.
    je pense que tu as essayé en rendant actives les autres instances...
    Tu pourrais nous montrer ton code pour que nous testions des solutions sans avoir à tout ré-écrire. On se débrouillera avec les noms de fichiers et les macros complémentaires.
    A+

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Voici mon code, open et before close, + les routines de Partage/departage/protection/deprotection utilisé par le workbook pour pouvoir effectuer les traitements en fonction des besoins :

    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
    117
    118
    119
    120
    121
    122
    123
    124
    125
    Private Sub Workbook_open()
    On Error Resume Next
     
        Dim strWbName As String
     
        Application.ScreenUpdating = False
        Application.Calculation = xlCalculationManual
     
        '---------------MultiUser----------------
     
        If Not ThisWorkbook.MultiUserEditing = True Then
            Application.DisplayAlerts = False
            With ThisWorkbook
                If .KeepChangeHistory Then .KeepChangeHistory = False
                If .ConflictResolution Then .ConflictResolution = xlLocalSessionChanges 'Modif de l'utilisateur local sont tjs acceptées
                If .PersonalViewListSettings Then .PersonalViewListSettings = False
                If .PersonalViewPrintSettings Then .PersonalViewPrintSettings = False
                If .HighlightChangesOnScreen Then HighlightChangesOnScreen = True 'Modif non surligné a l'écran
                .HighlightChangesOptions When:=xlAllChanges
     
                If .ListChangesOnNewSheet Then .ListChangesOnNewSheet = True
                If .AutoUpdateFrequency Then .AutoUpdateFrequency = 5
            End With
     
            'Partager
            Call Partager
     
        End If
     
        ' ..........................
     
    End Sub
     
     
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
        On Error Resume Next
     
        Dim varUsers As Variant
     
        Application.ScreenUpdating = False
        Application.Calculation = xlCalculationManual
     
        If ThisWorkbook.MultiUserEditing = True Then
     
            If IsNumeric(UBound(varUsers, 1)) = True Then
                If Not UBound(varUsers, 1) > 1 Then
     
                    Call DéPartager
     
                End If
            End If
        End If
     
    End Sub
     
     
    Sub Partager()
        On Error Resume Next
     
        Application.DisplayAlerts = False
     
        MsgBox ("passe en mode partagé : ")
     
        If Not ThisWorkbook.MultiUserEditing = True Then
            ThisWorkbook.SaveAs Filename:=ThisWorkbook.FullName, accessMode:=xlShared
        End If
     
        Application.DisplayAlerts = True
     
    End Sub
     
    Sub DéPartager()
        On Error Resume Next
     
        Application.DisplayAlerts = False
     
        MsgBox ("passe en mode exclusive acces :")
     
        ThisWorkbook.ExclusiveAccess ' C'EST A CE MOMENT QUE L'INSTANCE REND LA MAIN EXCLUSIVE SUR LE FICHIER ET DECONNECTE LES AUTRES USERS
     
        Application.DisplayAlerts = True
     
    End Sub
     
     
    Sub Protéger()
        On Error Resume Next
        ' Protection automatique de toutes les feuilles d'un classeur
        Dim nombre As Integer
        'nombre = ActiveWorkbook.Sheets.Count
        nombre = ThisWorkbook.Sheets.Count
     
        Application.ScreenUpdating = False
     
        Dim Start As Integer
     
        Dim Constante As ConstantClass
        Set Constante = NewConstante()
     
        If (CInt(GetExcelNameDefinitionData(Constante.ConsultationFileOnly, ThisWorkbook, Parametersheet.ParametersWorkbook)) = 1) Then
          Start = 2
        Else
          Start = 1
        End If
     
        For i = Start To nombre
           ThisWorkbook.Worksheets(i).Protect Password:="parameterlock", UserInterfaceOnly:=True
        Next i
     
    End Sub
     
    Sub DéProtéger()
        On Error Resume Next
     
        Dim nombre As Integer
     
        nombre = ThisWorkbook.Sheets.Count
     
        Application.ScreenUpdating = False
     
        For i = 1 To nombre
            ThisWorkbook.Worksheets(i).Unprotect Password:="parameterlock"
        Next i
     
    End Sub

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Ok, j'ai "à peu près" compris ton pb. Comme tu parlais d'instances, j'ai cru que tu instanciais plusieurs fois le même fichier et ça, je ne comprenais pas.
    Je suppose un problème dans le fait que la macro est lancée depuis Thisworbook, or quand tu enregistres ton fichier as, ThisWorkbook n'est plus le même.
    J'ai vu que tu enregistrais le fichier "as " dans cette ligne
    ThisWorkbook.SaveAs Filename:=ThisWorkbook.FullName, accessMode:=xlShared
    Ne peux-tu pas l'enregistrer sous un autre nom ?
    Dans ce cas, tu écris ta macro dans un troisième fichier et tu crées une instance pour chaque forme du fichier sur lequel tu souhaites travailler.
    Auquel cas tu pourras exécuter ton code depuis Thisworkbook en activant l'une ou l'autre instance (je n'ai pas regardé plus en détail)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Set appxl1 = CreateObject("Excel.Application")
    Set CL1 = appxl1.Workbooks.open LeFichierPartagé
    Set appxl2 = CreateObject("Excel.Application")
    Set CL2 = appxl2.Workbooks.open LeFichierNonPartagé
    et pour travailler sur l'un ou l'autre, tu utilises .activate
    Un peu lourd mais c'est juste une idée à défaut d'une solution plus sioux.
    Une autre solution consisterait à travailler sur le fichier fermé. Tu as la méthode dans la FAQ par SilkyRoad.
    Bonne chance

Discussions similaires

  1. Help - plein de messages d'erreur après avoir installé Free
    Par fute dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 18/12/2005, 14h33
  2. Récupération fichiers après formatage
    Par lmyfgame dans le forum Autres Logiciels
    Réponses: 6
    Dernier message: 16/12/2005, 13h38
  3. Erreur validation fichier après un OpenDialog
    Par jackrabbit dans le forum Langage
    Réponses: 2
    Dernier message: 24/08/2005, 13h28
  4. sauvegarde d'un fichier apres transformations
    Par tigana dans le forum OpenGL
    Réponses: 5
    Dernier message: 18/05/2005, 10h01
  5. Supprimer les guillemets dans un fichier après écriture
    Par soulryo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 01/03/2005, 11h39

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