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 :

Ajout nouvelle donnée dans liste déroulante Userform/combobox [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 9
    Par défaut Ajout nouvelle donnée dans liste déroulante Userform/combobox
    Bonjour, novice dans le VBA, j'essaie de comprendre toutes les subtilités de ce langage et toutes les possibilités.
    Mon souci que je n'arrive pas à résoudre malgré plusieurs heures de recherche sur le net (j'ai peut être aussi mal cherché !) est le suivant :
    Dans un formulaire VBA, j'ai plusieurs combobox. La source de ces listes déroulantes est dans une feuille "Catégories" avec des listes nommées.
    Lors de la saisi dans le formulaire, j'aimerai qu'un message (msgbox du type "voulez vous ajouter ce terme à la liste ?) apparaisse si le terme tapé de ces combobox (2, 3 et 4) n'est pas présent dans les données de la feuille "catégories" et qu'il y ait possibilité de la copier dans la colonne correspondante en respectant l'ordre alphabétique.

    Pour que ça soit plus clair pour vous, voici mon fichier : Grhumtest.rar

    Merci de votre aide, et si vous pouviez fournir quelques explications ça me permettrait de comprendre ce que je dois faire.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 473
    Par défaut
    salut,

    ne pouvant pas ouvrir les .rar il m'est difficile de tout comprendre!

    tes combobox sont chargé ds la feuille "catégorie" mais quelle colonne pour chacun d'eux?

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 9
    Par défaut
    Ok je l'ai mis en ZIP, j'espère que tu pourras l'ouvrir. Grhumtest1.zip

    Sinon pour répondre à ta question :
    Source Combobox2 colonne E sous le nom : l_tiers
    Source Combobox3 colonne A sous le nom l_categories
    Source combobox4 colonne C sous le nom l_postes



    Merci pour ton aide

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 473
    Par défaut
    Dans un module :

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    Option Explicit
     
    Sub Combo2()
     
    Dim DerLigne As Integer
    Dim Cell As Variant
    Dim i As Integer, j As Integer
    Dim strTemp As String
     
     DerLigne = Sheets("Catégories").Range("e65536").End(xlUp).Row
     
     
     
     'Supprime les données existantes dans le ComboBox
        UserForm1.ComboBox2.Clear
     
        'Boucle sur les cellules de la plage L2:L9232 pour
        'alimenter le ComboBox
        For Each Cell In Worksheets("Catégories").Range("e2:e" & DerLigne)
        'MsgBox Cell1(0, 12)
            UserForm1.ComboBox2 = Cell
     
     
            'remplissage sans doublon
                If UserForm1.ComboBox2.ListIndex = -1 Then
                    UserForm1.ComboBox2.AddItem Cell
     
     
            End If
    Next Cell
     
     
    'Tri le contenu du ComboBox par ordre alphabétique
        With UserForm1.ComboBox2
            For i = 0 To .ListCount - 1
                For j = 0 To .ListCount - 1
                    If .List(i) < .List(j) Then
                        strTemp = .List(i)
                        .List(i) = .List(j)
                        .List(j) = strTemp
                    End If
                Next j
            Next i
        End With
     
                UserForm1.ComboBox2 = ""
     
     
    End Sub
     
    Sub combo3()
    Dim DerLigne As Integer
    Dim Cell As Variant
    Dim i As Integer, j As Integer
    Dim strTemp As String
     
     DerLigne = Sheets("Catégories").Range("a65536").End(xlUp).Row
     
     
     
     'Supprime les données existantes dans le ComboBox
        UserForm1.ComboBox3.Clear
     
        'Boucle sur les cellules de la plage L2:L9232 pour
        'alimenter le ComboBox
        For Each Cell In Worksheets("Catégories").Range("a2:a" & DerLigne)
        'MsgBox Cell1(0, 12)
            UserForm1.ComboBox3 = Cell
     
     
            'remplissage sans doublon
                If UserForm1.ComboBox3.ListIndex = -1 Then
                    UserForm1.ComboBox3.AddItem Cell
     
     
            End If
    Next Cell
     
     
    'Tri le contenu du ComboBox par ordre alphabétique
        With UserForm1.ComboBox3
            For i = 0 To .ListCount - 1
                For j = 0 To .ListCount - 1
                    If .List(i) < .List(j) Then
                        strTemp = .List(i)
                        .List(i) = .List(j)
                        .List(j) = strTemp
                    End If
                Next j
            Next i
        End With
     
                UserForm1.ComboBox3 = ""
     
     
    End Sub
    Sub combo4()
     
    Dim DerLigne As Integer
    Dim Cell As Variant
    Dim i As Integer, j As Integer
    Dim strTemp As String
     
     DerLigne = Sheets("Catégories").Range("c65536").End(xlUp).Row
     
     
     
     'Supprime les données existantes dans le ComboBox
        UserForm1.ComboBox4.Clear
     
        'Boucle sur les cellules de la plage L2:L9232 pour
        'alimenter le ComboBox
        For Each Cell In Worksheets("Catégories").Range("c2:c" & DerLigne)
        'MsgBox Cell1(0, 12)
            UserForm1.ComboBox4 = Cell
     
     
            'remplissage sans doublon
                If UserForm1.ComboBox4.ListIndex = -1 Then
                    UserForm1.ComboBox4.AddItem Cell
     
     
            End If
    Next Cell
     
     
    'Tri le contenu du ComboBox par ordre alphabétique
        With UserForm1.ComboBox4
            For i = 0 To .ListCount - 1
                For j = 0 To .ListCount - 1
                    If .List(i) < .List(j) Then
                        strTemp = .List(i)
                        .List(i) = .List(j)
                        .List(j) = strTemp
                    End If
                Next j
            Next i
        End With
     
                UserForm1.ComboBox4 = ""
     
    End Sub
    Dans ton Userform :

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    Private Sub ComboBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Dim Cpt As String
    Dim Ci As Range
    Dim Der_Ligne As Integer
     
    Cpt = ComboBox2 ' recherche la pièce début
    'recherche du cpt dans la colonne A
    Set Ci = Sheets("Catégories").Columns("e:e").Find(What:=Cpt, LookAt:=xlWhole)
     
    'Si le cpt n'existe pas alors on vas à la première ligne vide
    'on lui donne le nom du cpt et on sélectionne la cellule
    If Ci Is Nothing Then
     Select Case MsgBox("Voulez vous ajouter ce tiers à la liste ?", vbYesNo Or vbExclamation Or vbMsgBoxRight Or vbMsgBoxRtlReading Or vbDefaultButton1, "Nouveau tiers !")
     
            Case vbYes
               Der_Ligne = Sheets("Catégories").Range("E65536").End(xlUp).Row + 1
                Sheets("Catégories").Cells(Der_Ligne, 5) = ComboBox2
                Combo2 ' on charge le comobox et on classe
            Case vbNo
     
     End Select
     
    Else
     
     
    End If
     
     
    End Sub
    Private Sub ComboBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Dim Cpt As String
    Dim Ci As Range
    Dim Der_Ligne As Integer
     
    Cpt = ComboBox3 ' recherche la pièce début
    'recherche du cpt dans la colonne A
    Set Ci = Sheets("Catégories").Columns("a:a").Find(What:=Cpt, LookAt:=xlWhole)
     
    'Si le cpt n'existe pas alors on vas à la première ligne vide
    'on lui donne le nom du cpt et on sélectionne la cellule
    If Ci Is Nothing Then
     Select Case MsgBox("Voulez vous ajouter cette catégorie à la liste ?", vbYesNo Or vbExclamation Or vbMsgBoxRight Or vbMsgBoxRtlReading Or vbDefaultButton1, "Nouvelle catégorie: " & ComboBox3)
     
            Case vbYes
               Der_Ligne = Sheets("Catégories").Range("a65536").End(xlUp).Row + 1
                Sheets("Catégories").Cells(Der_Ligne, 1) = ComboBox3
                combo3 ' on charge le comobox et on classe
            Case vbNo
     
     End Select
     
    Else
     
     
    End If
     
     
    End Sub
    Private Sub ComboBox4_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Dim Cpt As String
    Dim Ci As Range
    Dim Der_Ligne As Integer
     
    Cpt = ComboBox4 ' recherche la pièce début
    'recherche du cpt dans la colonne A
    Set Ci = Sheets("Catégories").Columns("c:c").Find(What:=Cpt, LookAt:=xlWhole)
     
    'Si le cpt n'existe pas alors on vas à la première ligne vide
    'on lui donne le nom du cpt et on sélectionne la cellule
    If Ci Is Nothing Then
     Select Case MsgBox("Voulez vous ajouter ce poste à la liste ?", vbYesNo Or vbExclamation Or vbMsgBoxRight Or vbMsgBoxRtlReading Or vbDefaultButton1, "Nouveau poste: " & ComboBox4)
     
            Case vbYes
               Der_Ligne = Sheets("Catégories").Range("a65536").End(xlUp).Row + 1
                Sheets("Catégories").Cells(Der_Ligne, 1) = ComboBox4
                combo4 ' on charge le comobox et on classe
            Case vbNo
     
     End Select
     
    Else
     
     
    End If
     
     
    End Sub
     
    Private Sub UserForm_Initialize()
    'on charge les comobox et on classe
    Combo2 
    combo3
    combo4
     
    End Sub

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 9
    Par défaut
    Super ça fonctionne, un grand merci jijie !!!!

    j'ai dû changer 2/3 trucs de ton code : les lignes "on charge la combobox et on classe" et une erreur concernant la colonne cible.

    et j'ai rajouté les lignes pour la source et le classement !

    Par contre, j'ai encore un souci pour le classement. Si je ne suis pas sur le feuille "Catégories" il y a un bug pour le tri, mais si je suis sur cette feuille, il n'y a plus de problème. Comment faire pour que le tri se fasse automatiquement sans avoir besoin de basculer sur cette feuille, je veux rester sur la feuille bilan.

    Merci

    Voici le code rectifié et avec ce problème de tri
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    'Pour Ajouter données dans listes "Catégories"
            Private Sub ComboBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
            Dim Cpt As String
            Dim Ci As Range
            Dim Der_Ligne As Integer
     
            Cpt = ComboBox2 ' recherche la pièce début
            'recherche du cpt dans la colonne E
            Set Ci = Sheets("Catégories").Range("l_tiers").Find(What:=Cpt, LookAt:=xlWhole)
     
            'Si le cpt n'existe pas alors on vas à la première ligne vide
            'on lui donne le nom du cpt et on sélectionne la cellule
            If Ci Is Nothing Then
             Select Case MsgBox("Voulez vous ajouter ce tiers à la liste ?", vbYesNo Or vbMsgBoxRight Or vbDefaultButton1 Or vbQuestion, "Nouveau tiers !")
     
                    Case vbYes
                       Der_Ligne = Sheets("Catégories").Range("E65536").End(xlUp).Row + 1
                        Sheets("Catégories").Cells(Der_Ligne, 5) = ComboBox2
                        ComboBox2.RowSource = ("l_tiers") ' on charge le combobox et on classe
                        Sheets("Catégories").Range("l_tiers").Select
                        Selection.Sort Key1:=Range("e1")
                    Case vbNo
     
             End Select
     
            Else
     
     
            End If
     
     
            End Sub
            Private Sub ComboBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
            Dim Cpt As String
            Dim Ci As Range
            Dim Der_Ligne As Integer
     
            Cpt = ComboBox3 ' recherche la pièce début
            'recherche du cpt dans la colonne A
            Set Ci = Sheets("Catégories").Range("l_categories").Find(What:=Cpt, LookAt:=xlWhole)
     
            'Si le cpt n'existe pas alors on vas à la première ligne vide
            'on lui donne le nom du cpt et on sélectionne la cellule
            If Ci Is Nothing Then
             Select Case MsgBox("Voulez vous ajouter cette catégorie à la liste ?", vbYesNo Or vbMsgBoxRight Or vbDefaultButton1 Or vbQuestion, "Nouvelle catégorie !")
     
                    Case vbYes
                       Der_Ligne = Sheets("Catégories").Range("a65536").End(xlUp).Row + 1
                        Sheets("Catégories").Cells(Der_Ligne, 1) = ComboBox3
                        ComboBox3.RowSource = ("l_categories") ' on charge le combobox et on classe
                        Sheets("Catégories").Range("l_categories").Select
                        Selection.Sort Key1:=Range("A1")
                    Case vbNo
     
             End Select
     
            Else
     
     
            End If
     
     
            End Sub
            Private Sub ComboBox4_Exit(ByVal Cancel As MSForms.ReturnBoolean)
            Dim Cpt As String
            Dim Ci As Range
            Dim Der_Ligne As Integer
     
            Cpt = ComboBox4 ' recherche la pièce début
            'recherche du cpt dans la colonne C
            Set Ci = Sheets("Catégories").Range("l_postes").Find(What:=Cpt, LookAt:=xlWhole)
     
            'Si le cpt n'existe pas alors on vas à la première ligne vide
            'on lui donne le nom du cpt et on sélectionne la cellule
            If Ci Is Nothing Then
             Select Case MsgBox("Voulez vous ajouter ce poste à la liste ?", vbYesNo Or vbMsgBoxRight Or vbDefaultButton1 Or vbQuestion, "Nouveau poste !")
     
                    Case vbYes
                       Der_Ligne = Sheets("Catégories").Range("c65536").End(xlUp).Row + 1
                        Sheets("Catégories").Cells(Der_Ligne, 3) = ComboBox4
                        ComboBox4.RowSource = ("l_postes") ' on charge le combobox et on classe
                        Sheets("Catégories").Range("l_postes").Select
                        Selection.Sort Key1:=Range("C1")
                    Case vbNo
     
             End Select

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 473
    Par défaut
    ComboBox2.RowSource = ("l_tiers") ' on charge le combobox et on classe
    je pense que ton problème est de la!!

    si j'avais enlevé ton row source c'était bien pour ça !

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

Discussions similaires

  1. [MySQL] Récupération des données dans liste déroulante dynamique
    Par shenmicke dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 02/09/2009, 17h02
  2. [MySQL] Selectionner bonne donnée dans liste déroulante
    Par rastacouaire dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 23/02/2009, 13h21
  3. Réponses: 4
    Dernier message: 19/10/2008, 11h25
  4. Affichage de données dans liste déroulante
    Par marcGR dans le forum IHM
    Réponses: 3
    Dernier message: 13/06/2008, 18h56
  5. [PHP-JS] Sélection de données dans liste déroulante
    Par guigui69 dans le forum Langage
    Réponses: 2
    Dernier message: 04/09/2007, 14h54

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