[VBA]Parcourir une liste de cellule
Bonjour,
suite à un stage en entreprise, je dois "developpez" une maccro permettant via un dialogue entre Access et Excel de remplir des colonnes.
Je récupere donc les données de la BD dans une nouvelle feuille mais c'est la que ça se complique, je m'explique :
mon algorithme est le suivant :
- Je créé une liaison entre excel et access
- je récupére les données dans une nouvelle feuille que je renomme
- puis je dois testé pour chaque lignes si le contenu de la colonne J et de la colonne L dans ma feuille courante équivalent à respectivement celui de la colonne B et de la colonne C de la BDD.
Si c'est le cas, le contenu de la colonne A de la BDD va se coller dans la colonne AC de la feuille courante
A priori c'est fort simple cependant, je n'arrive pas à parcourir dynamiquement les cellules pendant mon 'for'... :roll: dans d'autre langage c'est assez simple, on concataine mais mes notions de VBAXL sont trop limite pour résoudre ce problème... :oops: Google ne ma pas beaucoup aidé non plus donc je viens demander à des professionnels 8-)
Code:
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 44 45 46 47 48 49 50 51 52 53
| Option Explicit
Sub Test()
'on commence par renommer notre feuille
ActiveSheet.Name = "sources"
'declaration
Dim appAccess As Access.Application
Dim i, j As Integer
'On lance une session Access
Set appAccess = CreateObject("Access.Application")
With appAccess
.OpenCurrentDatabase ("C:\bd_resp.mdb")
'on ajoute une nouvelle feuille et la renomme
Sheets.Add
ActiveSheet.Name = "Produits"
'on y colle le contenu de la table produit
With ActiveSheet.QueryTables.Add(Connection:=Array("OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;" & " Data Source =C:\bd_resp.mdb"), Destination:=Range("A1"))
.CommandType = xlCmdTable
.CommandText = Array("Produit")
.FieldNames = True
.RowNumbers = False
.PreserveFormatting = True
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.AdjustColumnWidth = True
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False
End With
'Requete de tri
'Pour chaque lignes du tableau, on requete les données.
For i = 1 To 50
If Sheets("Produits").Range("B"+i).Value = Sheets("Sources").Range("J"+i).Value Then
If Sheets("Produits").Range("C"+i).Value = Sheets("Sources").Range("L"+i).Value Then
Sheets("Sources").Range("AC"+i).Value = Sheets("Produits").Range("D"+i).Value
End If
End If
Next i
End With
'Quitte Access
appAccess.Quit
'Réinitialise l'objet
Set appAccess = Nothing
End Sub |
Donc pour résumer, que mettre à la place du "+i"
Cordialement 8-)