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 :

insérer dans combobox avec textboxvalue [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    retraitée
    Inscrit en
    Juin 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : retraitée

    Informations forums :
    Inscription : Juin 2006
    Messages : 147
    Par défaut insérer dans combobox avec textboxvalue
    bonjour,

    je voudrais insérer dans une listboxQte, la valeur saisie dans la TextBoxQte,
    j'y arrive parfaitement avec une comboboxQte mais souhaite simplifier la tâche à l'utilisateur en lui faisant simplement saisir dans une TextBoxQte la qté souhaitée plutôt que d'utiliser une combobox
    mais à chaque fois, j'ai une erreur 424 sur Qte_A_Inserer et je ne comprends pas où est le problème
    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
    'insertion dans la listboxQte au dessus de la ligne sélectionnée de la qté sélectionnée
     
    Dim Qte_A_Inserer As Range
     
          With TextBoxQte
          If TextBoxQte.Value <> "" Then
          Set Qte_A_Inserer = TextBoxQte.Value
        End If
        End With
     
    'code qui fonctionne avec la comboxboxQte :
     
         'With ComboBoxQte
        'If .ListIndex <> -1 Then
          '  Set Qte_A_Inserer = RgTextBoxQte(.ListIndex + 1)
        'End If
        ' End With
     
     Dim ligQte As Integer
     
         ligQte = ListBoxQte.ListCount 'Nombre de ligne dans la listbox
         posit = ListBoxQte.ListIndex
         ListBoxQte.AddItem " "
         For i = ligQte To posit + 1 Step -1
          For j = 0 To 0 ' 1 colonnes
                     ListBoxQte.List(i, j) = ListBoxQte.List(i - 1, j)
     
              Next j
         Next i
          ListBoxQte.List(posit, 0) = Qte_A_Inserer
     
    End Sub
    Merci par avance de votre aide

  2. #2
    Membre Expert Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Par défaut
    bonjour,

    à tester
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
         Dim ligQte As Integer, posit as integer
     
         ligQte = ListBoxQte.ListCount 'Nombre de ligne dans la listbox
         posit = ListBoxQte.ListIndex
         ListBoxQte.AddItem " "
         For i = ligQte To posit + 1 Step -1
              ListBoxQte.List(i, 0) = ListBoxQte.List(i - 1, 0)
         Next i
         ListBoxQte.List(posit, 0) = TextBoxQte.value

  3. #3
    Membre confirmé
    Femme Profil pro
    retraitée
    Inscrit en
    Juin 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : retraitée

    Informations forums :
    Inscription : Juin 2006
    Messages : 147
    Par défaut synchroniser l'affichage entre listbox
    bonjour Wilfried,

    merci c'est + que parfait
    dis moi, je voudrais, toujours pour simplifier et éviter les risques d'erreur, synchroniser l'affichage entre les ListBoxArtDes et ListBoxQte
    code initialisation formulaire :
    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
    Private Sub UserForm_Initialize()
     
    With Sheets("CodesFeux")
            Me.ComboBoxFeux.RowSource = .Name & "!" & .Range("A1:B" & .Range("A65536").End(xlUp).Row).Address
    End With
     
    With Sheets("articles")
        Set RgComboBoxArticle1 = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
        Set RgComboBoxArticle2 = .Range("B1:B" & .Range("B65536").End(xlUp).Row)
        Me.ComboBoxArticle.List = RgComboBoxArticle1.Value
    End With
     
    With Sheets("articles")
        Set RgComboBoxQte = .Range("F1:F" & .Range("F65536").End(xlUp).Row)
        Me.ComboBoxQte.List = RgComboBoxQte.Value
    End With
    End Sub
    code qui devrait synchroniser les 2 listboxes :

    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 ListBoxArtDes_Click()
     
    With ListBoxQte
    .TopIndex = ListBoxArtDes.TopIndex
    .ListIndex = ListBoxArtDes.ListIndex
    End With
    End Sub
    Private Sub ListBoxQte_Click()
     
    With ListBoxArtDes
    .TopIndex = ListBoxQte.TopIndex
    .ListIndex = ListBoxQte.ListIndex
    End With
    End Sub
    pourquoi ? qu'ai-je omis ?
    merci d'avance

  4. #4
    Membre Expert Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Par défaut
    re:

    dans le code de Userform, adpate les noms des objets

    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 ListBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        ListBox2.TopIndex = ListBox1.TopIndex
    End Sub
     
    Private Sub ListBox2_Change()
        ListBox1.ListIndex = ListBox2.ListIndex
    End Sub
    Private Sub ListBox1_Change()
        ListBox2.ListIndex = ListBox1.ListIndex
    End Sub
     
    Private Sub ListBox2_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        ListBox1.TopIndex = ListBox2.TopIndex
    End Sub

  5. #5
    Membre confirmé
    Femme Profil pro
    retraitée
    Inscrit en
    Juin 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : retraitée

    Informations forums :
    Inscription : Juin 2006
    Messages : 147
    Par défaut
    bon, j'ai adapté mais rien ne se passe, la sélection auto entre les 2 listes ne s'opère pas ?
    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 ListBoxArtDes_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        ListBoxQte.TopIndex = ListBoxArtDes.TopIndex
    End Sub
     
    Private Sub ListBoxQte_Change()
        ListBoxArtDes.ListIndex = ListBoxQte.ListIndex
    End Sub
    Private Sub ListBoxArtDes_Change()
        ListBoxQte.ListIndex = ListBoxArtDes.ListIndex
    End Sub
     
    Private Sub ListBoxQte_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        ListBoxArtDes.TopIndex = ListBoxQte.TopIndex
    End Sub
    où me trompe-je ???

  6. #6
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour le forum, fidecourt

    sans repondre à ton problème, je te conseille déjà de changer toutes les formules qui font référence à la dernière ligne, exemple, tu ecris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range("A1:B" & .Range("A65536").End(xlUp).Row).Address
    tu es sur excel 2010, comme 2007, il y plus de 65536 lignes, donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range("A1:B" & .Rows.Count).End(xlUp).Address
    et pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range ("A1:A" & .Range("A65536").End(xlUp).Row)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range("A1:A" & .Rows.Count).End(xlUp).Row
    pourquoi 2 fois with dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    With Sheets("articles")
        Set RgComboBoxArticle1 = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
        Set RgComboBoxArticle2 = .Range("B1:B" & .Range("B65536").End(xlUp).Row)
        Me.ComboBoxArticle.List = RgComboBoxArticle1.Value
    End With
     
    With Sheets("articles")
        Set RgComboBoxQte = .Range("F1:F" & .Range("F65536").End(xlUp).Row)
        Me.ComboBoxQte.List = RgComboBoxQte.Value
    End With
    il vaut mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    With Sheets("articles")
        Set RgComboBoxArticle1 = .Range("A1:A" & .Rows.Count).End(xlUp).Row
        Set RgComboBoxArticle2 = .Range("B1:B" & .Rows.Count).End(xlUp).Row
        Me.ComboBoxArticle.List = RgComboBoxArticle1.Value
        Set RgComboBoxQte = .Range("F1:F" & .Rows.Count).End(xlUp).Row
        Me.ComboBoxQte.List = RgComboBoxQte.Value
    End With
    deux lignes m'étonnent mais elles te sont peut-être utiles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set RgComboBoxArticle2 = .Range("B1:B" & .Rows.Count).End(xlUp).Row
    celle-ci, peut-être te sert t'elle par la suite sinon tu peux l'enlever
    et celle - ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.ComboBoxQte.List = RgComboBoxQte.Value
    alors que tu parles de listbox, enfin tu as certainement tes raisons
    quant à ta synchronisation, qu'entends-tu par là ?
    car ces codes :
    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 ListBoxArtDes_Click()
    With ListBoxQte
    .TopIndex = ListBoxArtDes.TopIndex
    .ListIndex = ListBoxArtDes.ListIndex
    End With
    End Sub
    Private Sub ListBoxQte_Click()
     
    With ListBoxArtDes
    .TopIndex = ListBoxQte.TopIndex
    .ListIndex = ListBoxQte.ListIndex
    End With
    End Sub
    se contentent de mettre l'index au meme numéro, mais je dis peut-être des bétises
    bonne journée, bon réveillon
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  7. #7
    Membre Expert Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Par défaut
    re:

    voila syncro lst_ essai.zip essai à regarder
    tu selectionnes dans une et ca selectionne dans l'autre, utilise les ascenseurs et bouge la souris dans la liste, ca recadre dans l'autre liste

  8. #8
    Membre confirmé
    Femme Profil pro
    retraitée
    Inscrit en
    Juin 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : retraitée

    Informations forums :
    Inscription : Juin 2006
    Messages : 147
    Par défaut
    Merci à tous les 2 pour votre aide,

    j'ai bien compris ton exemple Wilfried, mais dans mon cas, je ne peux initialiser le formulaire avec les ListBox au départ, puisqu'elles sont relatives au choix fait dans le ComboBoxFeux
    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
    Private Sub ComboBoxFeux_Click()
     
    Application.EnableEvents = False
    Application.ScreenUpdating = False
     
    With ComboBoxFeux
        TextBoxFeu.Text = .List(.ListIndex, 1)
        TextBoxTotalDevis = Sheets("devis").Range("I2").Value
    End With
    'quand on clique sur une valeur de la comboboxFeux,
    'on affiche le détail qui compose le feu sélectionné
     
    Dim ShF As Worksheet
    Set ShF = Worksheets("feux")
    Dim Feu As String
     
    Feu = ComboBoxFeux.Value
     
    On Error Resume Next
    With ShF
        'définir la zone de critère
        'choisir l'étiquette de la colonne A1 --> champ où exploiter le filtre
        .Range("I1") = .Range("A1")
        .Range("I2") = Feu 'la valeur du critère du filtre
        ShF.Range("K1").CurrentRegion.Clear
        'définir la plage de cellules pour le filtre...
     
        With .Range("A1:G" & .Range("A65536").End(xlUp).Row)
            'application du filtre
            .AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=ShF.Range("I1:I2"), _
                 CopyToRange:=ShF.Range("K1"), Unique:=False
                'copie vers la cellule où débutera la plage résultat
        End With
        .ShowAllData
    End With
     
    Sheets("devis").Select
    Cells.Select
    Selection.ClearContents
    Range("A1").Select
    Sheets("recupdevis").Select
    Cells.Select
    Selection.Copy
    Sheets("devis").Select
    Range("A1").Select
    ActiveSheet.Paste
    Range("A1").Select
    Sheets("recupdevis").Select
    Range("A1").Select
    Application.CutCopyMode = False
    Sheets("devis").Select
    Range("A1").Select
     
    Dim Rg As Range
    With Worksheets("devis")
       Set Rg = .Range("K1:K" & .Range("K65536").End(xlUp).Row)
    End With
     
    Do Until ActiveCell = ""
        If ActiveCell = 0 Then
            Selection.EntireRow.Delete Shift:=xlDown
        Else
            ActiveCell.Offset(1, 0).Range("A1").Select
        End If
    Loop
     
    Sheets("articles").Select
    Range("A1").Select
     
    Dim DerLig As Long
    'Feuil7 n'est pas le nom de l'onglet mais de la propriété NAME
    'de la feuille visible seulement dans la fenêtre de l'éditeur de code.
    With Feuil7
        'si aucune donnée dans la feuille, sortie de la procédure.
        If IsEmpty(.UsedRange) Then Exit Sub
        'Trouver la dernière ligne où il y a des données
        'dans les colonnes A:C (à adapter)
        DerLig = .Range("A:K").Find(What:="*", _
                        LookIn:=xlValues, _
                        SearchOrder:=xlByRows, _
                        SearchDirection:=xlPrevious).Row
        'Comme les données débutent en ligne 5, derlig ne peut pas être plus petit que 5
        'If Derlig < 5 Then Derlig = 5
     
        'Affectation de la plage de cellules à une variable objet Range
        Set Rg = .Range("C1:C" & DerLig)
    End With
     
     
    With Me.ListBoxFresque
        ' Nombre des colonnes du tableau ou plage de données
        .ColumnCount = Rg.Columns.Count
        'S'assure que l'on peut sélectionner plus d'une ligne à la fois
        .MultiSelect = fmMultiSelectExtended
        'largeur des colonnes dans le listbox
        .ColumnWidths = "20"
        'Remplir le listbox avec les données du tableau
        .List = Rg.Value
        'S'assure qu'aucune ligne de listbox n'est sélectionnée.
        .ListIndex = -1
    End With
     
    'Dim DerLig As Long
    'Feuil7 n'est pas le nom de l'onglet mais de la propriété NAME
    'de la feuille visible seulement dans la fenêtre de l'éditeur de code.
    With Feuil7
        'si aucune donnée dans la feuille, sortie de la procédure.
        If IsEmpty(.UsedRange) Then Exit Sub
        'Trouver la dernière ligne où il y a des données
        'dans les colonnes A:C (à adapter)
        DerLig = .Range("A:K").Find(What:="*", _
                        LookIn:=xlValues, _
                        SearchOrder:=xlByRows, _
                        SearchDirection:=xlPrevious).Row
        'Comme les données débutent en ligne 5, derlig ne peut pas être plus petit que 5
        'If Derlig < 5 Then Derlig = 5
     
        'Affectation de la plage de cellules à une variable objet Range
        Set Rg = .Range("D1:D" & DerLig)
    End With
     
    With Me.ListBoxQte
        ' Nombre des colonnes du tableau ou plage de données
        .ColumnCount = Rg.Columns.Count
        'S'assure que l'on peut sélectionner plus d'une ligne à la fois
        .MultiSelect = fmMultiSelectExtended
        'largeur des colonnes dans le listbox
        .ColumnWidths = "30"
        'Remplir le listbox avec les données du tableau
        .List = Rg.Value
        'S'assure qu'aucune ligne de listbox n'est sélectionnée.
        .ListIndex = -1
    End With
     
    With Feuil7
        'si aucune donnée dans la feuille, sortie de la procédure.
        If IsEmpty(.UsedRange) Then Exit Sub
        'Trouver la dernière ligne où il y a des données
        'dans les colonnes A:C (à adapter)
        DerLig = .Range("A:K").Find(What:="*", _
                        LookIn:=xlValues, _
                        SearchOrder:=xlByRows, _
                        SearchDirection:=xlPrevious).Row
        'Comme les données débutent en ligne 5, derlig ne peut pas être plus petit que 5
        'If Derlig < 5 Then Derlig = 5
     
        'Affectation de la plage de cellules à une variable objet Range
        Set Rg = .Range("E1:F" & DerLig)
    End With
     
    With Me.ListBoxArtDes
        ' Nombre des colonnes du tableau ou plage de données
        .ColumnCount = Rg.Columns.Count
        'S'assure que l'on peut sélectionner plus d'une ligne à la fois
        .MultiSelect = fmMultiSelectExtended
        'largeur des colonnes dans le listbox
        .ColumnWidths = "70"
        'Remplir le listbox avec les données du tableau
        .List = Rg.Value
        'S'assure qu'aucune ligne de listbox n'est sélectionnée.
        .ListIndex = -1
    End With
     
     
     
    Application.EnableEvents = True
    Application.ScreenUpdating = True
     
    End Sub
    donc je tourne en rond....

    pour ce qui est des modifs de code comme proposé par Casefayere, si je change cela ne marche pas je n'accède plus au UserFormDevis (n dehors du regroupement des with, effectivement)

    pour ce qui est de :
    Me.ComboBoxArticle.List = RgComboBoxArticle1.Value
    j'aimerai avoir :
    Me.ComboBoxArticle.List = RgComboBoxArticle1.Value (col 1 de la combobox)
    et RgComboBoxArticle2.Value (col 2 de la combobox)
    mais je n'ai pas trouvé la bonne syntaxe

    pour plus de clarté je vous joins mon fichier
    je code en apprenant "sur le tas" et donc ai beaucoup de lacunes malheureusement !
    encore merci pour votre aide à tous les deux
    je code en apprenant "sur le tas" et donc ai beaucoup de lacunes malheureusement !

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

Discussions similaires

  1. Insérer dans vue avec un déclencheur
    Par benny-blanco dans le forum Développement
    Réponses: 7
    Dernier message: 05/05/2012, 17h37
  2. Lire excel et les insérer dans access avec vbscript
    Par regisyves dans le forum VBScript
    Réponses: 3
    Dernier message: 19/06/2010, 07h27
  3. Incapable d'insérer dans MySQL avec JDBC
    Par guillo14 dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/06/2006, 01h26
  4. Comment insérer un ComboBox dans un cellule StringGrid
    Par Xavier dans le forum C++Builder
    Réponses: 4
    Dernier message: 09/01/2006, 11h36
  5. [debutant][awt] Pb avec ItemStateChanged dans combobox
    Par cosmos.1097 dans le forum Composants
    Réponses: 2
    Dernier message: 30/06/2005, 18h38

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