Bd Access, champs liés à la source Excel avec VBA

Bd Access, champs liés à la source Excel avec VBA - VB/VBA/VBS - Programmation

Marsh Posté le 20-06-2013 à 16:13:26    

Bonjour,
Tout d'abord, j'utilise le logiciel Access 2013 et je suis débutante dans la programmation VBA. J'ai déjà eu l'aide d'autres personnes pour composer mon code VBA, mais il me reste des erreurs à corriger.
Mon problème est le suivant :
 
J'ai un fichier Excel dans lequel je retrouve des colonnes de données dont idProjet, No de dossier, Titre des projets, etc.
 
Je me suis construit une base de données Access dans lequel j'ai une table (T_Liste) et un formulaire (F_Liste_Mod). J'ai des champs tels que idProjet (sert de clé qui relie à mon fichier Excel), NO No de dossier, Titre des projets, etc. et des champs plus confidentiels comme le Coût des projets.
 
Nous sommes 4 adjointes travaillant ici qui utilisent le fichier Excel et mettre à jour ce fichier Excel. Or, j'aimerais que les champs du fichier Excel se retranscrivent dans ma base de données Access et qu'il ne me reste dans ma base de données qu'à inscrire que les informations qui doivent rester confidentielles.
 
J’ai alors liée la feuille Excel à ma base de données en faisant ceci : Données externes / Excel / Lier à la source de données en créant une table attachée, car les personnes ici vont continuer de mettre à jour le fichier Excel et je ne veux pas copier-coller le champ en question à chaque saisie de nouveau projet. Mais comment faire pour que mon champ Access aille chercher leur champ Excel dans mon formulaire?
 
Donc, j'ai créé ce code VBA dans un nouveau module que j'exécute via un bouton dans mon formulaire :  
 

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\Liste_projets_Mélanie\F-1-1 Liste des projets_complete_test.xlsxm" ) = True 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.                 .Update
  46.             End With
  47.             .MoveNext
  48.         Loop
  49.     End With
  50.     'If MsgBox(lngCompte & " projet(s) ajouté(s), valider ?", vbYesNo) = vbYes Then
  51.     '    CommitTrans
  52.     'Else
  53.     '    Rollback
  54.     'End If
  55. End Sub
  56. Function FichierDisponible(prmstrFichier) As Boolean
  57.     Dim lngFichier      As Long
  58.     On Error Resume Next
  59.     Open prmstrFichier For Binary Lock Read Write As #lngFichier
  60.     If Err.Number Then
  61.         FichierDisponible = False
  62.     Else
  63.         FichierDisponible = True
  64.         Close #lngFichier
  65.     End If
  66.     On Error GoTo 0
  67. End Function


 
Or, j'ai un message d'erreur qui dit : Erreur d'exécution 94 Utilisation incorrecte de Null. Si je clique sur le bouton Débogage, il m'indique la ligne 30 : lngNuméroProjet = rsFeuille(1 + cstlngDécalage) (qui me pointe le dernier projet de ma liste de 10 projets)
 
Donc, j'aimerais savoir ça veux dire quoi et comment réglé le tout?
 
Je souligne que toutes mes cellules des 10 projets sont remplis au complet...
 
Merci de votre aide si précieuse!!

Reply

Marsh Posté le 20-06-2013 à 16:13:26   

Reply

Marsh Posté le 20-06-2013 à 16:27:42    

 
            Bonjour,

mielanie a écrit :

Erreur d'exécution 94 Utilisation incorrecte de Null. Si je clique sur le bouton Débogage, il m'indique la ligne 30 : lngNuméroProjet = rsFeuille(1 + cstlngDécalage) (qui me pointe le dernier projet de ma liste de 10 projets)


            Combien vaut cstlngDécalage ?            Ligne n°5 …
 
            Car chez moi, 1 - 1 = zéro            donc null n'est pas faux, donc le message d'erreur est tout à fait correct,
 
            donc cela pointe sur rien du tout ‼   :sarcastic:            La logique est donc à revoir …
 

Reply

Marsh Posté le 20-06-2013 à 16:40:36    

En fait, je ne sais pas combien vaut cstlngDécalage... moi aussi 1 - 1 = zéro, mais c'est la personne qui m'a aidé à composer le code qui a mis ça et il m'a dit quand je lui ai demandé c'était pourquoi : "la constante cstlngDécalage sert à recaler le décalage entre ta feuille dont le première colonne est 1 et le recordset rsFeuille dont la première colonne est 0."
 
En fait, je devrais peux-être enlever ça du code mais pour le remplacer par quoi? Avez-vous une idée de la composition du code que je devrais écrire?

Reply

Marsh Posté le 20-06-2013 à 16:55:52    

 
            1 ne veut pas dire dernier projet, non ?
 
            Désolé, voir avec la personne responsable du code ou attendre qu'un spécialiste Access intervienne …
 

Reply

Marsh Posté le 20-06-2013 à 16:59:41    

Je ne sais pas trop malheureusement...  
 
Y'a t'il un spécialiste Access VBA svp?!?

Reply

Sujets relatifs:

Leave a Replay

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