VBA index equiv dans userForm

NAIM

XLDnaute Nouveau
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

  • RECHERCHE.xlsm
    21.8 KB · Affichages: 12

NAIM

XLDnaute Nouveau
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

  • RECHERCHE.xlsm
    25.9 KB · Affichages: 2

Dranreb

XLDnaute Barbatruc
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
 

Dranreb

XLDnaute Barbatruc
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:

Dranreb

XLDnaute Barbatruc
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.
 

NAIM

XLDnaute Nouveau
Bonjour DRANREB,
Encore moi je ne comprends pas c'est mon niveau debutant qui persiste, pourriez vous me résoudre ce PB car je teste ça fonctionne sur certain ligne par pour l'ensemble. exemple pour le poids de 5 Kg il ne fonctionne pas ????
Merci beaucoup.
 

Pièces jointes

  • Copie de RechercheV Equiv.xlsm
    33.3 KB · Affichages: 14

Dranreb

XLDnaute Barbatruc
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.
 

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16