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

  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 !

  7. #7
    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
    En fait avec ton code, ça ne fonctionne pas j'ai un bug sur ces lignes combo2 (ou meme si j'écris combobox2) sans rien derrière.

    Du coup j'ai fait avec l'enregistreur de macro, c'est surement un peu plus lourd, mais ça fonctionne. Si tu penses pouvoir simplifier, je suis preneur ! Dans tous les cas merci pour ton aide, sans toi je n'y serai pas arrivé

    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
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    'Pour le formulaire
     
    Private Sub UserForm_Initialize()
     
    ComboBox2.RowSource = ("l_tiers")
    ComboBox3.RowSource = ("l_categories")
    ComboBox4.RowSource = ("l_postes")
     
    End Sub
     
     
     
    '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").Select
        Columns("E:E").Select
        ActiveWorkbook.Worksheets("Catégories").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Catégories").Sort.SortFields.Add Key:=Range("E1") _
            , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
            xlSortTextAsNumbers
        With ActiveWorkbook.Worksheets("Catégories").Sort
            .SetRange Range("E2:E65536")
            .Header = xlNo
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
        Sheets("Bilan").Select
            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").Select
        Columns("A:A").Select
        ActiveWorkbook.Worksheets("Catégories").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Catégories").Sort.SortFields.Add Key:=Range("A1") _
            , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
            xlSortTextAsNumbers
        With ActiveWorkbook.Worksheets("Catégories").Sort
            .SetRange Range("A2:A65536")
            .Header = xlNo
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
        Sheets("Bilan").Select
            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").Select
        Columns("C:C").Select
        ActiveWorkbook.Worksheets("Catégories").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Catégories").Sort.SortFields.Add Key:=Range("C1") _
            , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
            xlSortTextAsNumbers
        With ActiveWorkbook.Worksheets("Catégories").Sort
            .SetRange Range("C2:C65536")
            .Header = xlNo
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
        Sheets("Bilan").Select
            Case vbNo
     
     End Select
     
    Else
     
     
    End If
     
     
    End Sub
     
     
     
     
     
     
     
    'pour afficher textbox 1 en euro
            Private Sub TextBox1_Enter()
                TextBox1.Text = ValEuros(TextBox1.Text)
            End Sub
            Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
                KeyAscii = AutoriseCaract(KeyAscii)
            End Sub
     
            Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
                TextBox1.Text = ValEuros(TextBox1.Text, True)
            End Sub
     
             Private Function ValEuros(ByVal T As String, Optional E As Boolean) As Variant
                If E Then
                    ValEuros = Format(CCur("0" & Trim(T)), "0.00 €")
                Else
                    ValEuros = CCur("0" & Trim(Replace(T, "€", "")))
                    If ValEuros = 0 Then ValEuros = ""
                End If
            End Function
     
            Private Function AutoriseCaract(ByVal C As Integer) As Integer
                Select Case C
                Case 46         'le point en virgule
                    AutoriseCaract = 44
                Case 44, 48 To 57  'les chiffres et la virgule
                    AutoriseCaract = C
                End Select
            End Function
     
     
    'Pour le bouton SAISIR
     
    Private Sub CommandButton1_Click()
     
        Dim l As Integer
     
      If MsgBox("Confirmez-vous cette saisi ?", vbYesNo, "Demande de confirmation d’ajout") = vbYes Then
     
        'Saisi vers Compte courant CA
     
            l = Sheets("Relevé").Range("a65536").End(xlUp).Row + 1 'Pour placer le nouvel enregistrement à la première ligne de tableau non vide
     
            Sheets("Relevé").Range("a" & l).Value = Calendar1
            Sheets("Relevé").Range("b" & l).Value = ComboBox2
            Sheets("Relevé").Range("c" & l).Value = ComboBox3
            Sheets("Relevé").Range("d" & l).Value = ComboBox4
     
            Sheets("Relevé").Range("h" & l).Value = TextBox3
     
            'Variable Recette / Dépense
            If OptionButton1.Value = True Then
                Sheets("Relevé").Range("f" & l).Value = ValEuros(TextBox1.Text)
            End If
     
            If OptionButton2.Value = True Then
                Sheets("Relevé").Range("e" & l).Value = ValEuros(TextBox1.Text)
            End If
     
      End If
    End Sub
     
     
    'Pour le bouton Quitter
     
    Private Sub CommandButton3_Click()
     
        'Tri descendant des feuilles
     
        With Worksheets("Relevé").Sort
        .SortFields.Clear
        .SortFields.Add Key:=Sheets("Relevé").Range("A4"), _
            SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
        .SetRange Sheets("Relevé").Range("A4:H65536")
        .Header = xlYes
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
        End With
     
     
        'Quitter
        Unload Me
     
    End Sub

  8. #8
    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
    Citation Envoyé par grhum7 Voir le message
    En fait avec ton code, ça ne fonctionne pas j'ai un bug sur ces lignes combo2 (ou meme si j'écris combobox2) sans rien derrière.


    Combo2 appel le sub dans le module je l'ai nommé combo2 pour le faire correspondre au combobox2 mais je pouvais l'appeler TOTO !

    Bon pour simplifier dans ton userform tu vas supprimer tous ce qui correspond aux combobox et l'userforminitialise tu as dedans et tu vas placé ceci:

    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
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    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
     
    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
    donc ici tu n'as plus de module et fait l'essai !

    voici

  9. #9
    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
    Merci Jijie !

    Super sympa de ta part, et merci pour la leçon

    grhum7

+ 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, 16h02
  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, 12h21
  3. Réponses: 4
    Dernier message: 19/10/2008, 10h25
  4. Affichage de données dans liste déroulante
    Par marcGR dans le forum IHM
    Réponses: 3
    Dernier message: 13/06/2008, 17h56
  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, 13h54

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