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 :
- Option Compare Database
- Option Explicit
- Sub ImportProjets()
- Const cstlngDécalage As Long = -1
- Dim rsFeuille As Recordset
- Dim rsProjet As Recordset
- Dim lngNuméroProjet As Long
- Dim lngCompte As Long
- Dim lngCompteLigne As Long
- If FichierDisponible("\\SRVSID\Gcs\Liste_projets_Mélanie\F-1-1 Liste des projets_complete_test.xlsxm" ) = True Then
- Beep
- MsgBox "La feuille est ouverte par au moins un utilisateur"
- Exit Sub
- End If
-
- With CurrentDb
- Set rsFeuille = .OpenRecordset("Feuil2" )
- Set rsProjet = .OpenRecordset("T_Liste" )
- End With
- rsProjet.Index = "idProjet"
- 'BeginTrans
- With rsFeuille
- Do Until .EOF
- lngCompteLigne = lngCompteLigne + 1
- lngNuméroProjet = rsFeuille(1 + cstlngDécalage)
- With rsProjet
- .Seek "=", lngNuméroProjet
- If .NoMatch = True Then
- lngCompte = lngCompte + 1
- .AddNew
- !idProjet = lngNuméroProjet
- Else
- .Edit
- End If
- ![NO DE DOSSIER] = rsFeuille(2 + cstlngDécalage)
- !CD = rsFeuille(3 + cstlngDécalage)
- ![TITRE DES PROJETS] = rsFeuille(4 + cstlngDécalage)
- ![TITRE ABRÉGÉ DES PROJETS] = rsFeuille(5 + cstlngDécalage)
- ![DATE D'OUVERTURE] = rsFeuille(6 + cstlngDécalage)
- !MotCle01 = rsFeuille(7 + cstlngDécalage)
- !MotCle02 = rsFeuille(8 + cstlngDécalage)
- !TitreCourt = rsFeuille(9 + cstlngDécalage)
- !Discipline = rsFeuille(10 + cstlngDécalage)
- !VilleRealisation = rsFeuille(11 + cstlngDécalage)
- .Update
- End With
- .MoveNext
- Loop
- End With
- 'If MsgBox(lngCompte & " projet(s) ajouté(s), valider ?", vbYesNo) = vbYes Then
- ' CommitTrans
- 'Else
- ' Rollback
- 'End If
- End Sub
- Function FichierDisponible(prmstrFichier) As Boolean
- Dim lngFichier As Long
- On Error Resume Next
- Open prmstrFichier For Binary Lock Read Write As #lngFichier
- If Err.Number Then
- FichierDisponible = False
- Else
- FichierDisponible = True
- Close #lngFichier
- End If
- On Error GoTo 0
- 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!!