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 :

Supprimer les doublons et trier par ordre alpha une ComboBox


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Femme Profil pro
    Assistante
    Inscrit en
    Février 2016
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Assistante

    Informations forums :
    Inscription : Février 2016
    Messages : 166
    Par défaut Supprimer les doublons et trier par ordre alpha une ComboBox
    Bonjour,

    Vous allez vous dire en voyant le titre de mon post qu'il y a déjà eu bien des sujets à ce propos

    Seulement, j'ai tenté plein de code que j'ai pu trouvé sur ce forum et d'autres encore, mais je n'y arrive pas
    C'est pour cela que je me permets de vous solliciter

    Mon classeur possède un petit UserForm, qui possède lui-même 2 ComboBox.

    Ma première s'alimente comme 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
    Private Sub UserForm_Initialize()
     
      Dim ws_data As Worksheet
      Dim lstrw As Long
      Dim liste_valeurs As String
      Dim NAME As String
     
     
      'feuille
      Set ws_data = Worksheets(1)
     
      'dernière ligne
      lstrw = ws_data.Cells(Rows.Count, 19).End(xlUp).Row
     
      'par défaut
      liste_valeurs = ""
     
      'boucle
      For i = 13 To lstrw
        NAME = ws_data.Cells(i, 19)
     
        'vérification
        If InStr(liste_valeurs, NAME) < 1 Then
            CB_SURNAME.AddItem "" & NAME
     
            If liste_valeurs = "" Then
                liste_valeurs = NAME
            Else
                liste_valeurs = liste_valeurs & ";" & NAME
            End If
        End If
      Next
    End Sub
    Ma 2ème Combobox2 s'alimente en fonction de la valeur de la première comme 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
    Private Sub CB_SURNAME_Change()
     
    Dim ws_data As Worksheet
    Dim lstrw As Long
    Dim liste_formation As String
    Dim FORMATION As String
     
    'effacer le contenu de CB_FORMATION
    Me.CB_FORMATION.Clear
     
    'vérifier si sélection CB_SURNAME then
    If Me.CB_SURNAME.Value <> "" Then
        'si sélection CB_SURNAME then alors ajouter formation dans CB_FORMATION
        'feuille
        Set ws_data = Worksheets(1)
     
        'dernière ligne
        lstrw = ws_data.Cells(Rows.Count, 2).End(xlUp).Row
     
              'par défaut
      liste_formation = ""
     
        'boucle
        For i = 12 To lstrw
            FORMATION = ws_data.Cells(i, 2)
                'vérifier le NOM
            If ws_data.Cells(i, 17) = Me.CB_SURNAME.Value Then
                    'ajout des formations
                    Me.CB_FORMATION.AddItem "" & FORMATION
            End If
        Next
    End If
    End Sub
    Cela fonctionne très bien.

    Mais j'aimerai que, dans la 2ème CB n'apparaissent pas les doublons !

    Je ne sais pas quelle procédure utiliser ni où la placer....

    Pourriez-vous m'aider svp ?

    Merci beaucoup d'avance !

    Bien cordialement,

    Mél

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour Mél3790

    Voici une possibilité en utilisant l'objet Collection
    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
    Private Sub CB_SURNAME_Change()  Dim ws_data As Worksheet
      Dim lstrw As Long
      Dim Formation As String
      Dim MaCollection As Collection
      'effacer le contenu de CB_FORMATION
      Me.CB_FORMATION.Clear
      'vérifier si sélection CB_SURNAME then
      If Me.CB_SURNAME.Value <> "" Then
        'si sélection CB_SURNAME then alors ajouter formation dans CB_FORMATION
        'feuille
        Set ws_data = Worksheets(1)
        'dernière ligne
        lstrw = ws_data.Cells(Rows.Count, 2).End(xlUp).Row
        'boucle
        For i = 12 To lstrw
          'vérifier le NOM
          If ws_data.Cells(i, 17) = Me.CB_SURNAME.Value Then
            ' Mémorise la formation
            Formation = ws_data.Cells(i, 2)
            ' En cas d'erreur pas de message
            On Error Resume Next
            ' On ajoute la formation à la collection = évite les doublons
            MaCollection.Add Formation, Formation
            If Err.Number = 0 Then
              'ajout des formations
              Me.CB_FORMATION.AddItem "" & Formation
            Else
              Err.Clear
            End If
        Next
      End If
    End Sub
    A+

  3. #3
    Membre très actif
    Femme Profil pro
    Assistante
    Inscrit en
    Février 2016
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Assistante

    Informations forums :
    Inscription : Février 2016
    Messages : 166
    Par défaut
    Bonjour,

    Merci beaucoup pour votre réponse !

    J'ai un message d'erreur qui s'affiche "Variable objet ou variable de bloc with non définie"
    et surligne la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaCollection.Add Formation, Formation
    Que dois-je faire d'après vous ?

    Encore merci

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 538
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 538
    Par défaut
    Declarer la collection c'est bien,
    L'instancier c'est mieux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set MaCollection = New Collection
    La base ...
    @Mél3790: Faudrait-il que tu lises un cours ?

  5. #5
    Membre très actif
    Femme Profil pro
    Assistante
    Inscrit en
    Février 2016
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Assistante

    Informations forums :
    Inscription : Février 2016
    Messages : 166
    Par défaut
    Bonjour,
    Merci pour votre réponse
    Je n'ai pas dit que j'étais une experte lol, il est vrai qu'il me faudrait les connaissances de base, j'arrive à constituer des macros grâce aux éléments que je trouve sur de nombreux sites dont vous
    Ce fichier m'est nécessaire professionnellement ...

    J'ai donc instancié le 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Private Sub CB_SURNAME_Change()
      Dim ws_data As Worksheet
      Dim lstrw As Long
      Dim Formation As String
      Dim MaCollection As Collection
      'effacer le contenu de CB_FORMATION
      Me.CB_FORMATION.Clear
      'vérifier si sélection CB_SURNAME then
      If Me.CB_SURNAME.Value <> "" Then
        'si sélection CB_SURNAME then alors ajouter formation dans CB_FORMATION
        'feuille
        Set ws_data = Worksheets(1)
        Set MaCollection = New Collection
        'dernière ligne
        lstrw = ws_data.Cells(Rows.Count, 2).End(xlUp).Row
        'boucle
        For i = 12 To lstrw
          'vérifier le NOM
          If ws_data.Cells(i, 17) = Me.CB_SURNAME.Value Then
            ' Mémorise la formation
            Formation = ws_data.Cells(i, 2)
            ' En cas d'erreur pas de message
            On Error Resume Next
            ' On ajoute la formation à la collection = évite les doublons
            MaCollection.Add Formation, Formation
            If Err.Number = 0 Then
              'ajout des formations
              Me.CB_FORMATION.AddItem "" & Formation
            Else
              Err.Clear
            End If
          End If
        Next
      End If
    End Sub
    Et maintenant j'ai un nouveau message qui surligne encore la même phrase "MaCollection.Add Formation, Formation"

    "Cette clé est déjà associé à un élément de cette collection"

    Que dois-je faire ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour Mél3790

    Que faire... joindre un fichier anonymisé, ce n'est pas normal

    A+

Discussions similaires

  1. [XL-2010] Supprimer les doublons et faire la somme dans une nouvelle feuille
    Par Looper123 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 27/12/2019, 20h42
  2. [XL-2010] Trier par ordre chronologique une colonne d'un TCD contenant des dates en VBA
    Par boostiik dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 29/04/2017, 20h17
  3. Trier par ordre croissant une colonne de tableau
    Par c.piette dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 12/05/2015, 21h21
  4. [PR-2010] Supprimer les doublons d'une listbox et la trier par ordre croissant
    Par Antonin Boloch dans le forum Project
    Réponses: 2
    Dernier message: 07/05/2014, 17h56

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