IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

remplir une combobox avec un tableau


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 97
    Par défaut remplir une combobox avec un tableau
    Bonjour,ja'i du mal à remplir ma combobox(cbxprix) avec les valeurs d'un tableau(prix)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Sub UserForm_Initialize()
    Dim prix As Variant
    Set prix = Range("a2:c2").Cells
    Do While i < UBound(prix) + 1
    travail.cbxprix.AddItem (prix(i))
    Loop
    End Sub
    ma userform s'appelle travail.quand j'arrive à ubound j'ai un message "incompatibilité du type".je ne sais pas utiliser ubound pour un tableau à 2 dimensions.
    merci de votre aide

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour,
    J'ai du mal a comprendre ce que tu veux faire, en faisant de cette façon tes prix vont êtres "mélangés" !
    Mais si c'est ce que tu veux...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim Cel as range
        For Each Cel In Range("A2:C2")
            cbxprix.AddItem Cel
        Next Cel
    A+

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 97
    Par défaut
    merci,mais j'ai pas compris pourquoi les prix seront mélanges?
    en faite le but de ma manip c'est de récupérer les valeurs des cellules dans ma cbxbox et après si je sélectionne une valeurs dans ma cbxbox,cette valeur je la met dans un textbox(jusque la ça va).en modifiant la valeur dans le textbox je voudrais que ça modifie dans la cellule directement.
    et le problème c'est que je ne sais pas comment récupéré ma cellule par rapport à la valeur du textbox.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Private Sub UserForm_Initialize()
    Dim Cel As Range
        For Each Cel In Range("c2:g2")
            cbxprix.AddItem Cel
        Next Cel
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Private Sub cbxprix_Change()
    txtprix.Text = cbxprix
    j'ai trouvé une méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub txtprix_Change()
    Cells(2, cbxprix.ListIndex + 3) = txtprix.Text
    End Sub
    ça marche mais peut être existe une autre solution.

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    CA NE SAIT PAS MARCHER
    Tu a des prix dans la colonne C, la colonne D, la colonne... g (c'est justement là que je veux dire que ce sera mélangé)
    et tu change TOUJOURS la cellule de la colonne B ??
    je ne comprend rien.
    Faudrait peut être expliquer un peu mieux.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 97
    Par défaut
    Donc j'ai ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    dim cel as range
    Private Sub UserForm_Initialize()
    cbxprix.Clear
     
        For Each Cel In Range("c1:g1")
            cbxprix.AddItem (Cel & " son prix est de " & Cel.Offset(1, 0))
        Next Cel 
    End Sub
    la je remplie ma combobox(cbxprix)avec du texte qui se trouve en Cel et avec la valeur de chaque Cel qui se trouve en Cel.Offset(1,0).
    jusque la tout va bien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Private Sub cbxprix_Change()
    txtprix.Text = Cel.Offset(1, 0)(cbxprix.ListIndex)
    Ici je veux récupéré la valeur du Cel.Offset(1,0)dans un textbox(txtbox) et par la suite si je veux changer cette valeur que ça change directement dans Cel.Offset(1,0)
    si quelqu'un pourrait m'aider,je bogue la dessus depuis hier.
    merci

  6. #6
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Pfffiiiit j'y comprend plus rien.. enfin soit.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    txtprix.Text = Cel.Offset(1, 0)(cbxprix.ListIndex)
    Si quelqu'un comprend ce qu'il veux faire qu'il prenne la relève.. merci.
    Moi j'abandonne.
    A+

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 97
    Par défaut
    ça marche pas mais merci comme même.

  8. #8
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Aller, ont va reprendre quand même
    Essaye d'expliquer ce que tu veux faire.
    Quoi tu veux mettre dans ton TextBox ?

  9. #9
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Bonjour,
    Je vais essayer d'aider le forestier a t'aider

    Pourquoi essaye tu d'utiliser la variable cel dans cbxprix_Change() alors quelle n'existe pas dans cette sub et ne représente absolument rien!

    Ton objectif si j'ai bien compris
    Tu as une combobox avec un produit et un prix. Tu veux pouvoir modifié le prix et que cela soit reporté dans ton tableau excel c'est bien ca? Je te suggère de faire un bouton indépendant du genre Modifier le Prix, la ca t'ouvre une fenêtre avec le produit (que tu récupère avec le cbxprix.ListIndex) et qui propose d'entrer un nouveau prix

    Exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    private sub modifPrix_click()
    dim rep as string
    dim flag as boolean
    flag=true
    do
       flag=false
       rep=inputbox("Entrer le prix en euro de " & Cells(1, cbxprix.ListIndex + 3) & " :")
     
       If rep="" then exit sub
       if not isnumeric(replace(rep,",",".")) then
          flag=true
          msgbox "Veuiller entrer une valeur numérique."
       end if
    loop while flag
    Cells(2, cbxprix.ListIndex + 3)=rep
    end sub
    En espérant que cbxprix.ListIndex + 3 te donne bien la colonne qui corespond a la ligne selectionné

    Edit j'ai toujours du mal avec les virgule pour les nombres décimaux, je ne sais jamais quand il faut utiliser un replace(saisie,",",".") pour remplacer les , par des points, la ou je suis tous les ordinateur utilise les . comme séparateur de décimale (merci les logiciel de calcul en convention anglosaxonne ) du coup je ne peux que imaginer les souci que cela occasionne

  10. #10
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour Krovax,
    Merci, ton intervention m'a incité à relire tout les postes à tête reposée.
    D'après ce que j'en ai (enfin) compris il veux un UF qui lui permet de modifier ses prix. Et il n'y à que l'écriture dans la feuille qui lui manque.

    calvi2002 : c'est ça ?
    Si oui, faut pas mettre la modification de la feuille dans le change du TextBox mais dans d'autre événement
    soit dans le KeyDown pour quand l'utilisateur tape ENTER.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        If KeyCode = 13 Then
            'Contrôle que le texte n'est pas vide
            If TextBox1 = "" Then Exit Sub
            'Recherche la cellule  en cour de modif et vérifie qu'elle a été modifiée
            If Val(Replace(TextBox1, ",", ".")) <> Val(Replace(Cells(1, cbxprix.ListIndex + 3), ",", ".")) Then
                Cells(1, cbxprix.ListIndex + 3) = Replace(TextBox1, ".", ",")
                'Modifie le comboBox.
                cbxprix.List(cbxprix.ListIndex) = Cells(1, cbxprix.ListIndex + 3) _
                    & " son prix est de " & Cells(2, cbxprix.ListIndex + 3)
            End If
        End If
    End Sub
    Soit dans le exit quand l'utilisateur clic sur un autre contrôle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
            'Contrôle que le texte n'est pas vide
            If TextBox1 = "" Then Exit Sub
            'Recherche la cellule en cour de modif et vérifie qu'elle a été modifiée
            If Val(Replace(TextBox1, ",", ".")) <> Val(Replace(Cells(1, cbxprix.ListIndex + 3), ",", ".")) Then
                Cells(1, cbxprix.ListIndex + 3) = Replace(TextBox1, ".", ",")
                'Modifie le comboBox.
                cbxprix.List(cbxprix.ListIndex) = Cells(1, cbxprix.ListIndex + 3) _
                    & " son prix est de " & Cells(2, cbxprix.ListIndex + 3)
            End If
    End Sub
    Ou bien dans les deux.
    Krovak : pour ta dernière remarque, je préfère ajuster le point/virgule d'office, surtout dans les cas de comparaison sur des textBox. (qui peu le plus peu le moins )
    A+

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 97
    Par défaut
    merci à tous les deux j'ai trouvé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Sub UserForm_Initialize()
    Text = " sa valeur est de => "
    Dim Cel, cellule As Range
    For Each Cel In Range("a1:bk1")
    If Cel.Text <> "" Then
            cbxcouleur.AddItem (Cel.Offset(1, 0) & Text & Cel)
        End If
        Next Cel
    next sub
    ensuite quand on clique sur la combobox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    UserForm1.txtprix.Visible = True
    Text = " sa valeur est de => "
    Tableau = Split(cbxcouleur, Text)
    Me.txtprix.Text = Tableau(1)
    et pour changer la valeur dans le txtbox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    Private Sub txtprix_Change()
    Dim plage As Range
    Text = " sa valeur est de => "
    Tableau = Split(cbxcouleur, Text)
    Set plage = Range("A2:bk2").Find(What:=Tableau(0), LookIn:=xlValues)
    plage.Offset(-1, 0) = txtprix.Text
    End Sub
    bon ici sur la 1 ligne j'ai la valeur et sur la 2 ligne le texte corespondant ,mais l'idée est la même.
    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Remplir une ComboBox avec une plage de cellule
    Par zazaraignée dans le forum Contribuez
    Réponses: 2
    Dernier message: 02/03/2012, 18h07
  2. [VBA-E] Comment remplir une comboBox avec une macro
    Par Tchupacabra dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/04/2007, 11h16
  3. [C#] Remplir une combobox avec le champs d'une table Access
    Par Damsou dans le forum Windows Forms
    Réponses: 4
    Dernier message: 23/06/2005, 15h31
  4. [VB.NET] Remplir une ComboBox avec une requete sql
    Par graphicsxp dans le forum Windows Forms
    Réponses: 6
    Dernier message: 22/03/2005, 15h29
  5. Réponses: 2
    Dernier message: 26/07/2004, 13h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo