Bonjour à tous,

Je viens vers vous pour un probleme de "chronologie" des opérations de ma macro.

Pour faire simple c'est un enchainement de recherche de et de copie de cellule. Seulement ces opération doivent se dérouler dans un ordre bien précis autrement cela ne marche pas.

voici le code complet:
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
Sub RECHERCHE()
Dim i As Long
Dim CDE_ELEMENT As Workbook
Dim CDE As Workbook
Dim CLIENT As Workbook
Dim Plage As Range
Dim terme As String
Dim code As String
Dim dtemin As Date
Dim dtemax As Date
Dim dte As Date
Dim num_cde As String
Dim num_client As String
Const Fichier_CDE_ELEMENT As String = "C:\Documents and Settings\user\Bureau\GPS\COMMANDE_ELEMENT.xls"
Const Fichier_CDE As String = "C:\Documents and Settings\user\Bureau\GPS\COMMANDE.xls"
Const Fichier_CLIENT As String = "C:\Documents and Settings\user\Bureau\GPS\CLIENT.xls"
 
terme = Range("A2").Value
code = Range("A3").Value
dtemin = Range("D1").Value & "/" & Range("E1").Value & "/" & Range("F1").Value
dtemax = Range("D2").Value & "/" & Range("E2").Value & "/" & Range("F2").Value
 
Application.ScreenUpdating = False
If Dir(Fichier_CDE) <> "" And Dir(Fichier_CLIENT) <> "" And Dir(Fichier_CDE_ELEMENT) <> "" Then
Set CDE_ELEMENT = Workbooks.Open(Fichier_CDE_ELEMENT)
Set CDE = Workbooks.Open(Fichier_CDE)
Set CLIENT = Workbooks.Open(Fichier_CLIENT)
    With CDE_ELEMENT.Sheets("COMMANDE_ELEMENT")
        For i = 2 To 25000
            Set c = CDE_ELEMENT.Sheets("COMMANDE_ELEMENT").Cells(i, 6).Find(terme)
            Set d = CDE_ELEMENT.Sheets("COMMANDE_ELEMENT").Cells(i, 5).Find(code)
            If Not c Is Nothing And Not d Is Nothing Then
                dte = c.Offset(0, -3).Value
                If dte > dtemin And dte < dtemax Then
                    With ThisWorkbook.Worksheets("RESULTAT")
                    .Rows(2).Insert shift:=xlDown
                    .Range("A2").Value = c.Offset(0, -5).Value
                    .Range("B2").Value = c.Offset(0, -3).Value
                    .Range("C2").Value = c.Offset(0, 12).Value
                    .Range("D2").Value = c.Offset(0, 13).Value
                    .Range("E2").Value = c.Offset(0, 0).Value
                    num_cde = ThisWorkbook.Sheets("RESULTAT").Range("A2").Value
                    MsgBox num_cde
                    End With
                End If
            End If
            Set e = CDE.Sheets("COMMANDE").Cells(i, 1).Find(num_cde)
                If Not e Is Nothing Then
                    With ThisWorkbook.Worksheets("RESULTAT")
                    .Range("F2").Value = e.Offset(0, 3).Value
                    MsgBox e.Offset(0, 3).Value
                    num_client = ThisWorkbook.Sheets("RESULTAT").Range("F2").Value
                    MsgBox num_client
                    End With
                End If
            'Set f = CLIENT.Sheets("CLIENT").Cells(i, 1).Find(num_client)
                'If Not f Is Nothing Then
                    'With ThisWorkbook.Worksheets("RESULTAT")
                    '.Range("G2").Value = f.Value
                    'End With
                'End If
        Next i
    End With
CLIENT.Close False
CDE.Close False
CDE_ELEMENT.Close False
Set CDE = Nothing
Set CLIENT = Nothing
Set CDE_ELEMENT = Nothing
End If
 
End Sub
Il faudrait que la macro s'éxécute comme tel:

opération 1:
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
Set c = CDE_ELEMENT.Sheets("COMMANDE_ELEMENT").Cells(i, 6).Find(terme)
            Set d = CDE_ELEMENT.Sheets("COMMANDE_ELEMENT").Cells(i, 5).Find(code)
            If Not c Is Nothing And Not d Is Nothing Then
                dte = c.Offset(0, -3).Value
                If dte > dtemin And dte < dtemax Then
                    With ThisWorkbook.Worksheets("RESULTAT")
                    .Rows(2).Insert shift:=xlDown
                    .Range("A2").Value = c.Offset(0, -5).Value
                    .Range("B2").Value = c.Offset(0, -3).Value
                    .Range("C2").Value = c.Offset(0, 12).Value
                    .Range("D2").Value = c.Offset(0, 13).Value
                    .Range("E2").Value = c.Offset(0, 0).Value
                    num_cde = ThisWorkbook.Sheets("RESULTAT").Range("A2").Value
                    MsgBox num_cde
                    End With
                End If
            End If
Opération 2:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
Set e = CDE.Sheets("COMMANDE").Cells(i, 1).Find(num_cde)
                If Not e Is Nothing Then
                    With ThisWorkbook.Worksheets("RESULTAT")
                    .Range("F2").Value = e.Offset(0, 3).Value
                    MsgBox e.Offset(0, 3).Value
                    num_client = ThisWorkbook.Sheets("RESULTAT").Range("F2").Value
                    MsgBox num_client
                    End With
                End If
et opération 3: (qui est volontairement en standby pour le moment)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
'Set f = CLIENT.Sheets("CLIENT").Cells(i, 1).Find(num_client)
                'If Not f Is Nothing Then
                    'With ThisWorkbook.Worksheets("RESULTAT")
                    '.Range("G2").Value = f.Value
                    'End With
                'End If
Or lorsque j'éxécute ma macro l'opération 2 est éxécutée avant la 1... L'opération 2 ayant besoin de données récupérées dans l'opération 1 cela ne peut pas fonctionner...

Une idée?

Cordialement