Bonjour,

J'ai déjà présenté le code ci-dessous pour un problème résolu.

Il s'agit de comparer les valeurs d'un champ de ma requête Access avec une colonne sous Excel, et de remplacer certaines cellules de la ligne si le code est trouvé, ou d'ajouter une ligne avec le code.

Cela fonctionne quand les codes sont dans le même ordre dans Access et dans Excel, mais je ne sais pas comment faire pour lui dire que s'il ne trouve pas le code il ne va pas de suite ajouter la ligne, mais passe à la ligne Excel suivante.

Si quelqu'un a une idée ou pouvait m'indiquer un tutoriel sur les boucles ça serait cool (j'ai pas trouvé...).

Autre petite question en passant: comment mettre le nouveau texte (les codes et les lignes modifiées quand le code est trouvé) en couleur?

Merci de votre aide.

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
Sub majmp()
    Dim cnx As ADODB.Connection
    Dim rsData As ADODB.Recordset
    Dim szConnect As String
    Dim szSQL As String
    Dim PathMyApplication As String
    Dim un_champ As ADODB.Field
    Dim intNoCol As Integer
    Dim intNoLigne As Integer
    Dim i1 As String
    Dim i2 As String
    Dim codeprojet As ADODB.Field
    Dim iL As Integer
 
    'déclaration d'un objet connection
    Set rsData = New ADODB.Recordset
 
    'instanciation de l'object cnaccess
    Set cnx = New ADODB.Connection
 
    'valorisation de la propriété connectionstring
    PathMyApplication = "G:\Gestion" & "\"
    ' Créer la chaine de connexion
     szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
     "Data Source= " & PathMyApplication & "SIAL.mdb;"
 
   'garniture du rs 
    rsData.Open "MajorProjectsLV", szConnect, adOpenDynamic, adLockOptimistic, adCmdStoredProc
 
     'garniture des données
 
 i2 = 1
rsData.MoveFirst
codeprojet = rsData.Fields("Code project")
 
Do While Not rsData.EOF
For Each codeprojet In rsData.Fields
If codeprojet = Worksheets("TEST2").Cells(i2, 1).Value Then
Worksheets("TEST2").Cells(i2, 2).Value = rsData.Fields("code Project")
Worksheets("TEST2").Cells(i2, 3).Value = rsData.Fields("last gate")
 
Else
iL = Cells(65535, 1).End(xlUp).Offset(1).Row
Worksheets("TEST2").Cells(iL, 1).Value = rsData.Fields("code projet").Value
 
i2 = i2 + 1
End If
Next codeprojet
 
rsData.MoveNext
Loop
 
 
    'ouverture de la connexion avec la base access
 
    MsgBox "Les données ont été mises à jour selon la requête Access..."
 
End Sub