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 doublons dans liste déroulante [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Vba14
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 440
    Par défaut Supprimer doublons dans liste déroulante
    Bonjour à tous,

    Dans une feuille Excel j'ai inséré une liste déroulante via "Données - Validation".
    Cette liste a pour référence des données d'une autre feuille. Ces données sont une suite de commandes avec un N° de bon de commande. Dans cette suite apparaît plusieurs fois le même N° et ce qui est normal.
    Mais dans ma liste déroulante je souhaiterais que n'apparaisse qu'un seule fois les N° présents.
    Est-il possible de réaliser cela avec VBA ?
    Merci par avance pour vos réponses.

  2. #2
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour Vba, bonjour le forum,

    Peut-être comme ça (à adapter) :

    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
    Sub Macro1()
    Dim OL As Worksheet 'déclare la variable OL (Onglet de la Liste)
    Dim OV As Worksheet 'déclare la variable OV (Onglet de la Validation)
    Dim CV As Range 'déclare la variable CV (Cellule de la Validation)
    Dim TL As Variant 'déclare la variable TL (Tableau de la liste)
    Dim D As Object 'déclare la variable D (Dictionnaire)
    Dim LST As Variant 'déclare la variable LST (LiSTe)
     
    Set OL = Worksheets("Feuil2") 'définit l'onglet OL (à adapter)
    TL = OL.Range("A1").CurrentRegion 'définit le tableau de la liste TL (à adapter)
    Set OV = Worksheets("Feuil1") 'définit l'onglet OV (à adapter)
    Set CV = OV.Range("A1") 'définit la cellule de la validation CV (à adapter)
    Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
    For I = 1 To UBound(TL, 1) 'boucle sur toutes les lignes I du tableu de la liste TL
        D(TL(I, 1)) = "" 'alimente le dictionnaire D
    Next I 'prochaine ligne de la boucle
    LST = Join(D.keys, ",") 'définit la liste LST avec les données du dictionnaire D sans doublons
    CV.Validation.Delete 'efface une éventuelle ancienne validation de données dans la cellule CV
    CV.Validation.Add xlValidateList, Formula1:=LST 'définit la validation de données de la cellule CV avec la liste LST
    End Sub

  3. #3
    Membre éclairé Avatar de Vba14
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 440
    Par défaut
    Bonjour Thautheme,

    Merci beaucoup ça marche très bien.
    Voici mon code finalisé :
    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
     
    Private Sub Worksheet_Activate()
    Dim OL As Worksheet 'déclare la variable OL (Onglet de la Liste)
    Dim OV As Worksheet 'déclare la variable OV (Onglet de la Validation)
    Dim CV As Range 'déclare la variable CV (Cellule de la Validation)
    Dim TL As Variant 'déclare la variable TL (Tableau de la liste)
    Dim D As Object 'déclare la variable D (Dictionnaire)
    Dim LST As Variant 'déclare la variable LST (Liste)
     
    Set OL = Worksheets("Commandes") 'définit l'onglet OL (à adapter)
    TL = OL.Range("B6").CurrentRegion 'définit le tableau de la liste TL (à adapter)
    Set OV = Worksheets("BCommandes") 'définit l'onglet OV (à adapter)
    Set CV = OV.Range("C11") 'définit la cellule de la validation CV (à adapter)
    Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
    For I = 1 To UBound(TL, 1) 'boucle sur toutes les lignes I du tableau de la liste TL
        D(TL(I, 1)) = "" 'alimente le dictionnaire D
    Next I 'prochaine ligne de la boucle
    LST = Join(D.keys, ",") 'définit la liste LST avec les données du dictionnaire D sans doublons
    CV.Validation.Delete 'efface une éventuelle ancienne validation de données dans la cellule CV
    CV.Validation.Add xlValidateList, Formula1:=LST 'définit la validation de données de la cellule CV avec la liste LST
    End Sub
    Bonjour Ryu,
    Merci pour ta réponse, mais je ne souhaite pas supprimer les doublons dans le tableau mais uniquement dans la liste.
    Amicalement
    Vba14

  4. #4
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Re,

    Pas de soucis, je pensais que tu transférais ta liste dans une colonne et que tu utilisais une plage nommée dynamique via la petite formule bien connue avec DECALER et NBVAL …
    D’ailleurs ta liste pourrait se faire avec un filtre avancé sans doublons si celle-ci est transféré dans une colonne …
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  5. #5
    Membre éclairé Avatar de Vba14
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 440
    Par défaut
    Non les données ne servent qu'à alimenter la Combo.
    Merci toutefois pour ta contribution

  6. #6
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Re,
    Dans une feuille Excel j'ai inséré une liste déroulante via "Données - Validation".
    Pas évident à 1ère vue qu’on parle de Combobox, bon le principal c’est que le pb soit solutionné

    PS: Marcel - j’utilise aussi de temps à autres le site de Jacques si besoin - très bon site
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  7. #7
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,

    Je ne sais pas comment sont insérés tes N• mais tu peux faire une chose une fois que tu les as,
    un RemoveDullicates : https://docs.microsoft.com/fr-fr/off...moveduplicates
    Une seule ligne de code suffit …

    Sinon il faut le faire en amont …
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

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

Discussions similaires

  1. Supprimer doublons dans une liste
    Par yrmab dans le forum Scheme
    Réponses: 7
    Dernier message: 09/05/2013, 17h14
  2. [XL-2003] pas de doublons ni de vides dans liste déroulante
    Par csophie49 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 15/12/2009, 14h54
  3. [MySQL] Supprimer doublon dans une liste
    Par Gad29 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/06/2007, 14h13
  4. doublons dans liste déroulante
    Par nicolovitch dans le forum Access
    Réponses: 2
    Dernier message: 27/07/2006, 12h17
  5. Réponses: 2
    Dernier message: 25/11/2005, 12h09

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