Partage de classeur

kyasteph

XLDnaute Occasionnel
Bonjour,
j'ai un classeur excel comprenant des macros qui fonctionnent tres bien.je souhaiterais utiliser ce classeur en multiutilisateur.
Apres partage du classeur(Révision-->Partager le classeur),certaines macros ne fonctionnent pas bien,leur exécution s'interromp et un message d'erreur est affiché:

Erreur d'exécution '1004':
La méthode Unprotect de la classe Worksheet a échoué.

Dans mon classeur,toutes les feuilles sont protégées;pour exécuter donc une action par macro,je procede comme suit:
-----------------
Activesheet.unprotect"MDP"
'------L'ACTION....
Activesheet.protect"MDP"

Apres avoir cherché sur le net je n'arrive pas à trouver de solutions .
Merci de m'aider s'il vous plait.
 

camarchepas

XLDnaute Barbatruc
Re : Partage de classeur

Bonjour ,

Multi utilisateurs simultanés et macro ne font pas bon ménage sous Excel .

Pour ce genre d'usage, il faut diviser l'appli en 2 . une partie interface qui sera ouverte autant de fois qu'il y a d'utilisateurs , et une partie base de données qui elle sera accessible via un protocol à définir .
 

kyasteph

XLDnaute Occasionnel
Re : Partage de classeur

Bonjour,
Merci pour votre réponse,mais j'avoue ne pas comprendre:
Pour ce genre d'usage, il faut diviser l'appli en 2 . une partie interface qui sera ouverte autant de fois qu'il y a d'utilisateurs , et une partie base de données qui elle sera accessible via un protocol à définir .
Comment y arriver avec excel surtout que excel n'est pas un SGBD;et est ce que cela ne risque pas de m'emmener a reprendre tout mon developpement?

Par ailleurs j'ai vu que certains ont utilisé la méthode suivante pour déprotéger/protéger dans un classeur partagé:
Feuil1.Unprotect Password:="MDP", UserInterfaceOnly:=True

Mais je n'arrive pas à l'appliquer chez moi.

Quelqu'un a t il une idée?

Merci de m'aider s'il vous plait.
 

camarchepas

XLDnaute Barbatruc
Re : Partage de classeur

re

UserInterfaceOnly:=True permet de protéger pour l'interface uniquement , mais laisse l'accés au code vba.

1 ere solution : Excel dispose d'un Sql simplifié ,

2eme solution : L'on sait écrire dans un autre classeur facilement , il suffit de verrouiller l'accés par un drapeau . Fichier texte par exemple, et de rendre les accès le plus court possible .

C'est d'ailleur les principes de toutes les applis multi utilisateurs.
 

kyasteph

XLDnaute Occasionnel
Re : Partage de classeur

Bonjour,
Veuillez m'excusez pour le retard avec lequel je réponds:
Si j'ai bien compris vos explications:
il me faut créer deux classeurs:
-1er classeur "interface" qui lui sera partagé(en évitant les restrictions de partage),et permettra aux utilisateurs ayant acces d'entrer les données;
-Le 2ème classeur "DataBase" ayant les memes tableaux que le 1er,lui ne sera pas partagé ;il sera rempli(alimenté) automatiquement par les données du 1er classeur.
Ainsi on pourra librement faire toutes les operations possibles sur ce deuxieme classeur car il ne souffrira pas des restrictions du partage.

Vu sous cet angle cela m'a l'air tres interessant;mais comment y arriver ?:
-Comment remplir automatiquement un classeur à partir d'un autre?

Si ce n'est trop abusé auriez vous une démo ?

Merci de m'aidez s'il vous plait.
 

camarchepas

XLDnaute Barbatruc
Re : Partage de classeur

Bonsoir ,

