XL 2010 VBA vérification de lecture seul à l'ouverture

kisscool67

XLDnaute Nouveau
Bonjour le forum,

Je suis en train de créer un ptit programme de saisies des frais de déplacement des salariés. Ces saisies seront faites par plusieurs utilisateurs et je bloque sur un ptit point dans ma macro.

J'ai créé un USF qui sera mis à disposition de plusieurs utilisateurs. Les saisies effectuées dans cet USF viendront incrémenter un seul fichier qui servira de base de données pour des interrogations.

Afin de permettre des saisies simultanées j'ai besoin de vérifier que le fichier commun base de données (BDD) ne soit pas en lecture seul au moment d'enregistrer les saisies.

Savez vous comment programmer ça en VBA et où est ce que je dois saisir le code? Dans le fil de la macro au moment de l'ouverture et avant l'écriture des saisies ou dans un module annexe? Ou les deux?

Merci pour le coup de main.

A+
 

youky(BJ)

XLDnaute Barbatruc
Bonjour,
Voici un code que j'ai mis en workbook_Open (donc en ouverture en Thisworkbook)
Bruno
VB:
Private Sub Workbook_Open()
If ActiveWorkbook.ReadOnly = True Then 'on test
MsgBox "Le fichier est en Lecture seule Vous devez l'enregistrer", vbExclamation, "FERMETURE"
ActiveWorkbook.Close SaveChanges:=False 'on ferme
End If
End Sub
 

kisscool67

XLDnaute Nouveau
Merci Bruno pour votre réponse.

La contrainte est que l'USF est composé de très nombreux textbox ou combobox et que je ne veux pas contraindre l'utilisateur à compléter une nouvelle fois tout ces éléments jusqu'à que l'enregistrement soit possible.

