VBA index equiv dans userForm

  • Initiateur de la discussion Initiateur de la discussion NAIM
  • 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 !

N

NAIM

Guest
Bonjour
,J'ai un userform et je souhaite remplir le COMBOBOX1 et le COMBOBOX 2 et le résultat s'affiche dans le textbox1 en cherchant les infos dans d'une feuille ci-joint PJ
 

Pièces jointes

Bonjour
,J'ai un userform et je souhaite remplir le COMBOBOX1 et le COMBOBOX 2 et le résultat s'affiche dans le textbox1 en cherchant les infos dans d'une feuille ci-joint PJ en plus je n'arrive pas a remplir le combobox 1
Merci pour votre aide.
 

Pièces jointes

Bonjour.
VB:
Option Explicit
Private Sub UserForm_Initialize()
   ComboBox1.RowSource = ""
   ComboBox1.List = WorksheetFunction.Transpose([REF])
   End Sub
Private Sub ComboBox1_Change()
   AfficheRésu
   End Sub
Private Sub ComboBox2_Change()
   AfficheRésu
   End Sub
Private Sub AfficheRésu()
   If ComboBox1.MatchFound And ComboBox2.MatchFound Then
      TextBox1.Text = Format([PRIX].Item(ComboBox2.ListIndex + 1, ComboBox1.ListIndex + 1).Value, "0.00 €")
   Else
      Me.TextBox1.Text = ""
      End If
   End Sub
 
Chez moi les listes des 2 ComboBox sont renseignées.
Renommez les de façon claire CBxRef et CBxCode. Ne leur mettez pas de propriété RowSource mais garnissez leur List avec les valeurs de plages nommées. Pour celle disposée horizontalement utilisez WorksheetFunction.Transpose, sinon il ne considère que sa seule 1ère ligne.
En ayant fait tout ça dans votre classeur par chance resté ouvert, le code modifié ainsi marche toujours :
VB:
Option Explicit
Private Sub UserForm_Initialize()
   CBxCode.List = [CODE].Value
   CBxRef.List = WorksheetFunction.Transpose([REF])
   End Sub
Private Sub CBxRef_Change()
   AfficheRésu
   End Sub
Private Sub CBxCode_Change()
   AfficheRésu
   End Sub
Private Sub AfficheRésu()
   If CBxRef.MatchFound And CBxCode.MatchFound Then
      TextBox1.Text = Format([PRIX].Item(CBxCode.ListIndex + 1, CBxRef.ListIndex + 1).Value, "0.00 €")
   Else
      Me.TextBox1.Text = ""
      End If
   End Sub
 
Dernière édition:
Vous pourriez aussi faire comme ça :
VB:
Option Explicit
Private RngPrix As Range
Private Sub UserForm_Initialize()
   Set RngPrix = [prix_]
   ComboBox1.RowSource = ""
   ComboBox2.RowSource = ""
   ComboBox1.List = WorksheetFunction.Transpose(RngPrix.Rows(0))
   ComboBox2.List = RngPrix.Columns(0).Value
   End Sub
Private Sub ComboBox1_Change()
   AfficheRésu
   End Sub
Private Sub ComboBox2_Change()
   AfficheRésu
   End Sub
Private Sub AfficheRésu()
   If ComboBox1.MatchFound And ComboBox2.MatchFound Then
      TextBox1.Text = Format(RngPrix.Item(ComboBox2.ListIndex + 1, ComboBox1.ListIndex + 1).Value, "0.00 €")
   Else
      Me.TextBox1.Text = ""
      End If
   End Sub
Personnellement je n'utilise jamais la propriété RowSource des ComboBox.
 
Et dans l'autre vous avez interverti les rôles respectifs de la 1ère ligne et de la 1ère colonne. Bon, ce sera ma dernière intervention, si vous ne suivez pas mes recommandations. Au lieu de les appeler ComboBox7 et ComboBox8 appelez les CBxPoids et CBxType bon sang !
Moi je change toujour partout la 1ère propriété (Name) de tous les objets VBA, et du coup je fais rârement ce genre d'erreur.
 
- 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
9
Affichages
310
  • Question Question
Microsoft 365 affichage userform
Réponses
4
Affichages
491
  • Question Question
XL 2019 User Form
Réponses
9
Affichages
443
Réponses
8
Affichages
346
Retour