Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2497 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°2199466
mielanie
Posté le 05-08-2013 à 20:45:56  profilanswer
 

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

mood
Publicité
Posté le 05-08-2013 à 20:45:56  profilanswer
 

n°2199634
mielanie
Posté le 07-08-2013 à 17:19:31  profilanswer
 

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

n°2199647
dreameddea​th
Posté le 07-08-2013 à 19:05:46  profilanswer
 

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

n°2199666
mielanie
Posté le 07-08-2013 à 20:55:49  profilanswer
 

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
n°2202321
mielanie
Posté le 09-09-2013 à 16:50:53  profilanswer
 

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

n°2205807
mielanie
Posté le 07-10-2013 à 19:43:54  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

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

 

Sujets relatifs
[SQL/ACCESS] Requête Jointure + imbrication?Macro VBA pour copier/coller d'EXCEL vers fichier txt
Fonction VBA/Excel : récupérer les données d'un classeurUserform ou module pour choisir des cellules à ouvrir
compilation code open sourceVBA Excel 2010: Lancer un fichier .bat / copier TOUT contenu d'1 .xtx
code php de convertisseur vers pdfrecuperer code retour jcl lance par rexx puis poursuivre
Code pour créer un raccourciRécupération code retour sql
Plus de sujets relatifs à : Access plante à l'exécution d'un module code VBA


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR