Sélection d'une piece

Fermé
jj - Modifié le 26 juil. 2017 à 15:35
 corentin - 27 juil. 2017 à 06:06
Bonjour,

Est ce quelqu'un pourrait m'aider à simplifier ce code svp :


Private Sub ButRechercher_Click()

'compteur ligne et colonne pour aller chercher la désignation
Dim l As Integer, c As Integer
'compteur index

Dim i, j As Integer
i = 0
j = 0

Dim NomFeuille As String

Set TabCategorie = Sheets("TABLEAU CATEGORIE")
Set dictionnary = Sheets("DICTIONNARY")

Dim obj As Object 'variable de type object (ça peut être un type label ou comboBox)
Dim inc As Integer 'variable d'incrémentation

'##################################### Déclaration des variables de chaque caractéristique d'une piece ###########################
'Dim CAT_NOM(20) As String
Dim CAT_NOM_1 As String, CAT_NOM_2 As String, CAT_NOM_3 As String, CAT_NOM_4 As String, CAT_NOM_5 As String
Dim CAT_NOM_6 As String, CAT_NOM_7 As String, CAT_NOM_8 As String, CAT_NOM_9 As String, CAT_NOM_10 As String
Dim CAT_NOM_11 As String, CAT_NOM_12 As String, CAT_NOM_13 As String, CAT_NOM_14 As String, CAT_NOM_15 As String
Dim CAT_NOM_16 As String, CAT_NOM_17 As String, CAT_NOM_18 As String, CAT_NOM_19 As String, CAT_NOM_20 As String


'Dim CAT(20) As Boolean
Dim CAT1 As Boolean, CAT2 As Boolean, CAT3 As Boolean, CAT4 As Boolean, CAT5 As Boolean
Dim CAT6 As Boolean, CAT7 As Boolean, CAT8 As Boolean, CAT9 As Boolean, CAT10 As Boolean
Dim CAT11 As Boolean, CAT12 As Boolean, CAT13 As Boolean, CAT14 As Boolean, CAT15 As Boolean
Dim CAT16 As Boolean, CAT17 As Boolean, CAT18 As Boolean, CAT19 As Boolean, CAT20 As Boolean

'Déclaration d'un tableau pour mettre le resultat de la recherche de piece
Dim ResultDesignation(1000) As String
Dim ResultReference(1000) As String

'################################ Code permettant de connaitre la feuille dans laquelle on va chercher des donnéées###############################################################################
famille = Range("O1").Value
'Connaitre le nom de la feuille pour aller récupérer les données en fonction de la langue choisie
If dictionnary.Range("L1") = 2 Then
    NomFeuille = TabCategorie.Cells(3 + famille, 2).Text
Else
    NomFeuille = dictionnary.Cells(3 + famille, 4).Text
End If

'################### variable relié au resultat de la combobox ############################################################
CAT_NOM_1 = ComboBox_CAT_1.Text
CAT_NOM_2 = ComboBox_CAT_2.Text
CAT_NOM_3 = ComboBox_CAT_3.Text
CAT_NOM_4 = ComboBox_CAT_4.Text
CAT_NOM_5 = ComboBox_CAT_5.Text
CAT_NOM_6 = ComboBox_CAT_6.Text
CAT_NOM_7 = ComboBox_CAT_7.Text
CAT_NOM_8 = ComboBox_CAT_8.Text
CAT_NOM_9 = ComboBox_CAT_9.Text
CAT_NOM_10 = ComboBox_CAT_10.Text
CAT_NOM_11 = ComboBox_CAT_11.Text
CAT_NOM_12 = ComboBox_CAT_12.Text
CAT_NOM_13 = ComboBox_CAT_13.Text
CAT_NOM_14 = ComboBox_CAT_14.Text
CAT_NOM_15 = ComboBox_CAT_15.Text
CAT_NOM_16 = ComboBox_CAT_16.Text
CAT_NOM_17 = ComboBox_CAT_17.Text
CAT_NOM_18 = ComboBox_CAT_18.Text
CAT_NOM_19 = ComboBox_CAT_19.Text
CAT_NOM_20 = ComboBox_CAT_20.Text

'############ Initialisation des compteurs
l = 4
c = 3

