Simplification code vba

  • Initiateur de la discussion Initiateur de la discussion Florian53
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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:
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
 
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
 
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:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
404
O
  • Question Question
Microsoft 365 Problème Exit sub
Réponses
9
Affichages
1 K
omario1995
O
Réponses
17
Affichages
2 K
W
Réponses
4
Affichages
3 K
WhatIsVBA
W
D
Réponses
0
Affichages
1 K
D
Réponses
1
Affichages
1 K
G
  • Question Question
Réponses
1
Affichages
771
Grouchet
G
Retour