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 :

information concernant les menus déroulants


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 174
    Points : 53
    Points
    53
    Par défaut information concernant les menus déroulants
    bonjour,

    voici ce que je voudrais faire:



    mais alors je ne maitrise pas du tout les liste déroulante (maintenant les textbox je gère).
    De plus, je souhaite que la liste "station" reprenne des numéros de point de la feuille 1, et que la liste "référence" reprenne les même points sauf celui sélectionné en "station".

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Pas bien de faire un Up , le forum n'est pas un service express.

    Je vais commencer par te donner un lien dans lequel est expliqué les manipulations des contrôles dans un USF
    http://silkyroad.developpez.com/VBA/ControlesUserForm/

    Pour remplir un ComboBox avec des données se trouvant dans ton classeur, jette un oeil du côté de la propriété RowSource

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_Initialize()
    Me.ComboBox1.RowSource = "Feuil2!A2:A20"
    End Sub

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 174
    Points : 53
    Points
    53
    Par défaut
    Bon alors merci pour le tutoriel.

    voici le code que j'ai écrit mais alors je n'arrive pas à retirer la valeur qui a été selectionnée dans le premier combox.

    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
    17
    18
    19
    20
    'choix de la référence
    Private Sub ComboBox2_Change()
    Dim elment_combo1 As String
    elment_combo1 = ComboBox1.SelText
    Dim i As Integer
    For i = 1 To 4
    If ComboBox1.SelText <> elment_combo1 Then ComboBox2.AddItem (Feuil1.Range("A" & i).Value)
    Next i
    End Sub
     
     
    Private Sub UserForm_Initialize()
    Dim i As Integer
    Dim nbr_points As Integer
    nbr_points = Range("calcul1!C11").Value
     
    For i = 1 To nbr_points
    ComboBox1.AddItem (Feuil1.Range("A" & i).Value)
    Next i
    End Sub

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Attention : Si tu utilises RowSource pour renseigner ton combo, tu ne peux pas retirer d'item
    Si tu ne veux pas supprimer la donnée dans la feuille de calculs mais simplement la supprimer dans le combo, utilise Additem dans une boucle pour le renseigner. Quant à l'effacement de la donnée, tu peux le faire avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If ComboBox1.ListIndex > -1 Then _
       ComboBox1.RemoveItem ComboBox1.ListIndex
    ComboBox1.ListIndex = -1 'pour vider l'affichage
    End Sub
    Bonne soirée

  5. #5
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Ci-dessous un petit bout de code qui fonctionne

    Un UserForm avec 2 Combo, ComboBox1 et ComboBox2
    Les données sur la feuille 1, cellules A1 à A20

    A l'initialisation du UserForm, on charge le ComboBox1 avec toutes les données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_Initialize()
    Me.ComboBox1.RowSource = "Feuil1!A1:A20"
    End Sub
    Lors de la sélection d'un item dans le Combo1, on charge le Combo2 avec toutes les données sauf celle sélectionnée dans le Combo1
    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 ComboBox1_Change()
    Dim i As Integer, x As String
     
    Me.ComboBox2.Clear
    x = Me.ComboBox1.Value
     
    For i = 1 To 20
        If Sheets(1).Cells(i, 1).Text <> x Then
            Me.ComboBox2.AddItem Sheets(1).Cells(i, 1)
        End If
    Next i
     
    End Sub

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 174
    Points : 53
    Points
    53
    Par défaut
    alors je viens de tester en modifiant un petit peu pour l'adapter à mon projet.

    lorsque 1 est selectionné dans le premier combobox, le deuxième n'affiche rien.
    Si 2 est sélectionné dans le premier combobox, le deuxième affiche 1.
    Si 3 est sélectionné dans le premier combobox, le deuxième affiche 1-2.
    Si 4 est sélectionné dans le premier combobox, le deuxième affiche 1-2-3.

    or il faudrait que:
    Si 1 est sélectionné dans le premier combobox, le deuxième affiche 2-3-4.
    Si 2 est sélectionné dans le premier combobox, le deuxième affiche 1-3-4.
    Si 3 est sélectionné dans le premier combobox, le deuxième affiche 1-2-4.
    Si 4 est sélectionné dans le premier combobox, le deuxième affiche 1-2-3.

    Voici mon code

    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
    Private Sub ComboBox1_Change()
    Dim i As Integer, x As String, point As String, z As Integer
     
    point = Range("calcul1!C11").Value
    z = 17
     
    Me.ComboBox2.Clear
    x = Me.ComboBox1.Value
     
    For i = 1 To point
        If Sheets(2).Cells(z, 1).Text <> x Then
            Me.ComboBox2.AddItem Sheets(2).Cells(z, 1)
            z = z + 2
        End If
    Next i

  7. #7
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    La solution que je t'ai proposée te donne exactement le résultat que tu souhaites obtenir.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 174
    Points : 53
    Points
    53
    Par défaut
    oui je sais bien, mais je n'arrive pas à la boucler pour qu'elle fonctionne dans mon programme.

    rien qu'à l'initialisation du userform:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub UserForm_Initialize()
    Dim point As Integer, i As Integer, x As Integer
     
    point = Cells(11, 3).Value
    x = 17
     
        For i = 1 To point
            Me.ComboBox1.RowSource = Cells(x, 1)
            x = x + 2
        Next i
     
    End Sub

  9. #9
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    bonjour,
    Que veux tu faire avec ta boucle, je ne la comprends pas.

    Cordialement

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Bonjour Fred,
    De mon côté je comprends bien mais est-ce bien ce que jbggg veut faire ?
    @jbggg : Ton code renseigne le Combo avec les données situées toutes les deux lignes à partir de la ligne 17 jusqu'à la ligne Cells(11, 3).value * 2. Est-ce bien ce que tu veux faire ?

  11. #11
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    La propriété RowSource ne fonctionne pas comme tu essayes de l'utiliser !

    RowSource va remplire le Combo avec une plage de données --> A1:A10

    Dans ton cas tu remplis ton Combo, ligne par ligne, via une boucle --> A1 puis A2 puis A3 puis.....A10
    Dans ce cas il faut utiliser AddItem
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For i = 1 To point
            Me.ComboBox1.AddItem Cells(x, 1).Text
            x = x + 2
        Next i
    Tu saisis la différence ?

    EDIT : concernant ton second Combo, une première erreur que je constate dans ton code est la déclaration de la variable point, elle doit être de type Integer et pas de type String

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 174
    Points : 53
    Points
    53
    Par défaut
    ok merci je ne trouvais pas quelle extension mettre derrière mais alors ensuite pour le combobox2 ça ne fonctionne pas du tout avec ma boucle. Ca fait tjs comme j'ai indiqué ci dessus:

    lorsque 1 est selectionné dans le premier combobox, le deuxième n'affiche rien.
    Si 2 est sélectionné dans le premier combobox, le deuxième affiche 1.
    Si 3 est sélectionné dans le premier combobox, le deuxième affiche 1-2.
    Si 4 est sélectionné dans le premier combobox, le deuxième affiche 1-2-3.

  13. #13
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Quel code utilises-tu pour combobox2 ? Tout le code.
    A trois, on arrivera bien à comprendre ton problème, zut quoi !

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 174
    Points : 53
    Points
    53
    Par défaut
    voici mon code complet:

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Private Sub ComboBox1_Change()
    Dim i As Integer, x As String, point As Integer, z As Integer
     
    Me.ComboBox2.Clear
    x = Me.ComboBox1.Value
    point = Cells(11, 3).Value
    z = 17
     
     
        For i = 1 To point
            If Sheets(1).Cells(z, 1).Text <> x Then
                Me.ComboBox2.AddItem Sheets(1).Cells(z, 1)
                z = z + 2
            End If
        Next i
     
    End Sub
     
    Private Sub UserForm_Initialize()
    Dim point As Integer, i As Integer, x As Integer
     
    point = Cells(11, 3).Value
    x = 17
     
        For i = 1 To point
            Me.ComboBox1.AddItem Sheets(1).Cells(x, 1).Text
            x = x + 2
        Next i
     
    End Sub
    en gros le problème est que le combox2 se remplit bien sans la valeur selectionnée dans le combobox1 mais s'arrete à cette valeur

  15. #15
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Question subsidiaire : Comment sont organisées tes données sur la feuille 1.
    Ce que j'ai cru comprendre d'après ton code, est que chaque point est réparti sur 2 lignes. Mais l'organisation générale est nécessaire pour comprendre.
    A+

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 174
    Points : 53
    Points
    53
    Par défaut
    oui enfin sont répartis sur 2 lignes car les cellules sont fusionnées.

    voici la feuille1


  17. #17
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Ok. J'avais oublié ton tableau.
    Je prends un exemple.
    Dans combobox1 tu as renseigné tous tes N° de stations.
    Si tu sélectionnes une station, tu veux l'exclure de combobox2 et conserver toutes les autres. Si c'est ça, le plus simple est de renseigner Combobox2 exactement comme combobox1 puis de faire, dans combobox2, un remove sur l'index de la sélection dans Combobox1. Ce qui effacera la station sélectionnée, pas les autres.
    Est-ce bien ce que tu souhaites ? Sauras-tu faire ?
    A+

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 174
    Points : 53
    Points
    53
    Par défaut
    c'est tout à fait ça.

    alors je vais essayer de le faire par moi-même, juste une précision comment fait on pour faire un remove sur l'index de la sélection dans Combobox1

  19. #19
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Un bout de code qui pourrait t'aider
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub ComboBox2_Enter()
        ComboBox2.Clear
        For NoLig = 16 To Range("A65536").End(xlUp).Row Step 2
            ComboBox2.AddItem Cells(NoLig, 1)
        Next
        ComboBox2.RemoveItem (ComboBox1.ListIndex)
    End Sub
     
     
    Private Sub UserForm_Initialize()
        For NoLig = 16 To Range("A65536").End(xlUp).Row Step 2
            ComboBox1.AddItem Cells(NoLig, 1)
        Next
    End Sub

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 174
    Points : 53
    Points
    53
    Par défaut
    ok merci beaucoup c'est bon ça fonctionne. Voici mon code:

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
     
    Private Sub ComboBox2_Enter()
     
    Dim i As Integer, point As Integer, x As Integer
      ComboBox2.Clear
     
    point = Cells(11, 3).Value
    x = 17
     
        For i = 1 To point
            ComboBox2.AddItem Cells(x, 1)
            x = x + 2
        Next
        ComboBox2.RemoveItem (ComboBox1.ListIndex)
    End Sub
     
    Private Sub UserForm_Initialize()
    Dim point As Integer, i As Integer, x As Integer
     
    point = Cells(11, 3).Value
    x = 17
     
        For i = 1 To point
            Me.ComboBox1.AddItem Sheets(1).Cells(x, 1).Text
            x = x + 2
        Next i
     
    End Sub

Discussions similaires

  1. Information concernant les DNS
    Par agencep dans le forum 1&1
    Réponses: 2
    Dernier message: 11/03/2010, 15h10
  2. Les menus déroulants
    Par dot-_-net dans le forum Débuter
    Réponses: 3
    Dernier message: 10/11/2008, 15h25
  3. Gestion d'événements OnClick concernant les menus
    Par AL1986 dans le forum Langage
    Réponses: 13
    Dernier message: 17/08/2007, 16h03
  4. [XSLT] Bug IE sur les menus déroulant avec
    Par cassy dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 01/05/2007, 12h51

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