IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Multiple utilisateur - Message : "le fichier est verrouillé pour modification"


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 81
    Par défaut Multiple utilisateur - Message : "le fichier est verrouillé pour modification"
    Bonjour,

    Dans le code suivant, je lis un workbook avec GetObject ensuite je le ferme avec Workbook.Close et lui assigne la variable Nothing.

    Pourtant, lorsqu'un deuxième compte utilisateur veut utiliser la fonction à partir d'un autre PC (dans le cadre de mon travail) il y a toujours le message "le fichier ParamTauxPrime.xlsx est verouillé pour modification... voulez vous l'ouvrir en lecture seule ou notifier...". Le message s'affiche une seule fois et ensuite pas de problème pour utiliser la fonction pour cet utilisateur. Quelle est la meilleure manière pour que ce message cesse d'être affiché.

    Merci,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    Function calculPrime(annee, choixLimite, cotRisque) As Double
     
    Application.Volatile
     
    Dim borneInferieure As Double
    Dim borneSuperieure As Double
    Dim myRangeName As String
    Dim nbRows As Integer
    Dim txPrimeInferieur
    Dim txPrimeSuperieur
    Dim i As Integer
     
    Dim wbk As Workbook
     
    Set wbk = GetObject("L:\CSST\Outils\Addins\Parametres\ParamTauxPrime.xlsx")
     
    myRangeName = "Taux" & annee
     
     
    borneInferieure = -1
     
    i = 1
     
    Set myRange = wbk.Worksheets("ParamTaux").Range(myRangeName)
     
    nbRows = myRange.Rows.Count
     
     Select Case choixLimite
        Case Is = 150
           colonneChoix = 2
        Case Is = 200
           colonneChoix = 3
        Case Is = 250
           colonneChoix = 4
        Case Is = 300
           colonneChoix = 5
        Case Is = 400
           colonneChoix = 6
        Case Is = 500
           colonneChoix = 7
        Case Is = 600
           colonneChoix = 8
        Case Is = 700
           colonneChoix = 9
        Case Is = 800
           colonneChoix = 10
        Case Is = 900
           colonneChoix = 11
        End Select
     
    Application.ScreenUpdating = False
     
    While borneInferieure < 0
     
        If cotRisque < myRange.Cells(i, 1).Value Then
     
            borneInferieure = 0
            borneSuperieure = myRange.Cells(i, 1).Value
     
            calculPrime = Round(myRange(i, colonneChoix), 4)
     
        End If
     
        If cotRisque >= myRange.Cells(nbRows, 1).Value Then
     
            borneInferieure = myRange.Cells(nbRows, 1).Value
            borneSuperieure = myRange.Cells(nbRows, 1).Value
     
            calculPrime = Round(myRange(nbRows, colonneChoix), 4)
     
        End If
     
        If cotRisque >= myRange.Cells(i, 1).Value And cotRisque < myRange.Cells(i + 1, 1).Value Then
     
            borneInferieure = myRange.Cells(i, 1).Value
            borneSuperieure = myRange.Cells(i + 1, 1).Value
     
            txPrimeInferieur = myRange(i, colonneChoix)
            txPrimeSuperieur = myRange(i + 1, colonneChoix)
     
            calculPrime = Round(txPrimeInferieur - ((cotRisque - borneInferieure) * (txPrimeInferieur - txPrimeSuperieur)) / (borneSuperieure - borneInferieure), 4)
     
        End If
     
        i = i + 1
     
    Wend
     
     
    wbk.Close
     
    Set wbk = Nothing
     
    End Function

  2. #2
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 345
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Application.DisplayAlerts = False
    Set wbk = GetObject("L:\CSST\Outils\Addins\Parametres\ParamTauxPrime.xlsx")
    Application.DisplayAlerts = True
    Cordialement

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 81
    Par défaut
    Merci pour ta réponse.

    Je viens de tester avec le code suivant et j'obtiens le même résultat. Pourtant, j'étais certain qu'il s'agissait de la solution...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    Function calculPrime(annee, choixLimite, cotRisque) As Double
     
    Dim borneInferieure As Double
    Dim borneSuperieure As Double
    Dim myRangeName As String
    Dim nbRows As Integer
    Dim txPrimeInferieur
    Dim txPrimeSuperieur
    Dim i As Integer
     
    Dim wbk As Workbook
     
    Application.Volatile
     
    Application.DisplayAlerts = False
     
    Set wbk = GetObject("L:\CSST\Outils\Addins\Parametres\ParamTauxPrime.xlsx")
     
    myRangeName = "Taux" & annee
     
    borneInferieure = -1
     
    i = 1
     
    Set myRange = wbk.Worksheets("ParamTaux").Range(myRangeName)
     
    nbRows = myRange.Rows.Count
     
     Select Case choixLimite
        Case Is = 150
           colonneChoix = 2
        Case Is = 200
           colonneChoix = 3
        Case Is = 250
           colonneChoix = 4
        Case Is = 300
           colonneChoix = 5
        Case Is = 400
           colonneChoix = 6
        Case Is = 500
           colonneChoix = 7
        Case Is = 600
           colonneChoix = 8
        Case Is = 700
           colonneChoix = 9
        Case Is = 800
           colonneChoix = 10
        Case Is = 900
           colonneChoix = 11
        End Select
     
    Application.ScreenUpdating = False
     
    While borneInferieure < 0
     
        If cotRisque < myRange.Cells(i, 1).Value Then
     
            borneInferieure = 0
            borneSuperieure = myRange.Cells(i, 1).Value
     
            calculPrime = Round(myRange(i, colonneChoix), 4)
     
        End If
     
        If cotRisque >= myRange.Cells(nbRows, 1).Value Then
     
            borneInferieure = myRange.Cells(nbRows, 1).Value
            borneSuperieure = myRange.Cells(nbRows, 1).Value
     
            calculPrime = Round(myRange(nbRows, colonneChoix), 4)
     
        End If
     
        If cotRisque >= myRange.Cells(i, 1).Value And cotRisque < myRange.Cells(i + 1, 1).Value Then
     
            borneInferieure = myRange.Cells(i, 1).Value
            borneSuperieure = myRange.Cells(i + 1, 1).Value
     
            txPrimeInferieur = myRange(i, colonneChoix)
            txPrimeSuperieur = myRange(i + 1, colonneChoix)
     
            calculPrime = Round(txPrimeInferieur - ((cotRisque - borneInferieure) * (txPrimeInferieur - txPrimeSuperieur)) / (borneSuperieure - borneInferieure), 4)
     
        End If
     
        i = i + 1
     
    Wend
     
    wbk.Close
     
    Set wbk = Nothing
     
    Application.DisplayAlerts = True
     
    End Function

  4. #4
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut DoEvents?
    Bonjour,

    Il s'agit peut-être de cela (ou pas du tout ;-)) :
    Lorsque votre code génère un objet géré par un appel à votre système d'exploitation, il faut que cet objet soit totalement disponible pour pouvoir s'exécuter correctement.
    Pour cela, vous pouvez, peut-être, rendre la main au système d'exploitation afin qu'il traite sa file d'attente.
    Deux DoEvents peuvent, peut être, résoudre votre problème :
    Le premier comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim wbk As Workbook
    Application.Volatile
    Application.DisplayAlerts = False
    DoEvents
    Set wbk = GetObject("L:\CSST\Outils\Addins\Parametres\ParamTauxPrime.xlsx")
    Et le second après le Set ... = Nothing :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set wbk = Nothing
    DoEvents
    Application.DisplayAlerts = True

Discussions similaires

  1. Réponses: 14
    Dernier message: 28/08/2015, 16h29
  2. [XL-2010] Msg inopportun "Le fichier est verrouillé pour modification"
    Par MarcelG dans le forum Conception
    Réponses: 2
    Dernier message: 12/09/2014, 19h15
  3. Réponses: 6
    Dernier message: 17/05/2010, 11h50
  4. Fichier verrouillé pour modification par
    Par pas85 dans le forum Windows Serveur
    Réponses: 3
    Dernier message: 02/03/2009, 09h51
  5. Réponses: 2
    Dernier message: 31/10/2007, 10h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo