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 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
| Option Explicit ' Déclaration
Dim CDE_ELEMENT As Workbook, CLIENT As Workbook, CDE As Workbook
Dim terme As String, code As String, num_cde As Variant, num_client As String
Dim dtemin As Date, dtemax As Date, dte As Date
Dim i As Long, j As Long, k As Long
Dim c As Range, d As Range, e As Range, f As Range, g As Range
Dim flagInit As Boolean
Const Fichier_CDE_ELEMENT As String = "C:\Documents and Settings\user\Bureau\GPS\COMMANDE_ELEMENT.xls" 'les différents classeur
Const Fichier_CDE As String = "C:\Documents and Settings\user\Bureau\GPS\COMMANDE.xls" 'dans lesquels on va rechercher
Const Fichier_CLIENT As String = "C:\Documents and Settings\user\Bureau\GPS\CLIENT.xls" 'les données
Sub Main()
Application.ScreenUpdating = False
Init ' Phase 0 - Initialisation
Recherche_Ph1 ' Phase 1 - Recherche dans COMMANDE_ELEMENT
Recherche_Ph2 ' Phase 2 - Recherche dans COMMANDE
Recherche_Ph3 ' Phase 3 - Recherche dans CLIENT
Close_classeur
Application.ScreenUpdating = True
End Sub
Sub Init()
flagInit = True
terme = Range("A2").Value 'désignation de la piece
code = Range("A3").Value 'partie référence de la piece
dtemin = Range("D1").Value & "/" & Range("E1").Value & "/" & Range("F1").Value 'date mini de la recherche
dtemax = Range("D2").Value & "/" & Range("E2").Value & "/" & Range("F2").Value 'date maxi de la recherche
If Dir(Fichier_CDE) <> "" And Dir(Fichier_CLIENT) <> "" And Dir(Fichier_CDE_ELEMENT) <> "" Then 'si les trois fichiers existe
Set CDE_ELEMENT = Workbooks.Open(Fichier_CDE_ELEMENT)
Set CDE = Workbooks.Open(Fichier_CDE)
Set CLIENT = Workbooks.Open(Fichier_CLIENT)
End If
End Sub
Sub Recherche_Ph1()
If Not flagInit Then Init
With CDE_ELEMENT.Worksheets("COMMANDE_ELEMENT") 'dans COMMANDE_ELEMENT
For i = 2 To 25000
Set c = CDE_ELEMENT.Worksheets("COMMANDE_ELEMENT").Cells(i, 6).Find(terme)
Set d = CDE_ELEMENT.Worksheets("COMMANDE_ELEMENT").Cells(i, 5).Find(code) 'trouver à la fois dans deux colonnes différentes
If Not c Is Nothing And Not d Is Nothing Then
dte = c.Offset(0, -3).Value 'récupéré la date
If dte > dtemin And dte < dtemax Then 'vérifier si la date est dans l'interval
With ThisWorkbook.Worksheets("RESULTAT") 'Dans le classeur RECHERCHE et dans la feuille RESULTAT
.Rows(2).Insert shift:=xlDown 'insérer un ligne
.Range("A2").Value = c.Offset(0, -5).Value 'copier n°commande
.Range("B2").Value = c.Offset(0, -3).Value 'copier date
.Range("C2").Value = c.Offset(0, 12).Value 'copier prix unitaire
.Range("D2").Value = c.Offset(0, 13).Value 'copier prix total
.Range("E2").Value = c.Offset(0, 0).Value 'copier designation
num_cde = ThisWorkbook.Worksheets("RESULTAT").Range("A2").Value 'récupérer le numéro de commande et le mettre en variable num_cde
End With
End If 'fin du travail avec le classeur COMMANDE_ELEMENT
End If
Next i
End With
End Sub
Sub Recherche_Ph2()
With ThisWorkbook.Worksheets("RESULTAT")
For j = 2 To 25000
If Not IsEmpty(Cells(j, 1)) Then
num_cde = d.Value
With CDE.Worksheets("COMMANDE")
Set e = CDE.Worksheets("COMMANDE").Cells(j, 1).Find(num_cde) 'recherche dans le classeur COMMANDE avec le numéro de commande
If Not e Is Nothing Then
With ThisWorkbook.Worksheets("RESULTAT") 'Dans le classeur RECHERCHE et dans la feuille RESULTAT
d.Offset(0, 5).Value = e.Offset(0, 3).Value 'copier le numéro client
End With
End If
End With
End If 'fin du travail avec le classeur COMMANDE
Next j
End With
End Sub
Sub Recherche_Ph3()
With ThisWorkbook.Worksheets("RESULTAT")
For k = 2 To 25000
If Not IsEmpty(Cells(k, 5)) Then
num_client = f.Value
With CLIENT.Worksheets("CLIENT")
Set g = CDE.Worksheets("COMMANDE").Cells(k, 1).Find(num_client) 'recherche dans le classeur COMMANDE avec le numéro de commande
If Not g Is Nothing Then
With ThisWorkbook.Worksheets("RESULTAT") 'Dans le classeur RECHERCHE et dans la feuille RESULTAT
f.Offset(0, 6).Value = g.Offset(0, 2).Value 'copier le numéro client
End With
End If
End With
End If
Next k
End With 'fin du travail avec le classeur COMMANDE
End Sub
Sub Close_classeur()
CLIENT.Close False 'fermeture des classeur
CDE.Close False
CDE_ELEMENT.Close False
Set CDE = Nothing 'libere les variables
Set CLIENT = Nothing
Set CDE_ELEMENT = Nothing
End Sub |
Partager