Access plante à l'exécution d'un module code VBA

Access plante à l'exécution d'un module code VBA - VB/VBA/VBS - Programmation

Marsh Posté le 05-08-2013 à 20:45:56    

Bonjour,  
 
j'ai Access 2013 sous Windows 7. Lorsque j'exécute le module 1 de ma base de données, Access plante avec un message d'erreur qui dit Access doit fermer... Or, si la feuille Excel dans lequel le code va chercher des données est ouverte, Access ne plante pas, mais par conséquent n'exécute pas le reste du code; ce qui est normal due à la structure de celui-ci. Je crois donc qu'il y a de quoi dans le code qui fait planter (car j'ai réinstaller Access et essayé la base sur d'autres ordi et ça plante aussi). Pouvez-vous m'aider, je n'arrive pas à pointer le problème. Merci!!  
 
Voici le code :  

Code :
  1. Option Compare Database
  2. Option Explicit
  3. Sub ImportProjets()
  4.     Const cstlngDécalage    As Long = -1
  5.     Dim rsFeuille           As Recordset
  6.     Dim rsProjet            As Recordset
  7.     Dim lngNuméroProjet     As Long
  8.     Dim lngCompte           As Long
  9.     Dim lngCompteLigne      As Long
  10.     If FichierDisponible("\\SRVSID\Gcs\ISO 9001\F-1-1 Liste des projets_complete.xlsm" ) = False Then
  11.         Beep
  12.         MsgBox "La feuille est ouverte par au moins un utilisateur"
  13.         Exit Sub
  14.     End If
  15.    
  16.     With CurrentDb
  17.         Set rsFeuille = .OpenRecordset("Feuil2" )
  18.         Set rsProjet = .OpenRecordset("T_Liste" )
  19.     End With
  20.     rsProjet.Index = "idProjet"
  21.     BeginTrans
  22.     With rsFeuille
  23.         Do Until .EOF
  24.             lngCompteLigne = lngCompteLigne + 1
  25.             lngNuméroProjet = rsFeuille(1 + cstlngDécalage)
  26.             With rsProjet
  27.                 .Seek "=", lngNuméroProjet
  28.                 If .NoMatch = True Then
  29.                     lngCompte = lngCompte + 1
  30.                     .AddNew
  31.                     !idProjet = lngNuméroProjet
  32.                 Else
  33.                     .Edit
  34.                 End If
  35.                 ![NO DE DOSSIER] = rsFeuille(2 + cstlngDécalage)
  36.                 !CD = rsFeuille(3 + cstlngDécalage)
  37.                 ![TITRE DES PROJETS] = rsFeuille(4 + cstlngDécalage)
  38.                 ![TITRE ABRÉGÉ DES PROJETS] = rsFeuille(5 + cstlngDécalage)
  39.                 ![DATE D'OUVERTURE] = rsFeuille(6 + cstlngDécalage)
  40.                 !MotCle01 = rsFeuille(7 + cstlngDécalage)
  41.                 !MotCle02 = rsFeuille(8 + cstlngDécalage)
  42.                 !TitreCourt = rsFeuille(9 + cstlngDécalage)
  43.                 !Discipline = rsFeuille(10 + cstlngDécalage)
  44.                 !VilleRealisation = rsFeuille(11 + cstlngDécalage)
  45.                 !Mandat = rsFeuille(12 + cstlngDécalage)
  46.                 .Update
  47.             End With
  48.             .MoveNext
  49.         Loop
  50.     End With
  51.    If MsgBox(lngCompte & " nouveau(x) projet(s), les ajouter (Non indiqué, mais peut aussi comprendre des modifications dans les noms)?", vbYesNo) = vbYes Then
  52.        CommitTrans
  53.    Else
  54.        Rollback
  55.    End If
  56. End Sub
  57. Function FichierDisponible(prmstrFichier) As Boolean
  58.     Dim lngFichier      As Long
  59.     On Error Resume Next
  60.     lngFichier = FreeFile
  61.     Open prmstrFichier For Binary Lock Read Write As #lngFichier
  62.     If Err.Number Then
  63.         FichierDisponible = False
  64.     Else
  65.         FichierDisponible = True
  66.         Close #lngFichier
  67.     End If
  68.     On Error GoTo 0
  69. End Function

Reply

Marsh Posté le 05-08-2013 à 20:45:56   

Reply

Marsh Posté le 07-08-2013 à 17:19:31    

Je me demandais si de sortir le rapport d'erreur qui se trouve dans l'observateur d'événement de Windows 7, événement 1000, Application Error, pouvait aider à résoudre le problème. Je fouille sur Internet, mais ne trouve tout de même pas la solution...  Voici donc, si quelqu'un s'y connait :  
 
Nom de l’application défaillante MSACCESS.EXE, version : 15.0.4517.1005, horodatage : 0x51b960eb
Nom du module défaillant : ACECORE.DLL, version : 0.0.0.0, horodatage : 0x51a6f604
Code d’exception : 0xc0000005
Décalage d’erreur : 0x000fdbdf
ID du processus défaillant : 0x136c
Heure de début de l’application défaillante : 0x01ce93800d291767
Chemin d’accès de l’application défaillante : C:\Program Files\Microsoft Office 15\Root\Office15\MSACCESS.EXE
Chemin d’accès du module défaillant: C:\Program Files (x86)\Common Files\Microsoft Shared\Office15\ACECORE.DLL
ID de rapport : 5273386b-ff73-11e2-ba85-14dae9e98850

Reply

Marsh Posté le 07-08-2013 à 19:05:46    

Tu as essayé de faire du Pas à Pas sur au moins une boucle ?
 
ça aiderait à savoir à quelle ligne ça plante si c'est lié à un pb de code (faire une boucle complète en pas à pas)
 
Après je ne connais pas très bien "OpenRecordSet" sur une feuille/fichier excel, mais  :
- comment le .OpenRecordSet("Feuil2" ) peut fonctionner sachant que je ne vois pas où tu as ouvert le fichier excel et en quoi il est rattaché à "CurrentDb"
- le critère ".EOF" est-il suffisant comme critère de fin ? Si c'est pas le cas, il peut passer par des cellules vides et donc amener à des plantes (xlsm/Excel 2007/2010/2013 , c'est 2 millions de lignes de tête)
 
En espérant que ça aide

Reply

Marsh Posté le 07-08-2013 à 20:55:49    

Oui, je viens de le faire. (J'ai placé mon curseur sur chacune des ligne et suis allé au menu Débogage / Exécuter jusqu'au curseur.) Ça plante à la ligne 33.  
 
Pour ce qui est de la "Feuil2" d'Excel, je l'ai attaché en cliquant sur Données externes / Excel / Lier à la source de données en créant une table attachée.
 
Pour ce qui est du critère ".EOF" est-il suffisant comme critère de fin?? Je ne sais pas. C'est pas moi qui a 'inventé' le code, mais je apporté des modifications dessus. Je devrais y mettre quoi? Je suis débutante et je ne sais pas quoi ajouter ou enlever...


Message édité par mielanie le 07-08-2013 à 21:04:48
Reply

Marsh Posté le 09-09-2013 à 16:50:53    

Une idée pour résoudre mon problème svp...?

Reply

Marsh Posté le 07-10-2013 à 19:43:54    

Up!... De l'aide svp...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed