Bonjour à tous,
Je suis nouvelle sur ce forum, mais je m'inspire assez souvent de vos créations… Débutante en VBA, je viens tout juste de commencer à travailler avec ACCESS, alors la combinaison des deux me reste assez nébuleuse…
J'ai conçu une base access (regroupant requêtes actions, formulaire, intéraction avec EXCEL,…) destinée (entre autres) a incrémenter un fichier EXCEL déjà existant, nommé ESSAI.xls.
J'ai donc, d'un côté, une table " FcAS ". Cette table est composée des champs [CODE], [LIBELLE] & [MONTANT].
De l'autre côté, j'ai un fichier EXCEL avec une colonne dans laquelle je trouve des "codes" qui sont identiques à ceux de mon champs [CODE].
J'aimerais faire une recherche sur chaque "code" de mon fichier EXCEL afin d'aller chercher dans ma table " FcAS " le [MONTANT] correspondant et l'incrémenter dans la cellule située 3 colonnes plus loin dans mon fichier EXCEL.
Dans ma tête, cela donne un truc du genre :
Pour chaque "code" de mon fichier EXCEL,
je recherche le [CODE] correspondant dans ma table "FcAS"
Si je ne le trouve pas, je passe au [CODE] suivant jusqu'à que j'ai fait le tour de tous les [CODES] de ma table " FcAS"
Si je le trouve, je vais chercher le [MONTANT] de ma ligne de [CODE] et je le reporte dans mon fichier EXCEL, 3 colonnes plus loin que ma cellule active
Ensuite je passe au "code" suivant et je recommence depuis le début.
Concrêtement, voici ce que j'ai fait…
1er problême : En utilisant F8, je me rends compte que le résultat de Rec1.field(0) est "3318" alors que le résultat de cells(i,1) est 3318. Il me faut 3318. Je pense que c'est parce que Rec1.field(0) est de type "texte" et non pas "numérique".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 Dim xlApp As Excel.Application Dim xlSheet As Excel.Worksheet Dim xlBook As Excel.Workbook Dim i As Long Dim rec1 As Recordset Dim DerLigne As Long 'Lancement des deux requêtes actions DoCmd.SetWarnings False DoCmd.OpenQuery ("Détail") DoCmd.OpenQuery ("Liste") DoCmd.SetWarnings True Set rec1 = CurrentDb.OpenRecordset("FcAS", dbOpenSnapshot) 'Initialisations Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open(Filename:="P:\Mes documents\ESSAI.xls") xlBook.Activate DerLigne = Range("B65536").End(xlUp).Row i = 6 For i = 6 To DerLigne If Cells(i, 3) = rec1.Fields(0) Then Cells(i, 3) = DLookup("AN", "FcAS", rec1.Fields(0) = Cells(i, 1)) rec1.MoveNext End If rec1.MoveNext Next 'Fermeture & libération des objets xlApp.DisplayAlerts = False ActiveWorkbook.Close savechanges:=True End With xlApp.DisplayAlerts = True xlApp.Quit rec1.Close Set rec1 = Nothing Set xlSheet = Nothing Set xlBook = Nothing Set xlApp = Nothing
1ère question : quel code VBA pourrais-je écrire afin de changer cette propriété (je ne peux directement la changer dans la table puisque celle-ci est écrasée chaque fois que je lance la macro) ?
2ème problème : Il faut que je boucle sur tous les "codes" de mon fichier et qu'à chaque fois je boucle sur le champs [CODE] de ma table " FcAS" jusqu'à ce que je trouve le bon code… Ce que ma macro ne fait pas…
2ème question : Auriez-vous une idée de ce qui cloche dans ma procédure (surement plein de choses me direz-vous mais bon je suis preneuse de toute amélioration)
Je vous remercie par avance de votre aide !!!
Partager