'######################## test des conditions de sélection par els listes déroulantes ###########################################################
While Sheets(NomFeuille).Cells(l, c).Value <> ""
    CAT1 = Sheets(NomFeuille).Cells(l, c + 1).Text = CAT_NOM_1 Or CAT_NOM_1 = ""
    CAT2 = Sheets(NomFeuille).Cells(l, c + 2).Text = CAT_NOM_2 Or CAT_NOM_2 = ""
    CAT3 = Sheets(NomFeuille).Cells(l, c + 3).Text = CAT_NOM_3 Or CAT_NOM_3 = ""
    CAT4 = Sheets(NomFeuille).Cells(l, c + 4).Text = CAT_NOM_4 Or CAT_NOM_4 = ""
    CAT5 = Sheets(NomFeuille).Cells(l, c + 5).Text = CAT_NOM_5 Or CAT_NOM_5 = ""
    CAT6 = Sheets(NomFeuille).Cells(l, c + 6).Text = CAT_NOM_6 Or CAT_NOM_6 = ""
    CAT7 = Sheets(NomFeuille).Cells(l, c + 7).Text = CAT_NOM_7 Or CAT_NOM_7 = ""
    CAT8 = Sheets(NomFeuille).Cells(l, c + 8).Text = CAT_NOM_8 Or CAT_NOM_8 = ""
    CAT9 = Sheets(NomFeuille).Cells(l, c + 9).Text = CAT_NOM_9 Or CAT_NOM_9 = ""
    CAT10 = Sheets(NomFeuille).Cells(l, c + 10).Text = CAT_NOM_10 Or CAT_NOM_10 = ""
    CAT11 = Sheets(NomFeuille).Cells(l, c + 11).Text = CAT_NOM_11 Or CAT_NOM_11 = ""
    CAT12 = Sheets(NomFeuille).Cells(l, c + 12).Text = CAT_NOM_12 Or CAT_NOM_12 = ""
    CAT13 = Sheets(NomFeuille).Cells(l, c + 13).Text = CAT_NOM_13 Or CAT_NOM_13 = ""
    CAT14 = Sheets(NomFeuille).Cells(l, c + 14).Text = CAT_NOM_14 Or CAT_NOM_14 = ""
    CAT15 = Sheets(NomFeuille).Cells(l, c + 15).Text = CAT_NOM_15 Or CAT_NOM_15 = ""
    CAT16 = Sheets(NomFeuille).Cells(l, c + 16).Text = CAT_NOM_16 Or CAT_NOM_16 = ""
    CAT17 = Sheets(NomFeuille).Cells(l, c + 17).Text = CAT_NOM_17 Or CAT_NOM_17 = ""
    CAT18 = Sheets(NomFeuille).Cells(l, c + 18).Text = CAT_NOM_18 Or CAT_NOM_18 = ""
    CAT19 = Sheets(NomFeuille).Cells(l, c + 19).Text = CAT_NOM_19 Or CAT_NOM_19 = ""
    CAT20 = Sheets(NomFeuille).Cells(l, c + 20).Text = CAT_NOM_20 Or CAT_NOM_20 = ""

'############################ récupération des désignations et des references dans un tableau ##################################################
    If CAT1 And CAT2 And CAT3 And CAT4 And CAT5 And CAT6 And CAT7 And CAT8 And CAT9 And CAT10 And CAT11 And CAT12 And CAT13 And CAT14 And CAT15 And CAT16 And CAT17 And CAT18 And CAT19 And CAT20 Then
       ResultDesignation(i) = Sheets(NomFeuille).Cells(l, c).Value
       ResultReference(j) = Sheets(NomFeuille).Cells(l, c).Offset(0, -2).Value
       i = i + 1
       j = j + 1
       
    End If
    l = l + 1
Wend

'######################### Affichage du résultat de la sélection sur la première page excel ######################################################
Sheets("designation part").Activate
Range("A5:B5", Selection.End(xlDown)).Select
Selection.ClearContents
i = 0
j = 0
If ResultDesignation(i) <> "" Then
    While ResultDesignation(i) <> "" And ResultReference(j) <> ""
        Sheets("Designation part").Cells(i + 5, 2).Value = ResultDesignation(i)
        Sheets("Designation part").Cells(i + 5, 1).Value = ResultReference(j)
        i = i + 1
        j = j + 1
    Wend
