1. Ce site utilise des "témoins de connexion" (cookies) conformes aux textes de l'Union Européenne. Continuer à naviguer sur nos pages vaut acceptation de notre règlement en la matière. En savoir plus.

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

Discussion dans 'Forum Excel' démarrée par kisscool67, 6 Décembre 2018.

  1. kisscool67

    kisscool67 XLDnaute Nouveau

    Inscrit depuis le :
    5 Juin 2015
    Messages :
    9
    "J'aime" reçus :
    0
    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+
     
  2. Chargement...

    Discussions similaires - VBA vérification lecture Forum Date
    XL 2010 VBA Erreur de code sur vérification existence feuille Forum Excel 15 Février 2017
    macro VBA verification de 3 critères Forum Excel 14 Octobre 2016
    Vérification absence caractère spéciaux VBA Forum Excel 6 Juillet 2015
    VBA vérification de l'existance fichier(s) word Forum Excel 7 Février 2013
    Vérification à l'aide de vba Forum Excel 30 Novembre 2012

  3. youky(BJ)

    youky(BJ) XLDnaute Barbatruc

    Inscrit depuis le :
    4 Février 2009
    Messages :
    2504
    "J'aime" reçus :
    122
    Sexe :
    Masculin
    Habite à:
    69 CALUIRE
    Utilise:
    Excel 2016 (PC)
    Bonjour,
    Voici un code que j'ai mis en workbook_Open (donc en ouverture en Thisworkbook)
    Bruno
    Code (Visual Basic):
    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
     
  4. kisscool67

    kisscool67 XLDnaute Nouveau

    Inscrit depuis le :
    5 Juin 2015
    Messages :
    9
    "J'aime" reçus :
    0
    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 !
     
  5. youky(BJ)

    youky(BJ) XLDnaute Barbatruc

    Inscrit depuis le :
    4 Février 2009
    Messages :
    2504
    "J'aime" reçus :
    122
    Sexe :
    Masculin
    Habite à:
    69 CALUIRE
    Utilise:
    Excel 2016 (PC)
    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 (Text):
    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
     
     
  6. kisscool67

    kisscool67 XLDnaute Nouveau

    Inscrit depuis le :
    5 Juin 2015
    Messages :
    9
    "J'aime" reçus :
    0
    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.
     
  7. youky(BJ)

    youky(BJ) XLDnaute Barbatruc

    Inscrit depuis le :
    4 Février 2009
    Messages :
    2504
    "J'aime" reçus :
    122
    Sexe :
    Masculin
    Habite à:
    69 CALUIRE
    Utilise:
    Excel 2016 (PC)
    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
    Code (Visual Basic):
    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
     
  8. youky(BJ)

    youky(BJ) XLDnaute Barbatruc

    Inscrit depuis le :
    4 Février 2009
    Messages :
    2504
    "J'aime" reçus :
    122
    Sexe :
    Masculin
    Habite à:
    69 CALUIRE
    Utilise:
    Excel 2016 (PC)
    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 (Text):
    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
     
  9. kisscool67

    kisscool67 XLDnaute Nouveau

    Inscrit depuis le :
    5 Juin 2015
    Messages :
    9
    "J'aime" reçus :
    0
    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.
     
  10. youky(BJ)

    youky(BJ) XLDnaute Barbatruc

    Inscrit depuis le :
    4 Février 2009
    Messages :
    2504
    "J'aime" reçus :
    122
    Sexe :
    Masculin
    Habite à:
    69 CALUIRE
    Utilise:
    Excel 2016 (PC)
    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
     

Partager cette page