Comment rendre code moins volumineux
Bonjour,
J'ai un problème avec un projet VBA. Ce dernier fonctionnait très bien mais j'ai rajouté des fonctions find et depuis le fichier fonctionne très lentement.
Il s'agit de deux combobox en cascade. La combobox1 permet de chargé l'intitulé de la colonne de la combobox2. Quand on selectionne un titre dans la combobox2. La fonction find va rechercher l'identifiant de la valeur (qui en fait est la première ligne).
Je voulais savoir si il etait possible de simplifier ce code à savoir qu'il y en a trois de ce type dans la même page. Le code fonctionne mais j'ai l'impression qu'il est trop lourd.
Private Sub UserForm_Initialize()
Dim Plage As Range
Dim Tab1() As String
Dim Cell
Dim I
With Sheets("Equipe")
Set Plage = .Range("D56:F56")
End With
ReDim Tab1(1 To Plage.Count)
For Each Cell In Plage
I = I + 1
Tab1(I) = Cell
Next
ComboBox1.List = Tab1
modificationcc.TextBox1.Value = Sheets("Equipe").Range("B18").Value
End Sub
Private Sub CommandButton2_Click()
Dim a
'selection de la valeur dans la page Equipe
'On selectionne l'identifiant
Dim Cel As Range
Set Cel = Sheets("Equipe").Range("D56:F75").Find(What:=Me.ComboBox2, _
LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, MatchCase:=True, SearchFormat:=False)
'On selectionne l'identifiant
Cel.Select
If Me.ComboBox1.Value = Range("D56") Then
a = ActiveCell.Offset(0, -1).Value
ElseIf Me.ComboBox1.Value = Range("E56") Then
a = ActiveCell.Offset(0, -2).Value
ElseIf Me.ComboBox1.Value = Range("F56") Then
a = ActiveCell.Offset(0, -3).Value
Else
End If
'on va dans la page activité
Sheets("BDD_CCompétence").Select
Dim MA As Range
Set MA = Sheets("BDD_CCompétence").Range("B:E").Find(What:=a, _
LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, MatchCase:=True, SearchFormat:=False)
Sheets("BDD_CCompétence").Activate
MA.Select
'on selectionne la bonne case
If Me.ComboBox1.Value = Range("D56") Then
ActiveCell.Offset(0, 1).Select
ElseIf Me.ComboBox1.Value = Range("E56") Then
ActiveCell.Offset(0, 2).Select
ElseIf Me.ComboBox1.Value = Range("F56") Then
ActiveCell.Offset(0, 3).Select
Sheets("Equipe").Activate
Else
End If
ActiveCell.Value = TextBox2.Value
Sheets("Equipe").Activate
Unload modificationcc
End Sub
Je vous remercie d'avance,
Damien
Bonsoir
Ton fichier serait plus utile
Voilà, j'ai édité le message et rajouté un morceau du fichier. J'ai éffacé certaines données.
+Seules les boutons aptitudes génèrales et particuliéres sont activés. Ils sont reliés à la base de donnée BDD_comp et BDD_ccompétence.
+Il y a un bouton modification. il y a deux combobox la première charge l'une charge le titre des colonnes catégorie compétence et l'autre en fonction de la compétence choisi selectionne la bonne colonne.
Dans le formulaire, il y a une fonction recherche qui permet de déterminer l'identifiant. Ce qui permet deux choses supprimer la personne ayant cette compétence dans la base de donnée ou de modifier l'intitulé.
En théorie, les codes fonctionnes mais la page rame. Je voulais savoir si il etait possible d'améliorer la rapidité de la chose. Si il existait un code comme ci dessus moins lourd.
Bonsoir à tous,
mertix, il y a un mot de passe à l'ouverture de ton fichier.
Sinon, pour remplir ton combobox, tu peux optimiser ton code comme ceci :
Private Sub UserForm_Initialize()
Dim Cell As Range
For Each Cell In Sheets("Equipe").Range("D56:F56")
ComboBox1.AddItem Cell
Next
End SubBonjour,
Voilà, j'ai supprimé le mot de passe du fichier.
Je vous remercie pour votre réponse!