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 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211
|
'*****BOITE DE DIALOGUE : RECHERCHER UN PRODUIT*****'
Private Sub ComboBox1_Change()
Dim j As Integer
Dim i As Integer
' Efface les données de la combobox2 et 3
ComboBox2.Clear
ComboBox3.Clear
'On se place dans la cellule D2 de la feuille sélectionnée dans la liste déroulante
Sheets(ComboBox1.Value).Select
Range("D2").Select
'Ajout de chantier dans la première liste déroulante :
'On créer une boucle qui teste toutes les cellules de la ligne "D"
'On ajoute les valeurs des cellules non vides dans la combobox2
For i = 1 To 30
If IsEmpty(ActiveCell) = False Then
ComboBox2.AddItem (ActiveCell.Value)
ActiveCell.Offset(0, 1).Select
End If
Next
End Sub
Private Sub ComboBox2_Change()
Sheets(ComboBox1.Value).Select
Range("A1").Select
'Ajout de la catégorie du produit :
'On créér une boucle de 1 jusqu'au numéro de la dernière ligne du tableau
'On parcourt toutes les cellules de la colonne A
'Toutes les cellules non vides sont ajoutées à la Combobox3
For i = 1 To [a65000].End(xlUp).Row
If IsEmpty(ActiveCell.Offset(i, 0)) = False Then
ComboBox3.AddItem (ActiveCell.Offset(i, 0).Value)
End If
Next
End Sub
Private Sub CommandButton1_Click()
'Déclaration des variables
Dim cellulecherche As Range
Dim ligne, i, j, g, lig, colonne, n As Integer
Dim adress1 As String
Dim derniereligne As Long
'Si l'utilisateur n'a pas sélectionner de fournisseur dans la liste déroulante "Fournisseur", alors on affiche un message
If ComboBox1.Value = "<Fournisseur>" Then
MsgBox "Veuillez sélectionner un founisseur", vbExclamation
Else
'Si l'utilisateur n'a pas sélectionner de chantier dans la liste déroulante "Chantier", alors on affiche un message
If ComboBox2.Value = "<Chantier>" Then
MsgBox "Veuillez sélectionner un chantier", vbExclamation
Else
If ComboBox3.Value = "<Catégorie>" Then 'Si l'utilisateur n'a pas sélectionné de catégorie, alors :
With Worksheets(ComboBox1.Value).Range(Cells(1, 2), Cells(1000, 2)) 'On se place dans la colonne "Désignation"
Set cellulecherche = .Find(what:="*" & TextBox1 & "*", LookIn:=xlValues) 'On commence la recherche
If Not cellulecherche Is Nothing Then 'Si l'on trouve une valeur correspondante à la recherche, alors :
adress1 = cellulecherche.Address 'La cellule de la première valeur trouvée s'appelle "adress1"
Do
ligne = cellulecherche.Row
'Les deux lignes suivantes, permettent de copier la catégorie et le nom du produit dans la feuille recherche
Sheets("Recherche").Cells(100, 2).End(xlUp).Offset(1, 0) = Sheets(ComboBox1.Value).Cells(ligne, 2).Value
Sheets("Recherche").Cells(100, 1).End(xlUp).Offset(1, 0) = cellulecherche.Offset(0, -1).End(xlUp).Value
Worksheets(ComboBox1.Value).Activate
Cells(2, 4).Select
'La boucle permet de copier le prix unitaire, le N° du devis, etc... dans la feuille recherche
For n = 1 To 100
If ActiveCell.Value = ComboBox2.Value Then
colonne = ActiveCell.Column
Cells(ligne, colonne).Resize(1, 4).Copy Sheets("Recherche").Cells(100, 3).End(xlUp).Offset(1, 0)
Exit For
Else
ActiveCell.Offset(0, 1).Select
End If
Next n
Set cellulecherche = .FindNext(cellulecherche) 'On recommence la recherche pour trouvée toutes les autres cellules correspondantes à la recherche
Loop While Not cellulecherche Is Nothing And cellulecherche.Address <> adress1 'jusqu'à ce que l'on trouve la première valeur trouvée
Else 'Si l'on ne trouve pas de valeur correspondant à la recherche, alors :
MsgBox "Aucun produit ne correspond à votre recherche", vbExclamation
Exit Sub
End If
End With
Else 'Si l'utilisateur a sélectionné une catégorie, alors :
Worksheets(ComboBox1.Value).Select
Cells(3, 1).Select
'Les ligne suivantes permettents de faire la recherche uniquement dans les produits de la catégorie sélectionnée
'Topcell = le premier produit de la catégorie et Bottomcell = le dernier
For k = 0 To 1000
If ActiveCell.Value = ComboBox3.Value Then
ActiveCell.Offset(1, 1).Select
Exit For
Else
ActiveCell.Offset(1, 0).Select
End If
Next k
Set Topcell = ActiveCell
ActiveCell.Offset(1, 0).Select
Do While ActiveCell.Value <> ""
ActiveCell.Offset(1, 0).Select
Loop
Set Bottomcell = ActiveCell
With Worksheets(ComboBox1.Value).Range(Topcell, Bottomcell) 'On effectue la recherche dans les produits de la catégorie
Set cellulecherche = .Find(what:="*" & TextBox1 & "*") 'On commence la recherche
If Not cellulecherche Is Nothing Then 'Si l'on trouve une valeur correspondante à la recherche, alors :
adress1 = cellulecherche.Address 'La cellule de la première valeur trouvée s'appelle "adress1"
Do
ligne = cellulecherche.Row
'Les deux lignes suivantes, permettent de copier la catégorie et le nom du produit dans la feuille recherche
Sheets("Recherche").Cells(100, 2).End(xlUp).Offset(1, 0) = Sheets(ComboBox1.Value).Cells(ligne, 2).Value
Sheets("Recherche").Cells(100, 1).End(xlUp).Offset(1, 0) = cellulecherche.Offset(0, -1).End(xlUp).Value
Worksheets(ComboBox1.Value).Activate
Cells(2, 4).Select
'La boucle permet de copier le prix unitaire, le N° du devis, etc... dans la feuille recherche
For n = 1 To 100
If ActiveCell.Value = ComboBox2.Value Then
colonne = ActiveCell.Column
Cells(ligne, colonne).Resize(1, 4).Copy Sheets("Recherche").Cells(100, 3).End(xlUp).Offset(1, 0)
Exit For
Else
ActiveCell.Offset(0, 1).Select
End If
Next n
Set cellulecherche = .FindNext(cellulecherche) 'On recommence la recherche pour trouvée toutes les autres cellules correspondantes à la recherche
Loop While Not cellulecherche Is Nothing And cellulecherche.Address <> adress1 'jusqu'à ce que l'on trouve la première valeur trouvée
Else 'Si l'on ne trouve pas de valeur correspondant à la recherche, alors :
MsgBox "Aucun produit ne correspond à votre recherche", vbExclamation
Exit Sub
End If
End With
End If
'On affiche les critères de recherche sur le feuille "Recherche" :
Sheets("Recherche").Cells(9, 2) = UCase(ComboBox1.Value)
Sheets("Recherche").Cells(10, 2) = ComboBox2.Value
Sheets("Recherche").Cells(11, 2) = UCase(TextBox1.Text)
'On supprime les produits qui n'ont pas de prix pour ce chantier :
Worksheets("Recherche").Select
derniereligne = Range("A65000").End(xlUp).Row
For j = derniereligne To 14 Step -1
If Cells(j, 5) = "" Then
Rows(j).Delete
End If
Next
'Sécurité : si aucun résultat n'est affiché dans la feuille recherche, on affiche le message :
If Cells(14, 2).Value = "" Then
MsgBox "Aucun produit ne correspond à votre recherche", vbExclamation
Exit Sub
End If
'On se place dans la feuille "Recherche" pour visualiser les résultats :
Sheets("Recherche").Select
Unload UserForm1
End If
End If
'On lance la procédure pour faire une grille sur les produits trouvés :
'Call bordures
'On lance la procédure pour faire le zoom sur les colonnes de la recherche :
'Call Zoomfeuilleselection
End Sub
Private Sub CommandButton2_Click()
Unload UserForm1
End Sub
Private Sub UserForm_Initialize()
'On créér une boucle qui parcourt toutes les feuilles du classeur, en commençant à la deuxième
' Les noms des feuilles trouvées sont ajoutés à la combobox1
For i = 5 To Sheets.Count
ComboBox1.AddItem (Sheets(i).Name)
Next
End Sub |
Partager