Simplification code vba

Florian53

XLDnaute Impliqué
Bonjour au forum,

Je voudrais savoir si il y a une possibilité de simplifier le code ci dessous :

Code:
Dim Sh As Worksheet
Data = "aaa"
With USF.Controls("Frame" & 100).ComboBox105.Clear
    For Each Sh In Worksheets
        If InStr(1, UCase(Sh.Name), UCase(Data)) > 0 Then USF.Controls("Frame" & 100).ComboBox105.AddItem Sh.Name
    Next Sh
    Data = USF.Controls("Frame" & 100).ComboBox105.Value

Comme la combobox105 se situe dans la frame 100 je n'arrive pas à dialoguer avec celle ci si je ne spécifie pas le nom de la frame et je suis obligé de la rentrer à chaque fois sinon sa ne fonctionne pas.

Merci à vous
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
Devriez pouvoir déclarer une CBx As MSForms.ComboBox, faire
Set CBx = USF.Frame100.ComboBox105
Puis des CBx.Additem
Moi je préfèrerais tous mettre dans un petit tableau puis à la fin CBx.List = LeTablo
Aussi si vous enleviez .Clear, qui ne renvoie pas que je sache un objet utilisable derrière une instruction With, vous pourriez juste mettre un point : .Clear d'abord puis .List = LeTablo ou .AddItem …
 
Dernière édition:

Florian53

XLDnaute Impliqué
Merci Dranreb,

J'ai bien compris le fait de déclarer "CBx As MSForms.ComboBox", qui est une bonne solution car sa va bien abréger le code. Mais par contre j'ai un peu de mal a comprendre le ".clear"

Est ce un code comme celui ci, que vous voulez dire ?

Code:
CBx As MSForms.ComboBox
Dim Sh As Worksheet
Set CBx = USF.Frame100.ComboBox105
Data = "aaa"
    For Each Sh In Worksheets
CBx.Additem
        .If InStr(1, UCase(Sh.Name), UCase(Data)) > 0 Then CBx.Additem Sh.Name
    Next Sh
    Data = CBx.Value
 

Florian53

XLDnaute Impliqué
Donc si je comprends voici le code, ce code est à placé dans un module de classe du coup ou je peux le mettre ou je le souhaite ? cette à dire Userform ou Module?

Merci de ton aide

Code:
CBx As MSForms.ComboBox

Private sub test()
Dim Sh As Worksheet
CBx.Clear
Set CBx = USF.Frame100.ComboBox105
Data = "aaa"
    For Each Sh In Worksheets
        If InStr(1, UCase(Sh.Name), UCase(Data)) > 0 Then CBx.Additem Sh.Name
    Next Sh
    Data = CBx.Value
End sub
 

Dranreb

XLDnaute Barbatruc
Je n'ai jamais dis que ce code devait être dans un module de classe.
Une variable se déclare par une instruction Dim, Public ou Private.
Vous pouvez en déclarez plusieurs dans une de ces instructions :
Dim Sh As Worksheet, CBx As MSForms.ComboBox
CBx.Clear ne marchera pas avant l'assignation par Set.
 
Dernière édition:

Discussions similaires

Réponses
9
Affichages
883

Statistiques des forums

Discussions
312 201
Messages
2 086 164
Membres
103 149
dernier inscrit
Deepkneec