VBA alimentation d'une combobox

Résolu
trinit@ Messages postés 123 Statut Membre -  
trinit@ Messages postés 123 Statut Membre -
Bonjour,

Je reviens vers la communauté pour un soucis d'alimentation d'une combobox multicolonnes. J'ai testé plusieurs scripts, mais impossible d'afficher ce que je souhaite, la combobox reste désespérément vide. Je vous joins le fichier.

http://ww38.toofiles.com/fr/oip/documents/xlsm/tableurfinal.html

(Attention, le code de l'UserForm2 est dégeu, c'est là que je travaille ;) )

Sur la page "Calcul des produits", j'ai créé un bouton ajouter un produit. Je voudrais que le combobox de l'UserForm soit alimenté par le tableau "Produits - Ne pas supprimer", donc avoir 5 colonnes avec la possibilité de sélectionner une ligne dans la liste déroulante qui s'affiche.

La ligne sélectionnée, avec un autre clique sur le bouton OK, viendrais s'ajouter en dessous du tableau des produits déjà inscrit dans la feuille "Calcul des produits". Mais seul le nom du produit viendrais s'afficher dans ce dernier tableau.

Ca va faire maintenant 5 jours que j'essaye des morceaux de codes, mais sans résultats. L'erreur viens donc de moi :/ mais un coup de main serait le bienvenue...

