refuser l'ouverture d'un classeur deja ouvert

David590

XLDnaute Occasionnel
Bonsoir à tous,

J'ai 2 pc qui utilisent un classeur partagé et j'utilise le code ci dessous pour ne laisser l’accès qu'a un utilisateur à la fois

Code:
Workbooks.Open CheminDossier & "Partagé.xlsm", True
If Workbooks("Partagé.xlsm").ReadOnly = True Then
    Workbooks("Partagé.xlsm").Close
    MsgBox ("fichier occupé")
    Exit Sub
End If

Lorsqu'un utilisateur veut modifier le classeur partagé, une macro ouvre l'ouvre, le modifie et le referme.

Le problème c'est qu'il arrive parfois, quand les 2 utilisateurs l'ouvre en même temps (vraiment à la seconde près, et oui ça arrive), que le classeur s'ouvre malgré tous des 2 cotés

Dans certain cas, ouverture, modification et fermeture des 2 cotés, mais en réalité un écrase l'autre..
Dans d'autres cas, gros bug des deux cotés, excel bloque et finit par planter

Quelqu'un aurait il une autre solution?

Merci d'avance

David
 

Dranreb

XLDnaute Barbatruc
Re : refuser l'ouverture d'un classeur deja ouvert

Bonjour.

Oui, bien sûr, juste un classeur modèle renseigné de quelques lignes. Ah il y a deux sortes de choses dans votre classeur central ?
Quelle est la différence entre une donnée commande et une donnée facturation ? Elles sont identifiées par quelque chose ?
Les autres classeurs ce sont juste des UserForm pour envoyer les données j'espère ?

Edit: J'imagine une plage mise en forme de tableau avec des colonnes: Heure cmd, N° table, Montant calculé, Montant réglé, Codes et nombres des plats, c'est ça ?
Il va aussi falloir un tableau de la carte je suppose, qui devra figurer dans tous les classeurs. Enfin il pourra aussi être fourni aux classeurs de prises de commandes. Il y aura donc deux fichiers textes, un pour la carte: Code, Désignation, Prix, et l'autre pour les commandes prises aux tables.
Et la différence entre la donnée facturation et la commande c'est qu'il n'y a pas encore de montant réglé dans la seconde ?
 
Dernière édition:

David590

XLDnaute Occasionnel
Re : refuser l'ouverture d'un classeur deja ouvert

voila je vais essayé d’être plus concret dans ma demande avec les classeurs exemple

Dites moi si c'est réalisable,
 

Pièces jointes

  • Classeur1.xlsm
    188.7 KB · Affichages: 49
  • Central.xlsm
    145 KB · Affichages: 38
  • Classeur1.xlsm
    188.7 KB · Affichages: 44

David590

XLDnaute Occasionnel
Re : refuser l'ouverture d'un classeur deja ouvert

Je n'avais pas vu votre dernier message

Les données de facturation sont le montant des especes, des CB, cheque, ticket resto avec le numero (code barre), offerts, remise, tva 10%, tva 20..

En fait la commande reviens du classeur centrale pour que je puisse la facturer, et ensuite les données de facturation repartent sur le classeur centrale
c’était juste pour avoir toutes les données sur le classeur central pour faire la caisse en fin de journée, mais ca n'est pas indispensable, je peux les laisser sur le chaque pc

Ce qui est important c'est surtout l'envoi des commandes des classeurs satellites vers le classeur central
un visuel du classeur central sur les classeurs satellites
et le retour ensuite d'une commande choisie sur classeur central vers les classeurs satellite

mais je pense que le classeur exemple explique bien ceci
 

Dranreb

XLDnaute Barbatruc
Re : refuser l'ouverture d'un classeur deja ouvert

Je pense qu'il vaudrait mieux que les données soient dans l'autre sens, quitte à ce que ça finisse à droite par un nombre indéterminé de paires de colonnes Nombre|CodePlat.
Le Classeur1 devrait à mon avis juste travailler avec un UserForm, sans données enregistrées.
À part peut être la carte, s'il est appelé à assister la prise de commandes sur des matériels genre tablette…
Manque la carte dans le classeur central.
Devriez vous renseigner sur les possibilités techniques de communication à 50m sans fil entre tablette et un ordi central.
Ça remettrait tout en question si les serveuses pouvaient dialoguer en permanence avec le classeur central.
Mais c'est sûr, il y a de quoi faire.
En ligne 5 (qui deviendra une colonne ?) c'est l'addition ou le montant réglé ?
 
Dernière édition:

David590

XLDnaute Occasionnel
Re : refuser l'ouverture d'un classeur deja ouvert

Oui tous est sur écran tactile
Pourquoi la carte doit être sur le classeur central?

Refaire tous le classeur en userform, je suis pas sur d'y arrivé, les codes que j'utilise font que copier des cellules vers d'autres cellules, avec des userform ca me parait plus complexe, ca doit demandé beaucoup plus de connaissance, je vais essayé de vous envoyé mon classeur autrement que vous puissiez voir de quoi ça a l'air

Sur la ligne 5 c'est l'addition
 

Dranreb

XLDnaute Barbatruc
Re : refuser l'ouverture d'un classeur deja ouvert

Pour pouvoir en envoyer une copie aux tablettes à fin d'assistance à la prise de commande devant les clients, si possible, et surtout pour établir l'addition automatiquement.
Chaque mode de cuisson désiré devrait faire l'objet d'un plat différent dans la représentation informatique de la carte, je crois.
Le plus urgent c'est de commencer par dessiner l'UserForm. Ou même d'abord de faire un inventaire conceptuel des contrôles qu'il devra contenir. Il devra comporter un jeu de contrôles d'identification de la commande à créer ou modifier, Heure, N°Table, une ListBox ou une ListView pour les plats, enfin de quoi ajouter, modifier, supprimer un plat de cette liste, enfin le montant de l'addition. On pourra aussi penser à leur intention à gérer la charge des cuisiniers. La carte pourra donc intégrer des temps de préparation, pour 1 exemplaire et pour chaque exemplaire supplémentaire. Et pour répondre aux questions des clients, une description sommaire de la recette.
 

David590

XLDnaute Occasionnel
Re : refuser l'ouverture d'un classeur deja ouvert

J'ai dis restaurant pour ne pas rentrer dans des détails qui n’était semblait pas utile à ce moment la, mais il s'agit plutôt de pizzeria à emporter, les commandes se font à 95% par téléphone, le client vient chercher sa commande à une heure précise, pas de livraison
Pas de commande prise avec une tablette à table mais elles sont prisent quand même sur des écrans tactiles

J'ai transféré mes classeurs sur le serveur de mon site web pour que vous puissiez les voirs

www.donpizzaiolo.com/Caisse/caisse.xlsm

www.donpizzaiolo.com/Caisse/CEA&Journée.xlsm

Pour que le classeur central (CEA&Journée.xlsm) fonctionne, il faut le placer dans un dossier appelé caisse dans le lecteur C
C:\Caisse\CEA&Journée
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : refuser l'ouverture d'un classeur deja ouvert

Je ne comprends plus. Sur les tactiles le lecteur C ne correspond-il pas un un support interne de cet élément, plutôt qu'à un lecteur pouvant communiquer avec un autre ordi ? C'est le chemin du dossier réseau …\Communication qui est important, pas celui d'implantation des classeurs.
 

David590

XLDnaute Occasionnel
Re : refuser l'ouverture d'un classeur deja ouvert

Oui tout a fait, mais j'ai changer le chemin pour que vous puissiez l'utiliser en interne mais normalement le classeur commun est stocké sur une freebox, et les classeurs satellites ouvre et ferme le classeur commun en utilisant \\FREEBOX\Disque dur\Caisse\CEA&Journée

donc la au lieu \\FREEBOX\Disque dur\Caisse\CEA&Journée
le chemin est C:\Caisse\CEA&Journée

Pour être clair c'est de cette façon que je l'utilise actuellement, et c'est juste pour vous montrer afin que vous puissiez comprendre mes besoins

par contre si j'ai bien compris, vous me conseillez de le modifier et d'utilisé un dossier communication sur \\FREEBOX... ou tout les classeurs seront dedans?
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : refuser l'ouverture d'un classeur deja ouvert

Il faut faire des essais. Je ne sache pas que ChDir et ChDrive supportent des chemins commençant par "\\" mais si tous les fichiers sont sur le même dossier on n'en a peut être plus besoin, à condition de ne pas ouvrir un autre fichier ailleurs, ce qui change le lecteur et le dossier courants. Sinon il y a une API windows
VB:
Private Declare Function SetCurrentDirectoryA Lib "kernel32" (ByVal lpPathName As String) As Long
 
Dernière édition:

David590

XLDnaute Occasionnel
Re : refuser l'ouverture d'un classeur deja ouvert

J'avais déjà utilisé tous mes classeurs dans le même dossier,
j'avais caisse1 , caisse2, et le classeur central, le tous stocké sur le pc1

le classeur central et caisse1 était ouvert sur le pc1 et caisse 2 ouvert sur le pc2
mais le pc2 était quand même vraiment plus lent dans les exécutions des taches..
mais on peut toujours réessayé, a l’époque mon classeur était encore plus lourd qu'aujourd'hui
 

Dranreb

XLDnaute Barbatruc
Re : refuser l'ouverture d'un classeur deja ouvert

Bon voici un classeur avec partout des modèles de codes appelant les procédures de communication.
 

Pièces jointes

  • CentraDavid590.xlsm
    24.6 KB · Affichages: 20
  • CentraDavid590.xlsm
    24.6 KB · Affichages: 20

David590

XLDnaute Occasionnel
Re : refuser l'ouverture d'un classeur deja ouvert

Desolé mais je n'arrive vraiment à rien, c'est d'un autre niveau

moi je connais des codes basic du genre

Code:
If Not Feuil3.Range("E8") = "" Then
    Workbooks(ClasseurCaisse).Activate
    UserForm6.Show
    Feuil3.Range("E6") = CDbl(Feuil3.Range("E6"))
Else
    Feuil3.Range("E8") = Time
    Feuil4.Range("AB19") = Feuil4.Range("AB19") + 1

c'est pour ca qu'avec excel copier cellule a5 vers b6 de la feuil3 +2 ... ça reste accessible pour les débutants


par contre la c'est peut etre du vba aussi mais pour moi c'est du vba crypté lol

Code:
      Ls = Ls + 1
      If Left$(Te(C), 1) = """" Then
         Ts(Ls, C + 1) = Replace$(Mid$(Te(C), 2, Len(Te(C)) - 1), """""", """")
      ElseIf IsNumeric(Te(C)) = "" Then      Ls = Ls + 1
      If Left$(Te(C), 1) = """" Then
         Ts(Ls, C + 1) = Replace$(Mid$(Te(C), 2, Len(Te(C)) - 1), """""", """")
      ElseIf IsNumeric(Te(C)) = "" Then

C'est pas manque de motivation parce que j'ai bientot passé ma journée à chercher, mais bon je me fait pas d'illusion y'a les pros du vba et les pro de la pizza :D
 

Discussions similaires

Haut Bas