Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

pb verrouillage fichier

2 réponses
Avatar
Talliac
Bonjour,

J'exécute une macro à partir d'excel.
Cette macro balaye les enregistrements d'une table access ( histovlabsentes
) d'une BDD ( vl_absentes.mdb ) et recopie le contenu des enregistrements
dans un fichier excel.
Or la macro plante régulièrement ( mais de façon aléatoire ) à la ligne
suivante :
Set dbVlAbsentes =
OpenDatabase("P:\Commun_RPC\REFERENTIEL\BASE_HISTO\absence
vl\vl_absentes.mdb")
J'obtiens le message suivant :
erreur d'exécution '3050' impossible de vérouiller le fichier
Pour info ma BDD comporte, hormis la table déjà mentionnée, une table liée
d'une BDD externe multiutilisateurs oracle, mais à laquelle je ne fais pas
appel dans mon code.
Faut il que je joue sur les paramètres access outils / options / avancé :
mode d'ouverture par défaut
vérouillage par défaut
ou que je modifie mon code ?

Merci.

Une partie de mon code ci dessous :

Sub ajouttrous_par_access()


Dim dbVlAbsentes As Database
Dim dtHistoVlAbsentes As Recordset
Dim dtRapportAbsenceVl As Recordset
Dim dDate As Date
Dim nbLignesJour As Integer
Dim ligneJour As Integer
Dim dtrequete As String
Dim dtrequeteComplet As String
Dim rq As Recordset
Dim rqComplet As Recordset
Dim codport As String
Dim l As Integer

Application.ScreenUpdating = False


ligne où ça plante :
Set dbVlAbsentes =
OpenDatabase("P:\Commun_RPC\REFERENTIEL\BASE_HISTO\absence
vl\vl_absentes.mdb")

Set dtHistoVlAbsentes = dbVlAbsentes.OpenRecordset("histovlabsentes",
dbOpenDynaset)
Set dtRapportAbsenceVl = dbVlAbsentes.OpenRecordset("rapport_absence_vl",
dbOpenDynaset)

Do Until dtHistoVlAbsentes.EOF

codport = dtHistoVlAbsentes![codehisto]
dDate = dtHistoVlAbsentes![dateprochainevl]
dDate = Format(dDate, "mm/dd/yyyy")
dtrequeteComplet = " Select codehisto,codebip,
libellé,périodicité,datemax,dateprochainevl,dateprochaineestimative,délaimoyenobservé,datethéoriquedemiseàdisposition,valorisateur,commentaires,fermés
from histovlabsentes where codehisto ='" & codport & "' and dateprochainevl =
#" & dDate & "#"
dtrequete = " Select codehisto,dateprochainevl from rapport_absence_vl where
codehisto ='" & codport & "' and dateprochainevl = #" & dDate & "#"
Set rq = dbVlAbsentes.OpenRecordset(dtrequete, dbOpenSnapshot)
If rq.EOF = True Then
Set rqComplet = dbVlAbsentes.OpenRecordset(dtrequeteComplet,
dbOpenSnapshot)
l = 1
Do Until Workbooks("rapport absence
vl.xls").Sheets("rapport").Cells(l, 1).Value = Empty
l = l + 1
Loop


Workbooks("rapport absence vl.xls").Sheets("rapport").Cells(l,
1).CopyFromRecordset rqComplet
Workbooks("rapport absence vl.xls").Sheets("rapport").Cells(l,
1).Resize(1, 12).Font.ColorIndex = 3




End If
dtHistoVlAbsentes.MoveNext

Loop

2 réponses

Avatar
3stone
Salut,


Talliac wrote:
J'exécute une macro à partir d'excel.




La code est dans Access ou dans Excel ?


Cette macro balaye les enregistrements d'une table access (
histovlabsentes
) d'une BDD ( vl_absentes.mdb ) et recopie le contenu des
enregistrements
dans un fichier excel.
Or la macro plante régulièrement ( mais de façon aléatoire ) à la
ligne
suivante :
Set dbVlAbsentes > OpenDatabase("P:Commun_RPCREFERENTIELBASE_HISTOabsence
vlvl_absentes.mdb")
J'obtiens le message suivant :
erreur d'exécution '3050' impossible de vérouiller le fichier
Pour info ma BDD comporte, hormis la table déjà mentionnée, une table
liée
d'une BDD externe multiutilisateurs oracle, mais à laquelle je ne
fais pas
appel dans mon code.
Faut il que je joue sur les paramètres access outils / options /
avancé :
mode d'ouverture par défaut
vérouillage par défaut
ou que je modifie mon code ?

Merci.

Une partie de mon code ci dessous :

Sub ajouttrous_par_access()


Dim dbVlAbsentes As Database
Dim dtHistoVlAbsentes As Recordset
Dim dtRapportAbsenceVl As Recordset




Préférable :

Dim dbVlAbsentes As DAO.Database
Dim dtHistoVlAbsentes As DAO.Recordset
Dim dtRapportAbsenceVl As DAO.Recordset




Dim dDate As Date
Dim nbLignesJour As Integer
Dim ligneJour As Integer
Dim dtrequete As String
Dim dtrequeteComplet As String
Dim rq As Recordset
Dim rqComplet As Recordset
Dim codport As String
Dim l As Integer

Application.ScreenUpdating = False


ligne où ça plante :
Set dbVlAbsentes > OpenDatabase("P:Commun_RPCREFERENTIELBASE_HISTOabsence
vlvl_absentes.mdb")

Set dtHistoVlAbsentes = dbVlAbsentes.OpenRecordset("histovlabsentes",
dbOpenDynaset)
Set dtRapportAbsenceVl > dbVlAbsentes.OpenRecordset("rapport_absence_vl",
dbOpenDynaset)

Do Until dtHistoVlAbsentes.EOF

codport = dtHistoVlAbsentes![codehisto]
dDate = dtHistoVlAbsentes![dateprochainevl]
dDate = Format(dDate, "mm/dd/yyyy")
dtrequeteComplet = " Select codehisto,codebip,
libellé,périodicité,datemax,dateprochainevl,dateprochaineestimative,délaimoyenobservé,datethéoriquedemiseàdisposition,valorisateur,commentaires,fermés
from histovlabsentes where codehisto ='" & codport & "' and
dateprochainevl = #" & dDate & "#"




Présenter les dates au format US :

dateprochainevl =" & format(dDate, "#mm-dd-yyyy#")



dtrequete = " Select codehisto,dateprochainevl from
rapport_absence_vl where
codehisto ='" & codport & "' and dateprochainevl = #" & dDate & "#"




idem :

and dateprochainevl =" & Format(dDate, "#mm-dd-yyyy#")






Set rq = dbVlAbsentes.OpenRecordset(dtrequete, dbOpenSnapshot)
If rq.EOF = True Then
Set rqComplet = dbVlAbsentes.OpenRecordset(dtrequeteComplet,
dbOpenSnapshot)
l = 1
Do Until Workbooks("rapport absence
vl.xls").Sheets("rapport").Cells(l, 1).Value = Empty
l = l + 1
Loop


Workbooks("rapport absence
vl.xls").Sheets("rapport").Cells(l,
1).CopyFromRecordset rqComplet
Workbooks("rapport absence
vl.xls").Sheets("rapport").Cells(l,
1).Resize(1, 12).Font.ColorIndex = 3




End If
dtHistoVlAbsentes.MoveNext




Tu SET la variable en boucle, mais tu ne la libère pas...

Set rq = Nothing



Loop




et pour finir :

Set dtRapportAbsenceVl = Nothing


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
Talliac
Bonsoir,

Mon code est dans excel, je lance la macro d'une session excel.

Merci.


"3stone" a écrit :

Salut,


Talliac wrote:
> J'exécute une macro à partir d'excel.


La code est dans Access ou dans Excel ?


> Cette macro balaye les enregistrements d'une table access (
> histovlabsentes
> ) d'une BDD ( vl_absentes.mdb ) et recopie le contenu des
> enregistrements
> dans un fichier excel.
> Or la macro plante régulièrement ( mais de façon aléatoire ) à la
> ligne
> suivante :
> Set dbVlAbsentes > > OpenDatabase("P:Commun_RPCREFERENTIELBASE_HISTOabsence
> vlvl_absentes.mdb")
> J'obtiens le message suivant :
> erreur d'exécution '3050' impossible de vérouiller le fichier
> Pour info ma BDD comporte, hormis la table déjà mentionnée, une table
> liée
> d'une BDD externe multiutilisateurs oracle, mais à laquelle je ne
> fais pas
> appel dans mon code.
> Faut il que je joue sur les paramètres access outils / options /
> avancé :
> mode d'ouverture par défaut
> vérouillage par défaut
> ou que je modifie mon code ?
>
> Merci.
>
> Une partie de mon code ci dessous :
>
> Sub ajouttrous_par_access()
>
>
> Dim dbVlAbsentes As Database
> Dim dtHistoVlAbsentes As Recordset
> Dim dtRapportAbsenceVl As Recordset


Préférable :

Dim dbVlAbsentes As DAO.Database
Dim dtHistoVlAbsentes As DAO.Recordset
Dim dtRapportAbsenceVl As DAO.Recordset




> Dim dDate As Date
> Dim nbLignesJour As Integer
> Dim ligneJour As Integer
> Dim dtrequete As String
> Dim dtrequeteComplet As String
> Dim rq As Recordset
> Dim rqComplet As Recordset
> Dim codport As String
> Dim l As Integer
>
> Application.ScreenUpdating = False
>
>
> ligne où ça plante :
> Set dbVlAbsentes > > OpenDatabase("P:Commun_RPCREFERENTIELBASE_HISTOabsence
> vlvl_absentes.mdb")
>
> Set dtHistoVlAbsentes = dbVlAbsentes.OpenRecordset("histovlabsentes",
> dbOpenDynaset)
> Set dtRapportAbsenceVl > > dbVlAbsentes.OpenRecordset("rapport_absence_vl",
> dbOpenDynaset)
>
> Do Until dtHistoVlAbsentes.EOF
>
> codport = dtHistoVlAbsentes![codehisto]
> dDate = dtHistoVlAbsentes![dateprochainevl]
> dDate = Format(dDate, "mm/dd/yyyy")
> dtrequeteComplet = " Select codehisto,codebip,
> libellé,périodicité,datemax,dateprochainevl,dateprochaineestimative,délaimoyenobservé,datethéoriquedemiseàdisposition,valorisateur,commentaires,fermés
> from histovlabsentes where codehisto ='" & codport & "' and
> dateprochainevl = #" & dDate & "#"


Présenter les dates au format US :

dateprochainevl =" & format(dDate, "#mm-dd-yyyy#")



> dtrequete = " Select codehisto,dateprochainevl from
> rapport_absence_vl where
> codehisto ='" & codport & "' and dateprochainevl = #" & dDate & "#"


idem :

and dateprochainevl =" & Format(dDate, "#mm-dd-yyyy#")






> Set rq = dbVlAbsentes.OpenRecordset(dtrequete, dbOpenSnapshot)
> If rq.EOF = True Then
> Set rqComplet = dbVlAbsentes.OpenRecordset(dtrequeteComplet,
> dbOpenSnapshot)
> l = 1
> Do Until Workbooks("rapport absence
> vl.xls").Sheets("rapport").Cells(l, 1).Value = Empty
> l = l + 1
> Loop
>
>
> Workbooks("rapport absence
> vl.xls").Sheets("rapport").Cells(l,
> 1).CopyFromRecordset rqComplet
> Workbooks("rapport absence
> vl.xls").Sheets("rapport").Cells(l,
> 1).Resize(1, 12).Font.ColorIndex = 3
>
>
>
>
> End If
> dtHistoVlAbsentes.MoveNext


Tu SET la variable en boucle, mais tu ne la libère pas...

Set rq = Nothing



> Loop


et pour finir :

Set dtRapportAbsenceVl = Nothing


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)

.