Synchronisation sur fichier partagé
Bonjour,
j'ai quelques soucis sur la gestion de la synchonisation d'un fichier partagé.
Je vais commencer par vous expliquer mon besoin, puis présenter la solution que j'ai trouvé (mais qui ne marche pas).
Le problème est le suivant : un document excel avec une interface de saisie. L'interface de saisie renseigne des informations stoqués sur une ligne.
Le fichier excel est partagé entre plusieurs utilisateurs. Le problème est donc de vérifier avant d'écrire une ligne qu'elle ne vas pas écraser une ligne déjà existante.
J'ai donc essayé de mettre en place une fonction appelé avant et après chaque écriture et qui vas charger les maj ou les écrire suivant les cas.
Pour cela, j'ai repris un bout de code trouvé dans l'aide en ligne excel :
Code:
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
|
Sub Sync_fichier()
' fonction devant servir a gérer les maj en environement de classeur partagé
' a appeler avant et après chaque maj dans les lignes
Dim objSync As Office.Sync
Dim strStatus As String
Set objSync = ThisWorkbook.Sync
If objSync.Status > msoSyncStatusNoSharedWorkspace Then
Select Case objSync.Status
Case msoSyncStatusConflict
objSync.ResolveConflict msoSyncConflictMerge
ActiveDocument.Save
objSync.ResolveConflict msoSyncConflictClientWins
strStatus = "Conflit résolu en fusionnant les modifications."
Case msoSyncStatusError
strStatus = "Last error type: " & objSync.ErrorType
Case msoSyncStatusLatest
strStatus = "Document déjà en cours de sync."
Case msoSyncStatusLocalChanges
objSync.PutUpdate
strStatus = "Changement local sauvé sur le serveur."
Case msoSyncStatusNewerAvailable
objSync.GetUpdate
strStatus = "Copie local mise a jour depuis le serveur."
Case msoSyncStatusSuspended
objSync.Unsuspend
strStatus = "Synchronization resumed."
End Select
Else
strStatus = "Ce n'est pas un classeur partagé."
End If
MsgBox strStatus, vbInformation + vbOKOnly, "Sync Information"
Set objSync = Nothing
End Sub |
La difference entre la doc et ce bout de code est le mot souligné qui est ActiveDocument dans la doc. J'ai fait ce changement car ActiveDocument me renvoyais une erreur (le objSync etais vide).
Mon problème c'est qu'avec cette fonction, j'ai toujours le message "Ce n'est pas un classeur partagé." qui m'indique que objSync.Status = soSyncStatusNoSharedWorkspace
Si vous avez une idée d'où est mon erreur ou si vous avez une autre solution à mon problème.
Par avance merci.