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 :

Combobox avec la méthode AddItem


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2014
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2014
    Messages : 69
    Par défaut Combobox avec la méthode AddItem
    Bonjour,

    Je cherche à alimenter des combobox dans un formulaire en utilisant la méthode AddItem car le nombre d'entrée des combobox est variable.

    J'utilise le code suivant pour faire cette manipulation :

    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 Organ_Initialize()
     
    JN_RN.Clear
     
    numLigneDernierSalarie = Sheets("Data").Range("A" & Rows.Count).End(xlUp).Row
     
    For i = 3 To numLigneDernierSalarie
        Organ.JN_RN.AddItem Replace(Sheets("Data").Range("A" & i).Value, " ", " ")
    Next
     
     
    End Sub
    Par Contre, le combobox ne remonte aucune valeur.

    Avez-vous une idée ?.

    Merci !

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 114
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je cherche à alimenter des combobox dans un formulaire en utilisant la méthode AddItem car le nombre d'entrée des combobox est variable.
    Pour moi, l'utilisation de la méthode AddItem n'a de sens que s'il y a une condition à remplir pour ajouter un élément dans la liste. Dans le cas contraire, il me semble plus simple d'utiliser la propriété List

    A titre de curiosité, j'aimerais savoir ce que vous voulez remplacer dans la ligne 9 du code publié lorsque vous utilisez Replace(Sheets("Data").Range("A" & i).Value, " ", " ")
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Bonjour à tous,

    Oui c'est normal VBA fait ce que tu lui demandes

    tu lui dit : ajoute un espace à la place de la valeur du contenu de la cellule et tu boucles jusqu'à la fin …

    donc vire le replace et cela va mieux marcher

    tu nous tiens au courant

    PS : pour mieux m'y retrouver perso j'utilise les initiales du type d'objet pour son nom
    exemple
    UF_Organ au lieu d'Organ

    CB_ pour les ComboBox
    BT_ pour les boutons
    CKB_ pour les CheckBox


    Comme cela d'un seul coup d'œil tu vois de quoi tu parles

  4. #4
    Membre confirmé
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2014
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2014
    Messages : 69
    Par défaut
    Bonjour et merci pour votre aide :

    J'ai modifié le code de la manière suivante, en suivant les conseils de Igloobel, mais ça ne fonctionne pas mieux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Organ_Initialize()
     
    JN_RN.Clear
     
    numLigneDernierSalarie = Sheets("Data").Range("A" & Rows.Count).End(xlUp).Row
     
    For i = 3 To numLigneDernierSalarie
        Me.JN_RN.AddItem Sheets("Data").Range("A" & i).Value
    Next
     
    End Sub
    Y a-t-il un paramétrage supplémentaire à faire dans les propriétés du ComboBox ?

    @Philippe : comment écrirais-tu le code avec la méthode List ?

    Merci !

    Cordialement.

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 114
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Exemple d'une procédure placée dans un module standard.
    Les données utilisées se trouve dans un tableau structuré nommé t_Sales
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Main()
     With usfSalesConsultation
      With .lstSales
      .List = Range("t_Sales").Value
      .ColumnCount = Range("t_Sales").Columns.Count
      End With
      .Show
     End With
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Membre confirmé
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2014
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2014
    Messages : 69
    Par défaut
    Re-bonjour Phlippe,

    J'ai essayé le code suivant sans plus de succès :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Organ_Initialize()
     
    numLigneDernierSalarie = Sheets("Data").Range("A" & Rows.Count).End(xlUp).Row
    'For i = 3 To numLigneDernierSalarie
        Me.JN_CdB.List() = Sheets("Data").Range("A3:A" & numLigneDernierSalarie).Value
    'Next
    End Sub
    Cordialement.

  7. #7
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 969
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 969
    Par défaut
    pour alimenter combobox sans doublons adapter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub UserForm_Initialize()
    Dim i As Integer
    For i = 2 To Sheets("feuil1").Range("A65536").End(xlUp).Row
      ComboBox1 = Sheets("feuil1").Range("A" & i)
      If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem Sheets("feuil1").Range("A" & i)
    Next i
    End Sub

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 114
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'ai essayé le code suivant sans plus de succès
    Qu'entendez-vous par "sans succès" ?
    Que voulez-vous faire exactement, quels sont les éléments qui doivent être dans cette liste ?

    Si vous persistez à utiliser des plages classiques, voici un code qui charge dans le ListBox nommé lstSales, toute la première colonne d'un tableau dont les données débutent en cellule A2. Le code est identique pour un ComboBox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub UserForm_Initialize()
      Dim NumberOfRow As Long
      NumberOfRow = ThisWorkbook.Worksheets("Mes ventes").Range("A2").End(xlDown).Row
      Me.lstSales.List = ThisWorkbook.Worksheets("Mes ventes").Range("A2:A" & NumberOfRow).Value
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Il faudrait préciser ta version d'Excel...

    Perso, je ne peux qu'approuver et plébisciter la réponse de Philippe au message #5. Un tableau structuré est à mon sens la meilleure structure pour contenir les données à placer dans une listbox. J'apprécie tout particulièrement l'architecture proposée qui déporte l'initialisation ailleurs que dans le Initialize qui ne devrait pas être utilisé pour amener des données externes dans le userform

    Même lorsque l'on doit tenir compte d'une condition, je reste persuadé qu'en pensant Excel avant de penser VBA, on est gagnant, par rapport par exemple à l'utilisation d'un dictionary. Et là, la version d'Excel est déterminante:
    • Autre que 365: on passe par un tableau temporaire que l'on filtre ou trie;
    • 365: Les plages dynamiques alimentées avec TRIER, TRIERPAR, FILTRE et UNIQUE font des merveilles (voir mes billets ici et ici).
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

Discussions similaires

  1. [Wscript] probleme avec la méthode send
    Par machinTruc dans le forum Windows
    Réponses: 8
    Dernier message: 18/05/2005, 17h30
  2. PB de chargement de combobox avec une requete
    Par bubu1905 dans le forum Bases de données
    Réponses: 9
    Dernier message: 23/03/2005, 16h14
  3. [VB.NET] Remplir une ComboBox avec une requete sql
    Par graphicsxp dans le forum Windows Forms
    Réponses: 6
    Dernier message: 22/03/2005, 15h29
  4. Réponses: 2
    Dernier message: 26/07/2004, 13h34
  5. Probleme d'impression avec la méthode TForm->Print()
    Par Kid Icarus dans le forum C++Builder
    Réponses: 13
    Dernier message: 31/07/2002, 14h26

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