J'utilise un fichier texte drapeau qui permet l'autorisation d'accès ou la mise en attente d'une requête, et un indicateur sur la donnée elle m^me pour indiquer ( le comble de l'indicateur ) que la donnée est en cours de modification, ensuite des logs permettent de savoir ce qui a été fait .
Bon pour la lecture et l'écriture , au choix soit sql, soit une modification classique de la ligne de donnée. voilà voilà .
ça fonctionne bien jusque 20 utilisateurs simultanés , ensuite l'on peut avoir des temps d'attente .
 

kyasteph

XLDnaute Occasionnel
Re : Partage de classeur

Bonjour,
Avec vos explications je me rends compte qu Excel m'a l'air complet..et ça c'est rassurant.
Cependant l'utilisation des "fichiers textes drapeau",ça je ne vois vraiment pas comment y arriver...j'ai du chemin à parcourir.
vous avez écrit:
2eme solution : L'on sait écrire dans un autre classeur facilement , il suffit de verrouiller l'accés par un drapeau . Fichier texte par exemple, et de rendre les accès le plus court possible .

Je reviens sur mon probleme:
-Comment remplir automatiquement un classeur à partir d'un autre?

Si ce n'est trop abusé auriez vous une démo ?

Merci de m'aidez s'il vous plait.
 

youky(BJ)

XLDnaute Barbatruc
Re : Partage de classeur

Bonsoir à tous,
A savoir aussi qu'un classeur partagé n'accepte pas les protections, il faut supprimer le partage pour retrouver les protections et macros qui fonctionnent.
Ou supprimer toutes les protections dans le classeur et également dans les macros.(ensuite partager)
Bruno
 

kyasteph

XLDnaute Occasionnel
Re : Partage de classeur

Bonsoir,
Comme promis je vous envoie un fichier joint simplifié comportant un seul onglet (Feuil1).
En considérant qu'il y a deux classeurs comportant le meme onglet,comment alimenter l'un (DataBase) à partir de l'autre (interface) tout en appliquant le "systeme fichier text drapeau"?
j'espere que mon fichier donne une idée de la nature des données.

Merci de m'aider s'il vous plait.
 

Pièces jointes

  • EssaiPartagé.xlsx
    12 KB · Affichages: 38
  • EssaiPartagé.xlsx
    12 KB · Affichages: 37
  • EssaiPartagé.xlsx
    12 KB · Affichages: 36

camarchepas

XLDnaute Barbatruc
Re : Partage de classeur

Bonjour ,
on avance un peu dans la connaissance du sujet à traiter ,

Mais il faut encore aller plus loin pour bien definir comment s'applique le partage , ( Non , y'a pas un bouton magique , Excel , partage mes données , avec le confort simple utilisateur et sans effort du concepteur)