Dans l'idéal j'aimerai pouvoir programmer ma macro pour qu'elle réagisse de la façon suivante :
- l'utilisateur complète le USF
- le click sur le CommandButton vérifie si le fichier de destination est disponible (sans l'ouvrir ou avec ouverture du fichier en fonction des possibilités VBA)
si le fichier est disponible en lecture seul, alors la macro réitère l'opération jusqu'à ce que l'écriture et l'enregistrement soit possible.

Est ce que cela est possible?

Merci d'avance !
 

youky(BJ)

XLDnaute Barbatruc
Hello,
Essayer ceci
Modifier le chemfichier= "C:\………………….
Le nom de la macro "test" doit être identique en Sub attente
Le nom de la macro "attente" doit être identique à Application…….("00:00:10"), "attente"
Régler le temps d'attente ici 10 secondes avant de re-tester si plus en lecture seule.
Bruno
Code:
Sub test()
Dim Wb As Workbook
chemfichier = "C:\Users\TOTO\OneDrive\Documents\essai.xls"
Set Wb = GetObject(chemfichier)
If Wb.ReadOnly = True Then 'on test
If MsgBox("Le fichier est en Lecture seule !" & vbCr & _
"Faire nouvelle tentative dans 10 secondes", vbExclamation + vbYesNo, _
"EN ATTENTE") = vbNo Then Exit Sub
Wb.Close SaveChanges:=False 'on le ferme
Application.OnTime Now + TimeValue("00:00:10"), "attente"
Exit Sub
End If
Wb.Close
Workbooks.Open (chemfichier)
'le reste de la macro ici car le fichier est ouvert
End Sub
Sub attente()
test
End Sub
 

kisscool67

XLDnaute Nouveau
Bonjour Bruno,

Merci pour votre réponse, j'ai cependant une question.
Cette dernière macro relance t elle l'ouverture du fichier automatiquement au bout de 10 secondes si elle détecte que le fichier est en lecture seule ou propose t elle seulement à l'utilisateur de re faire une tentative plus tard? Car il ne se passe rien au bout de 10 secondes.
Quoique finalement ca ne soit pas plus embêtant que ça pour moi je peux adapter la situation!!!???

Merci à vous.

Bonne journée.
 

youky(BJ)

XLDnaute Barbatruc
Bonjour,
Je viens de paufiner un peu la macro
La macro ouvre en invisible le fichier et test s'il est en lecture seule et le referme de suite.
Si lecture seule alors Msgbox choix oui non
si bouton oui la macro va se relancer dans 10 seconde aprés avoir cliqué sur oui et re-test
si bouton non on quitte la procédure(sans doute le bouton valider)
si kit n'est pas à true on va direct à workbooks.open
J'ai mis comme si c'était dans le bouton d'un userform
Bruno
VB:
Private Sub CommandButton1_Click()
Dim Wb As Workbook
Dim kit As Boolean
chemfichier = "C:\Users\TOTO\OneDrive\Documents\essai.xls" ' à modifier
Set Wb = GetObject(chemfichier)
If Wb.ReadOnly = True Then kit=True'on test
Wb.Close SaveChanges:=False 'on le ferme
If kit=True Then
If MsgBox("Le fichier est en Lecture seule !" & vbCr & _
"Faire nouvelle tentative dans 10 secondes", vbExclamation + vbYesNo, _
"EN ATTENTE") = vbNo Then Exit Sub
Application.OnTime Now + TimeValue("00:00:10"), "CommandButton1_Click"
Exit Sub
End If

'Si on arrive ici c'est que le fichier n'est pas en lecture seule
Workbooks.Open (chemfichier)'on ouvre le fichier
'le reste de la macro ici car le fichier est ouvert
'copy des textbox dans le fichier
End Sub
 

youky(BJ)

XLDnaute Barbatruc
Re,
Je viens de tester sur un fichier que je viens de faire et OnTime ne fonctionne pas si la macro est ailleurs que dans un module.
Cela risque de compliquer les choses.
voici sans OnTime
Bruno
Code:
Private Sub CommandButton1_Click()
Dim Wb As Workbook
Dim kit As Boolean
debut:
chemfichier = "C:\Users\toto\OneDrive\Documents\essai.xls" ' à modifier
Set Wb = GetObject(chemfichier)
If Wb.ReadOnly = True Then kit = True 'on test
Wb.Close SaveChanges:=False 'on le ferme
If kit = True Then
If MsgBox("Le fichier est en Lecture seule !" & vbCr & _
"Faire une nouvelle tentative !", vbExclamation + vbYesNo, _
"EN ATTENTE") = vbNo Then Exit Sub
kit = False
GoTo debut
Exit Sub
End If
'Si on arrive ici c'est que le fichier n'est pas en lecture seule
Workbooks.Open (chemfichier) 'on ouvre le fichier
'le reste de la macro ici car le fichier est ouvert
'copy des textbox dans le fichier
Unload UserForm1
End Sub
 

kisscool67

XLDnaute Nouveau
Bonsoir Bruno,
Merci pour ces lignes de code. J'ai réussi à adapter votre macro pour arriver a mes fins.
J'ai cependant une question.
Quand j'ai créé ma macro, je l'ai fait tourner a maint et maint reprise sur mon poste sans qu'il y ait le moindre problème. (Excel 2010 sur tous les postes)
Et au final quand j'ai essayé de la faire passer sur un autre pc, elle s'arrêtait sur n'importe quoi du genre i=i+... avec comme message "projet ou bibliothèque introuvable".
Savez vous pourquoi ou comment pallier ce problème ?
Merci a vous.
Bonne soirée.
 

youky(BJ)

XLDnaute Barbatruc
Oui
Je pense a Option Explicit en tête de Module
Ceci indique qu'il faut déclarer toutes les variables.
Chez moi le Option Explicit ne se mets pas suite à ma demande donc je n'ai plus à me soucier des variables.
Donc soit Déclarer toutes les variables ou soit supprimer Option Explicit sur le PC récalcitrant.
Bruno
 

Discussions similaires