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 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
|
Option Explicit
Sub ListerValeurFichiersMultiples()
Dim Cible As String, Chemin As String, nb As Integer
Dim firstAddress As String, Cell As Range, Tableau(), Tableau2(), j As Integer, k As Integer, x As Integer, y As Integer, nb_tableau As Integer
Dim nb_sheets As Integer, i As Integer, der_ligne As Integer
Dim plage_recherche, chemin_et_fichier, fichier As String
'Désactivation de l'affichage
Application.ScreenUpdating = False
'Dernière ligne de la page
der_ligne = Range("B" & Rows.Count).End(xlUp).Row
'Effacement des résultats précédents
Worksheets("Recherche").Range("A2:H" & der_ligne).ClearContents
'Valeur à recherhcer dans les classeurs Excel du même répertoire
Cible = Worksheets("Recherche").valeur.Value
' Contrôle d'une saisie de valeur
If Cible = "" Then Exit Sub
Debug.Print ActiveWorkbook.Name
'//-- Recherche dans le fichier post-calculation en premier
'Si le fichier Post-calculation n'est pas ouvert, on l'ouvre
fichier = "Post-calculation.xlsx"
chemin_et_fichier = ThisWorkbook.Path & "\" & fichier
If Test_EstOuvert(chemin_et_fichier) = False Then
Workbooks.Open chemin_et_fichier
End If
'Affiche toutes les données (supprime les filtres)
On Error Resume Next
Workbooks(fichier).Worksheets("Post-calculation").ShowAllData
der_ligne = Workbooks(fichier).Worksheets("Post-calculation").Range("F" & Rows.Count).End(xlUp).Row 'Dernière ligne de la feuille post-calculation
plage_recherche = "F6:E" & der_ligne
With Workbooks(fichier).Worksheets("Post-calculation").Range(plage_recherche).Cells
Set Cell = .Find(Cible, LookIn:=xlValues, lookat:=xlPart)
'Mise en mémoire des résultats dans un tableau
If Not Cell Is Nothing Then
firstAddress = Cell.Address
Do
'Mise en tableau des adresses des valeurs trouvées
x = x + 1
ReDim Preserve Tableau(7, x)
Tableau(1, x) = Cell.Address 'coordonnées de la cellule
Tableau(2, x) = Cell.Value 'N° de l'article
Tableau(3, x) = "Post-calculation" 'nom de la feuille"
Tableau(4, x) = Cell.Offset(0, 3).Value 'N° commande
Tableau(5, x) = Cell.Offset(0, -2).Value 'date livraison
Tableau(6, x) = Cell.Offset(0, 6).Value 'nombre d'article
Tableau(7, x) = Cell.Offset(0, 8).Value 'prix unitaire
Set Cell = .FindNext(After:=Cell)
Loop While Not Cell Is Nothing And Cell.Address <> firstAddress
End If
End With
'--//
Debug.Print ActiveWorkbook.Name
Workbooks("Planning.xlsm").Worksheets("Recherche").Activate
Debug.Print ActiveWorkbook.Name
'//-- Recherche dans les feuilles d'année
nb_sheets = Sheets.Count
' Boucle sur les feuilles du classeur
For i = 1 To nb_sheets
If IsNumeric(Worksheets(i).Name) Then ' Vérification que la feuille est bien une année
'Affiche toutes les données (supprime les filtres)
On Error Resume Next
Worksheets(i).ShowAllData
der_ligne = Worksheets(i).Range("B" & Rows.Count).End(xlUp).Row 'Dernière ligne de la feuille en cours
If (Worksheets(i).Name > 2023) Then 'Si le planning est depuis 2024, on change la plage de recherche (modif de la mise en page)
plage_recherche = "E6:E" & der_ligne
Else
plage_recherche = "D12:E" & der_ligne
End If
With Worksheets(i).Range(plage_recherche).Cells
Set Cell = .Find(Cible, LookIn:=xlValues, lookat:=xlPart)
'Mise en mémoire des résultats dans un tableau
If Not Cell Is Nothing Then
firstAddress = Cell.Address
Do
'Mise en tableau des adresses des valeurs trouvées
y = y + 1
ReDim Preserve Tableau2(7, y)
Tableau2(1, y) = Cell.Address 'coordonnées de la cellule
Tableau2(2, y) = Cell.Value 'N° de l'article
Tableau2(3, y) = Worksheets(i).Name 'nom de la feuille
Tableau2(4, y) = Cell.Offset(0, 3).Value 'N° commande
Tableau2(5, y) = Cell.Offset(0, -2).Value 'date livraison
If (Worksheets(i).Name > 2023) Then 'Si le planning est depuis 2024, on change la plage de recherche (modif de la mise en page)
nb = Cell.Offset(0, 6).Value
Tableau2(6, y) = nb 'nombre d'article
Tableau2(7, y) = Cell.Offset(0, 7).Value / nb 'prix unitaire
Else
nb = Cell.Offset(0, 4).Value
Tableau2(6, y) = nb 'nombre d'article
Tableau2(7, y) = Cell.Offset(0, 5).Value / nb 'prix unitaire
End If
Set Cell = .FindNext(After:=Cell)
Loop While Not Cell Is Nothing And Cell.Address <> firstAddress
End If
End With
End If
Next i
'//--
Debug.Print ActiveWorkbook.Name
'Affichage des résultats
If x <> 0 Then ' Si le tableau post-calculation n'est pas vide
With Worksheets("Recherche")
For j = 1 To x
For k = 0 To 7
.Cells(j + 1, k + 1) = Tableau(k, j)
Next k
Next j
End With
End If
If y <> 0 Then ' Si le tableau des feuille d'années n'est pas vide
With Worksheets("Recherche")
For j = 1 To y
For k = 0 To 7
.Cells(j + x + 1, k + 1) = Tableau2(k, j)
Next k
Next j
End With
End If
Debug.Print ActiveWorkbook.Name
Range("B1").Value = "Cellule"
Range("C1").Value = "N° article"
Range("D1").Value = "Année"
Range("E1").Value = "Commande"
Range("F1").Value = "Date livraison"
Range("G1").Value = "Nombre"
Range("H1").Value = "Prix unitaire"
Range("I1").Value = "Double-cliquer sur l'adresse de la cellule pour afficher la ligne"
End Sub |