donc les données ont les a à peut prés , mais que font les utilisateurs en même tant, ils travaillent directement sur cette feuille , ou sur une ligne à la fois. (Là donc , il me faut un descriptif, avant d'aller plus loin) ( bon dans la réalité, le plus souvent , l'on travaille via un formulaire sur l'une des ligne de la base )

Bon , allez , quelques lignes de programme pour te montrer le grand principe du fichier Drapeau ou verrou :

(ATTENTION , c'est brut de décoffrage ,)

pour bien comprendre fais du pas à pas en lançant Gestion_daccès

Ensuite le chemin d'accés contennu dans la variable Serveur devra bien sur pointer sur le serveur , voir le répertoire du serveur contenant la base de données.

Cette partie sera donc dans la partie interface utilisateur bien sur -( mais bon autant préciser , des fois que )

Code à copier dans un module standard VBA

Code:
Option Explicit
Public Serveur As String, Verrou As String
Public Utilisateur_Appli As String
Sub Gestion_Accés()
Serveur = "c:\temp"
Verrou = "Verrou_Ecr.txt"
'Peut venir d'une identification appli ,si pas de log individuel systeme
 Utilisateur_Appli = "Léon"
 
If Etat_Fichier(Serveur & "\" & Verrou) <> "Non Présent" Then
  ' Mise En attente
   MsgBox "Le classeur demandé est en cours d'utilisation, vous êtes mise en attente"
 Else
  'Verrouillage de l'accés
  Fichier_Verrou Serveur & "\" & Verrou
  MsgBox "Le classeur demandé est disponible"
  ' Mise à jour des données
  MiseAjour
 ' A écrire dans un module dédié lorsque l'étude aura avancée
  
 End If

End Sub
Sub Fichier_Verrou(Verrou As String)
'Pose du verrou d'accés écriture
Open Verrou For Output As #1
 Print #1, Environ("USERNAME") & " : " & Environ("COMPUTERNAME") & " : " & Utilisateur_Appli
Close #1
End Sub

 Function Etat_Fichier(Verrou As String) As String
 'Donne l'état du fichier verrou
 Dim Err_Num As Integer, Fichier_Num As Integer
 Dim Etat As String
  'Trouve un canal libre pour l'exploitation du fichier
   Fichier_Num = FreeFile()
  'Le programme prend en charge la gestion des erreurs ( Passe à la ligne suivante si erreur )
   On Error Resume Next
   'Ouverture du fichier verrou
    Open Verrou For Input Lock Read As Fichier_Num
   'puis fermeture du fichier verrou
    Close Fichier_Num
   'mémorise le numéro d'erreur
    Err_Num = Err
   'Repasse la gestion des erreurs au système
    On Error GoTo 0
 
 'Analyse des retour d'erreur
 Select Case Err_Num
  Case 0 ' Accès Autorisé par le système, mais réservation accès encore présente
         Etat = "En Cours"
  Case 70 'Accès interdit, fichier en cours d'utilisation
         Etat = "Occupé"
  Case 53 ' Pas de réservation d'accés donc l'accés est possible
         Etat = "Non Présent"
  Case Else
    Error Err_Num
    Stop
 End Select
 Etat_Fichier = Etat
 End Function

Sub MiseAjour()
'Mise à jour des données   << A penser , puis écrire >>

MsgBox "En cours d'écriture"

'Aprés mise à jour , libération de l'accés
If Etat_Fichier(Serveur & "\" & Verrou) <> "Non Présent" Then Kill Serveur & "\" & Verrou


End Sub
 
Dernière édition:

kyasteph

XLDnaute Occasionnel
Re : Partage de classeur

Bonjour,
Veuillez m'excuser,je vous donne plus de détails.
En effet les utilisateurs travaillent tous sur une seule ligne (la ligne 6 VOIR PJ) et à partir d'une macro les données sont déversées dans le tableau.
A noter que dans la base un enregistrement est identifié par LE N° facture(car ici il s'agit des factures de vente) et il n'est pas possible qu'un N°facture soit repété tout ça a déja été géré dans le remplissage du formulaire.

j'espere avoir donné les explications qu'il faut,je suis pret à fournir ce qui manque comme explication.

Merci de m'aidez s'il vous plait.
 

Pièces jointes

  • EssaiPartagé.xlsx
    21.2 KB · Affichages: 31
  • EssaiPartagé.xlsx
    21.2 KB · Affichages: 36
  • EssaiPartagé.xlsx
    21.2 KB · Affichages: 29

camarchepas

XLDnaute Barbatruc
Re : Partage de classeur

Bonjour,

L e fichier étant en xlsx , y'a donc pas de macro , dommage si elle existe déjà ,
y'a peut être qu'un greffon à faire .

Alors oui encore besoin d'infos ... (Ici N°5)
Bon, le sénario se précise :

Saise de la nouvelle information ligne 6,
Vérification conformité de l'information

Question : Est-il possible de revenir sur une des anciennes saisies?

Demande d'accés au serveur
si non Ok, mise en tampon pour ne pas bloquer l'utilisateur
si ok intégration des données dans base.

Vérification du tampon par base en fin d'intégration
si données dans tampon intégration.

Restitution vers client base
Question : que doit-on restituer ?

La base complète,
une base compléte journaliére , mensuelle
les lignes modifiées .
Juste le montant global Jour , mois ou total

Voilà en fonction de tes réponses, la stratégie ne sera pas du tout la même.

Ah oui , J'aurais aussi besoin d'avoir un ordre d'idée du nombre d'utilisateurs et du nombre de lignes moyen ou maxi saisies dans la journée.

Si la base n'est ni journaliére , ni hebdo , ni mensuelle , il faudrait également le temps de garde de cette base.

Tout ces renseignements pour ne pas construire une Ferrari si tu n'as besoin que d'une mehari , et je voudrais pas t'orienter vers une 2cv si tu as besoin d'un Boxer ....
 

Discussions similaires

Réponses
9
Affichages
2 K
Compte Supprimé 979
C

Statistiques des forums

Discussions
312 331
Messages
2 087 360
Membres
103 529
dernier inscrit
moket07