Else
    MsgBox ("Il n'y a pas de pièce correspondant à votre recherche !")
End If


'Mettre les label et combobox a zéro
Set obj = Nothing
Unload Me
Range("A5").Select

End Sub

2 réponses

Bonjour jj,

Je propose ce code VBA :


Option Explicit


Private Sub ButRechercher_Click()

  Dim TabCategorie As Worksheet, dictionnary As Worksheet, NomFeuille As String
  Dim obj As Object  ' variable de type object (ça peut être un type label ou comboBox)
  Dim l As Long, c As Integer ' ligne et colonne, pour la désignation
  Dim i As Long, j As Integer ' compteurs index (déjà à 0)
  
  '#################################### Déclaration des variables de chaque caractéristique d'une piece ###########################
  Dim CAT_NOM(1 To 20) As String, CAT(1 To 20) As Boolean
  Dim flag As Boolean ' servira uniquement pour tester si tous les CAT(i) sont à VRAI
  Dim ResultDesignation(1000) As String ' pour le résultat de la recherche de pièce
  Dim ResultReference(1000) As String
  Dim famille As Long
  
  Set TabCategorie = Worksheets("TABLEAU CATEGORIE")
  Set dictionnary = Worksheets("DICTIONNARY")
  
  '############################ Code permettant de connaitre la feuille dans laquelle on va chercher des donnéées##################
  famille = [O1]
  'Connaitre le nom de la feuille pour aller récupérer les données en fonction de la langue choisie
  If dictionnary.[L1] = 2 Then
    NomFeuille = TabCategorie.Cells(3 + famille, 2).Text
  Else
    NomFeuille = dictionnary.Cells(3 + famille, 4).Text
  End If
  
  '################### variable relié au resultat de la combobox ############################################################
  For i = 1 To 20
    CAT_NOM(i) = Controls("ComboBox_CAT_" & i).Text  ' peut-être faudra-t-il mettre : Me.Controls().Text
  Next i
  
  '############ Initialisation des compteurs
  l = 4: c = 3
  
  '######################## test des conditions de sélection par les listes déroulantes ###########################################################
  
  With Worksheets(NomFeuille)
  
    While .Cells(l, c) <> ""
    
      flag = True ' d'abord, on suppose que tous les CAT(i) sont à VRAI
      
      For i = 1 To 20
        CAT(i) = (.Cells(l, c + i).Text = CAT_NOM(i)) Or CAT_NOM(i) = ""
        If Not CAT(i) Then flag = False ' si un CAT(i) est FAUX : flag devient False
      Next i
      
      '############################ récupération des désignations et des references dans un tableau #################################
      If flag Then ' si flag est vrai (True), tous les CAT(i) sont à VRAI
        ResultDesignation(i) = .Cells(l, c): ResultReference(j) = .Cells(l, c).Offset(0, -2)
        i = i + 1: j = j + 1
      End If
      
      l = l + 1
    
    Wend
    
  End With
  
  '######################### Affichage du résultat de la sélection sur la première page excel ######################################################
  
  With Worksheets("Designation part")
  
    .Activate
    
    ' l : dernière ligne, selon la colonne A
    l = Range("A" & Rows.Count).End(xlUp).Row
    Range("A5:B" & l).ClearContents
    
    i = 0: j = 0
  
    If ResultDesignation(i) <> "" Then
      While ResultDesignation(i) <> "" And ResultReference(j) <> ""
        .Cells(i + 5, 2) = ResultDesignation(i)
        .Cells(i + 5, 1) = ResultReference(j)
        i = i + 1: j = j + 1
      Wend
    Else
      MsgBox "Il n'y a pas de pièce correspondant à votre recherche !"
    End If
    
  End With
  
  'Mettre les label et combobox a zéro
  Set obj = Nothing: Unload Me: [A5].Select

End Sub


Merci de me dire si ça te convient.

Cordialement
 
1
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
Modifié le 26 juil. 2017 à 17:12
Bonjour JJ, bonjour le forum,

Que signifie cette ligne ?

    CAT1 = Sheets(NF).Cells(l, c + 1).Text = CAT_NOM_1 Or CAT_NOM_1 = ""

Ça va renvoyer [Vrai] ou [Faux] non ?!...

À plus,
ThauTheme
0