6 réponses

  1. trinit@ Messages postés 123 Statut Membre 8
     
    nobody for me ? (Je sais, no stress, mais j'y peux rien je suis comme ça :/ )
    0
  2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    Au moins pour commencer a esperer.

    Private Sub UserForm_Activate()
    Dim Plage, NbLigne

    With Worksheets("Produits - Ne pas supprimer").Activate
    'Derniere ligne colonne B
    NbLigne = WorksheetFunction.CountA(Columns("B:B"))
    'Page de cellules
    Plage = Range(Cells(2, 1), Cells(NbLigne, 5)).Address
    End With
    'Nombre de colonne combobox
    ComboBox1.ColumnCount = 5
    'largeur Colonnes
    ComboBox1.ColumnWidths = "50 pt;50 pt;50 pt;50 pt;50 pt"

    'Entetes de colonne
    ComboBox1.ColumnHeads = True
    'Source combobox
    ComboBox1.RowSource = Plage
    End Sub

    Private Sub ComboBox1_Click()
    'Affichage ligne choisie
    With ComboBox1
    .Text = .Column(0, .ListIndex) & " - " & _
    Format(.Column(1, .ListIndex), "0.00") & " - " & _
    Format(.Column(2, .ListIndex), "0.00") & " - " & _
    Format(.Column(3, .ListIndex), "0.00") & " - " & _
    Format(.Column(4, .ListIndex), "0.00") & " - "
    End With
    End Sub

    A+
    0
  3. trinit@ Messages postés 123 Statut Membre 8
     
    Merci f894009 ! Pile ce qu'il me fallait ! Ce tableur est mon rapport final de BTS, je desesperait a l'idée de devoir le fausser à cause de ce VBA... merci !
    0
  4. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    Mais seul le nom du produit viendrais s'afficher dans ce dernier tableau.

    Quel tableau??????
    0
    1. trinit@ Messages postés 123 Statut Membre 8
       
      C'est le premier tableau de la feuille "Calcul des produits". Ce tableau comporte trois colonnes : le nom (ce qui serait sélectionné dans le combobox viendrait s'ajouter à la suite), le prix, fixé manuellement par l'utilisateur et la rpiorité (ça aussi je gère).
      0
    2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,
      Ajout par insertion ligne?
      0
    3. trinit@ Messages postés 123 Statut Membre 8
       
      Exactement, je pense à un truc du genre "row +1" mais impossible de savoir où placer ça :/
      0
    4. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,
      Je fais
      0
    5. trinit@ Messages postés 123 Statut Membre 8
       
      Tu sais que tu me sauves là ?
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re

    'declaration pour tout l'Userform
    Dim Prod_a_ajouter

    'Bouton OK
    Private Sub CommandButton1_Click()
    Dim x As Integer
    Dim c As Range, PCVideA

    'Selection de l'onglet
    Worksheets("Calcul des produits").Select
    'Recherche cellule vide colonne A
    Set c = IIf(Range("A5") = "", Range("A5"), Range("A4").End(xlDown))
    PCVideA = c.Row + 1
    'Insertion ligne
    Rows(PCVideA & ":" & PCVideA).Insert Shift:=xlDown
    'Ecriture Produit
    Cells(PCVideA, 1) = Prod_a_ajouter
    'Encadrement cellules
    Range("A" & PCVideA & ":C" & PCVideA).Select
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
    .LineStyle = xlContinuous
    .ColorIndex = 0
    .TintAndShade = 0
    .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeTop)
    .LineStyle = xlContinuous
    .ColorIndex = 0
    .TintAndShade = 0
    .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeBottom)
    .LineStyle = xlContinuous
    .ColorIndex = 0
    .TintAndShade = 0
    .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeRight)
    .LineStyle = xlContinuous
    .ColorIndex = 0
    .TintAndShade = 0
    .Weight = xlThin
    End With
    With Selection.Borders(xlInsideVertical)
    .LineStyle = xlContinuous
    .ColorIndex = 0
    .TintAndShade = 0
    .Weight = xlThin
    End With
    With Selection.Borders(xlInsideHorizontal)
    .LineStyle = xlContinuous
    .ColorIndex = 0
    .TintAndShade = 0
    .Weight = xlThin
    End With
    End Sub

    Modife pour recuperer le Nom Produit
    Private Sub ComboBox1_Click()
    'Affichage ligne choisie
    With ComboBox1
    .Text = .Column(0, .ListIndex)
    'Nom du produit a ajouter
    Prod_a_ajouter = .Text
    .Text = .Text & " - " & _
    Format(.Column(1, .ListIndex), "0.00") & " - " & _
    Format(.Column(2, .ListIndex), "0.00") & " - " & _
    Format(.Column(3, .ListIndex), "0.00") & " - " & _
    Format(.Column(4, .ListIndex), "0.00")
    End With
    End Sub

    Bonne suite
    0
    1. trinit@ Messages postés 123 Statut Membre 8
       
      Maintenant j'ai bien le userform et une ligne qui s'affiche en dessous du tableau, mais du coup le combobox est vide... :/ j'ai tenté un mix des deux mais je ne trouve rien. Est-ce que ton oeil éclairé pourrait remixer la sauce ?
      Merci pour le travail que tu fais !
      0
    2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,

      Un mix des deux quoi???
      0
    3. trinit@ Messages postés 123 Statut Membre 8
       
      des deux codes que tu as écris.avec le premier code, j'avais le combobx plein. Maintenant, j'ai le tableau. Mais plus le combobox est vide :/ .
      0
  7. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    Remplace par celui-ci

    'declaration pour tout l'Userform
    Dim Prod_a_ajouter

    Private Sub CommandButton1_Click()
    Dim PCVideA

    'Selection de l'onglet
    Worksheets("Calcul des produits").Select
    'Recherche cellule vide colonne A
    PCVideA = Columns(1).Find("", Range("A4").End(xlUp), , , xlByRows).Row
    'Insertion ligne
    Rows(PCVideA & ":" & PCVideA).Insert Shift:=xlDown
    'Ecriture Produit
    Cells(PCVideA, 1) = Prod_a_ajouter
    'Encadrement cellules
    Range("A" & PCVideA & ":C" & PCVideA).Select
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
    .LineStyle = xlContinuous
    .ColorIndex = 0
    .TintAndShade = 0
    .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeTop)
    .LineStyle = xlContinuous
    .ColorIndex = 0
    .TintAndShade = 0
    .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeBottom)
    .LineStyle = xlContinuous
    .ColorIndex = 0
    .TintAndShade = 0
    .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeRight)
    .LineStyle = xlContinuous
    .ColorIndex = 0
    .TintAndShade = 0
    .Weight = xlThin
    End With
    With Selection.Borders(xlInsideVertical)
    .LineStyle = xlContinuous
    .ColorIndex = 0
    .TintAndShade = 0
    .Weight = xlThin
    End With
    With Selection.Borders(xlInsideHorizontal)
    .LineStyle = xlContinuous
    .ColorIndex = 0
    .TintAndShade = 0
    .Weight = xlThin
    End With
    End Sub

    Private Sub ComboBox1_Click()
    'Affichage ligne choisie
    With ComboBox1
    .Text = .Column(0, .ListIndex)
    'Nom du produit a ajouter
    Prod_a_ajouter = .Text
    .Text = .Text & " - " & _
    Format(.Column(1, .ListIndex), "0.00") & " - " & _
    Format(.Column(2, .ListIndex), "0.00") & " - " & _
    Format(.Column(3, .ListIndex), "0.00") & " - " & _
    Format(.Column(4, .ListIndex), "0.00")
    End With
    End Sub

    Private Sub UserForm_Activate()
    Dim Plage, NbLigne

    With Worksheets("Produits - Ne pas supprimer").Activate
    'Derniere ligne colonne B
    NbLigne = WorksheetFunction.CountA(Columns("B:B"))
    'Page de cellules
    Plage = Range(Cells(2, 1), Cells(NbLigne, 5)).Address
    End With
    'Nombre de colonne combobox
    ComboBox1.ColumnCount = 5
    'largeur Colonnes
    ComboBox1.ColumnWidths = "50 pt;50 pt;50 pt;50 pt;50 pt"

    'Entetes de colonne
    ComboBox1.ColumnHeads = True
    'Source combobox
    ComboBox1.RowSource = Plage
    End Sub

    J'ai retrouve une formule de recherche en colonne plus simple.
    0
    1. trinit@ Messages postés 123 Statut Membre 8
       
      Génial, ça marche ! Merci milles fois, je te revaudrais ça sur CCM !
      0
    2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,
      Content de vous avoir rendu service.

      Bonne suite
      0
    3. trinit@ Messages postés 123 Statut Membre 8
       
      Marci, vous aussi !
      0