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 :

Alimentation ComboBox sans vide et par ordre alphabétique [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Mécanicien avion
    Inscrit en
    Février 2018
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Mécanicien avion

    Informations forums :
    Inscription : Février 2018
    Messages : 193
    Par défaut Alimentation ComboBox sans vide et par ordre alphabétique
    Bonjour à tous,

    J'ai réussi à alimenter ma ComboBox.
    J'aurais voulu savoir s'il est possible de l'alimenter par ordre alphabétique et sans vide ?

    Voici mon code

    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
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
        If Not Intersect(Target, Range("I4:I27")) Is Nothing And Target.Count = 1 Then
            Me.ComboBoxAffectation.List = Sheets("Synthèse").Range("A5:A40").Value
            Me.ComboBoxAffectation.Top = Target.Top
            Me.ComboBoxAffectation.Left = Target.Left
            Me.ComboBoxAffectation.Width = Target.Width
            Me.ComboBoxAffectation.Height = Target.Height
            Me.ComboBoxAffectation.Value = Target.Value
            Me.ComboBoxAffectation.Visible = True
            Me.ComboBoxAffectation.Activate
        Else
            Me.ComboBoxAffectation.Visible = False
        End If
     
    End Sub
    Merci et bonne journée

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Bonjour, c'est tout à fait faisable. Il faut traiter ta plage source avant de l'affecter au combobox. Voici comment:

    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
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
        Dim cell As Range
        Dim tempArray() As String
        Dim i As Long
        Dim dataRange As Range
        Dim tempList As Object
     
        If Not Intersect(Target, Range("I4:I27")) Is Nothing And Target.Count = 1 Then
     
            ' Définition de la plage de données à récupérer
            Set dataRange = Sheets("Synthèse").Range("A5:A40")
     
            ' Création d'une liste temporaire pour stocker les valeurs non vides
            Set tempList = CreateObject("System.Collections.ArrayList")
     
            ' Boucle pour récupérer les valeurs non vides
            For Each cell In dataRange
                If cell.Value <> "" Then
                    tempList.Add cell.Value
                End If
            Next cell
     
            ' Tri des valeurs de la liste temporaire
            tempList.Sort
     
            ' Conversion de la liste temporaire en tableau
            ReDim tempArray(1 To tempList.Count)
            For i = 1 To tempList.Count
                tempArray(i) = tempList(i - 1)
            Next i
            With Me.ComboBoxAffectation
                .List = tempArray
                .Top = Target.Top
                .Left = Target.Left
                .Width = Target.Width
                .Height = Target.Height
                .Value = Target.Value
                .Visible = True
                .Activate
            End With
        Else
            Me.ComboBoxAffectation.Visible = False
        End If
     
    End Sub

  3. #3
    Membre confirmé
    Homme Profil pro
    Mécanicien avion
    Inscrit en
    Février 2018
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Mécanicien avion

    Informations forums :
    Inscription : Février 2018
    Messages : 193
    Par défaut
    Bonjour,

    Merci pour votre réponse.
    J'ai essayé et j'ai un bogage sur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set tempList = CreateObject("System.Collections.ArrayList")
    Je n'arrive pas à comprendre pourquoi...

  4. #4
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Sans plus de précision je ne sais pas. Chez moi ça fonctionne. Peut-être un problème de version Excel, j'utilise la version 2024. Ou alors la version du .Net Framework qui doit être au minimum la 3.5 pour utiliser .ArrayList ou alors activer la référence mscorlib.dll. Quoi qu'il en soit, voici une version sans ArrayList mais une Collection. Comme je ne peux utiliser le tri intégré à ArrayList, j'effectue un tri à bulles, ce n'est pas le plus performant mais pour une petite liste ça fera l'affaire.

    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
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
        Dim cell As Range
        Dim ws As Worksheet
        Dim tempArray() As String
        Dim i As Long, j As Long
        Dim dataRange As Range
        Dim tempList As Collection
        Dim tempValue As String
     
        Set ws = ThisWorkbook.Sheets("Synthèse")
     
        If Not Intersect(Target, Range("I4:I27")) Is Nothing And Target.Count = 1 Then
     
            ' Définition de la plage de données à récupérer
            Set dataRange = ws.Range("A5:A40")
     
            ' Création d'une collection temporaire pour stocker les valeurs non vides
            Set tempList = New Collection
     
            ' Boucle pour récupérer les valeurs non vides
            For Each cell In dataRange
                If cell.Value <> "" Then
                    tempList.Add cell.Value
                End If
            Next cell
     
            ' Conversion de la collection en tableau
            ReDim tempArray(1 To tempList.Count)
            For i = 1 To tempList.Count
                tempArray(i) = tempList(i)
            Next i
     
            ' Tri du tableau
            For i = LBound(tempArray) To UBound(tempArray) - 1
                For j = i + 1 To UBound(tempArray)
                    If tempArray(i) > tempArray(j) Then
                        tempValue = tempArray(i)
                        tempArray(i) = tempArray(j)
                        tempArray(j) = tempValue
                    End If
                Next j
            Next i
     
            With Me.ComboBoxAffectation
                .List = tempArray
                .Top = Target.Top
                .Left = Target.Left
                .Width = Target.Width
                .Height = Target.Height
                .Value = Target.Value
                .Visible = True
                .Activate
            End With
     
        Else
            Me.ComboBoxAffectation.Visible = False
        End If
     
    End Sub

  5. #5
    Membre confirmé
    Homme Profil pro
    Mécanicien avion
    Inscrit en
    Février 2018
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Mécanicien avion

    Informations forums :
    Inscription : Février 2018
    Messages : 193
    Par défaut
    Ça marche nickel.
    Merci à toi j’ai galéré toute la journée pour trouver….

    Est-il possible de rajouter une condition ?
    Du genre si dans une autre feuille une case = 0, la ligne ne s’affiche pas.

    Bonne soirée

  6. #6
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Je ne vois pas de quelle ligne tu parles, ou alors tu veux dire le combobox ?

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

Discussions similaires

  1. [AC-2019] Trier combobox avec list valeurs par ordre alphabétique
    Par Superpat9999 dans le forum VBA Access
    Réponses: 2
    Dernier message: 03/02/2023, 14h06
  2. [XL-2010] Liste sans doublons triée par ordre croissant.
    Par sevy1 dans le forum Excel
    Réponses: 2
    Dernier message: 28/02/2013, 09h06
  3. trier une ComboBox par ordre alphabétique
    Par poussin_44 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 11/07/2007, 17h23
  4. Trier un combobox par ordre alphabétique
    Par alex.a dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/06/2007, 10h04
  5. organiser un combobox par ordre croissant??
    Par shadow31 dans le forum MFC
    Réponses: 2
    Dernier message: 18/05/2005, 09h31

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