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 :

[VBA] Valeurs dans Combobox


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Gestionnaire de données
    Inscrit en
    Mai 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Gestionnaire de données

    Informations forums :
    Inscription : Mai 2011
    Messages : 44
    Par défaut [VBA] Valeurs dans Combobox
    Bonjour,

    J'ai un userform qui doit faire remonter les valeurs d'une feuille excel (de la colonne A) dans une combobox.

    Ces valeurs sont présentes dans un tableau dont l'entête débute en A13.

    Je souhaiterais voir apparaître dans ma combobox les valeurs de la cellule A14 jusqu'à la dernière cellule non vide.

    Voici mon code qui fonctionne bien mais pourrait être amélioré :

    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
    'Pour le formulaire
    Public Sub UserForm_Initialize()
     
    Dim choix1()
        choix1 = Application.Transpose(Sheets("Liste d'émargement électronique").Range("a12:a" & Sheets("Liste d'émargement électronique").Range("a65000").End(xlUp).Row))
        Me.ComboBox1.List = choix1
    End Sub
     
     
    'Pour la liste déroulante CAB
    Private Sub ComboBox1_Change()
    Dim Ligne As Long
     
    If Me.ComboBox1.ListIndex = 1 Then Exit Sub
    Ligne = Me.ComboBox1.ListIndex + 12
     
    TextBox1 = Worksheets("Liste d'émargement électronique").Cells(Ligne, "A")
     
    End Sub
    Le code commence en A12 car en A14 il y a débogage quand le tableau est vide avec une erreur de type 13 incompatibilité de type.
    Il faut 2 lignes non vides dans le tableau pour que le code paramétré en A14 fonctionne.

    L'un d'entre vous pourrait-il m'aider ?

    Merci beaucoup !

    Bonne journée

  2. #2
    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,

    essayes ces codes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Sub UserForm_Initialize()
     
    Dim choix1, Dcel As Range
    With Sheets("Liste d'émargement électronique")
      Set Dcel = .Range("A" & .Rows.Count).End(xlUp)
      If Dcel.Address = .Range("A13").Address Then MsgBox "pas de données": Exit Sub 'ou Unload Me
      choix1 = .Range("A14", Dcel)
      Me.ComboBox1.List = choix1
    End With
    End Sub

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Private Sub ComboBox1_Change()
    Dim Ligne As Long
     
    If Me.ComboBox1.ListIndex = 1 Then Exit Sub
    Ligne = Me.ComboBox1.ListIndex + 14
    TextBox1 = Worksheets("Liste d'émargement électronique").Cells(Ligne, "A")
     
    End Sub
    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...)

  3. #3
    Membre averti
    Profil pro
    Gestionnaire de données
    Inscrit en
    Mai 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Gestionnaire de données

    Informations forums :
    Inscription : Mai 2011
    Messages : 44
    Par défaut
    Merci beaucoup.

    Le code a été testé et ne fonctionne pas complètement :
    Dès lors que la base est vide il fonctionne, de même s'il y a plus de deux entrées.
    Par contre, quand il n'y a qu'une seule entrée, c'est-à-dire la cellule A14 remplie, alors erreur de type 381 (impossible de définir la propriété List.Index de table de propriétés non valide).

    Par ailleurs, avec l'ancien code, la dernière saisie dans la textbox était automatiquement actualisée (ajoutée) dans la combobox, ce qui rendait la mise à jour des données dynamique.

    Merci d'avance.

    Bonne soirée !

  4. #4
    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
    je suis étonné car j'ai testé sans problème
    la dernière saisie dans la textbox était automatiquement actualisée (ajoutée) dans la combobox, ce qui rendait la mise à jour des données dynamique.
    ça également
    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...)

  5. #5
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    1- remplissage de la Combo :
    Il se peut que, lorsque la plage n'est constitué que d'une unique cellule, la propriété List des ComboBox (et autres ListBox) n'accepte pas le tableau qu'on lui passe.
    Dans ce cas, comme dans tous les cas, il convient de traiter à priori la variable tableau qui servira à alimenter la liste.

    Pour cela, j'utilise désormais la fonction de ucFoutu permettant de Convertir sans faille un range en tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Function faire_tableau(plage As Range) 
     If plage.Cells.Count < 2 Then 
        Dim tabli(1 To 1, 1 To 1) 
        tabli(1, 1) = plage.Value 
        faire_tableau = tabli 
        Erase tabli 
      Else 
        faire_tableau = plage.Value 
      End If 
    End Function
    L'appel de cette fonction, dans ton cas et en reprenant le code de Casefayere (que je salue au passage), donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim Dcel As Range
    With Sheets("Liste d'émargement électronique")
      Set Dcel = .Range("A" & .Rows.Count).End(xlUp)
      If Dcel.Address = .Range("A13").Address Then MsgBox "pas de données": Exit Sub 'ou Unload Me
      Me.ComboBox1.List = faire_tableau(.Range("A14", Dcel))
    End With
    2- Lors de la saisie dans un textbox
    Si tu veux que la chaine saisie dans le textbox soit automatiquement ajoutée dans la combobox, il faut distinguer deux cas :
    > La saisie dans le TextBox doit alimenter, à la fois la combobox ET la feuille,
    > La saisie ne doit alimenter que la ComboBox.
    Tu dis...

  6. #6
    Membre averti
    Profil pro
    Gestionnaire de données
    Inscrit en
    Mai 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Gestionnaire de données

    Informations forums :
    Inscription : Mai 2011
    Messages : 44
    Par défaut
    Bonjour,

    J'ai fais le test en intégrant de la sorte :

    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
    Private Function faire_tableau(plage As Range)
     If plage.Cells.Count < 2 Then
        Dim tabli(1 To 1, 1 To 1)
        tabli(1, 1) = plage.Value
        faire_tableau = tabli
        Erase tabli
      Else
        faire_tableau = plage.Value
      End If
    End Function
     
    'Pour le formulaire
    Private Sub UserForm_Initialize()
     
    Dim choix1, Dcel As Range
    With Sheets("Liste d'émargement électronique")
      Set Dcel = .Range("A" & .Rows.Count).End(xlUp)
      If Dcel.Address = .Range("A13").Address Then MsgBox "pas de données": Exit Sub 'ou Unload Me
      choix1 = .Range("A14", Dcel)
      Me.ComboBox1.List = choix1
    End With
    End Sub
     
     
    'Pour la liste déroulante CAB
    Private Sub ComboBox1_Change()
    Dim Dcel As Range
    With Sheets("Liste d'émargement électronique")
      Set Dcel = .Range("A" & .Rows.Count).End(xlUp)
      If Dcel.Address = .Range("A13").Address Then MsgBox "pas de données": Exit Sub 'ou Unload Me
      Me.ComboBox1.List = faire_tableau(.Range("A14", Dcel))
    End With
    End Sub
    Le test de mon côté n'est pas concluant : erreur d'éxecution '381'

    Peut-être ai-je mal reproduit vos instructions ...

    Dans tous les cas, je vous remercie pour vos réponses, le projet a dévié et je n'ai plus besoin de la combobox comme cité précédemment.

    Bonne journée !

Discussions similaires

  1. Affichage valeur dans combobox
    Par walid kh dans le forum VB.NET
    Réponses: 0
    Dernier message: 16/03/2010, 11h58
  2. filtre pour affectation de valeurs dans combobox
    Par seba_stien dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/12/2008, 09h32
  3. Réponses: 12
    Dernier message: 30/05/2006, 15h57
  4. []probleme affichage valeur dans combobox
    Par gup dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 23/09/2005, 09h22
  5. Réponses: 2
    Dernier message: 04/02/2005, 11h03

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