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 :

Liste sans doublons et transfert dans la feuille avec Collection


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    avril 2007
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2007
    Messages : 663
    Points : 137
    Points
    137
    Par défaut Liste sans doublons et transfert dans la feuille avec Collection
    Bonjour,

    Pour boucler sur une plage de cellules et obtenir une liste d'éléments sans doublons, pas de soucis.

    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
    Dim Cell As Range
        Dim Un As Collection
        Dim i As Long
        Set Un = New Collection
     
        Range("zone_sélection_années").ClearContents
        On Error Resume Next
        'Boucle sur la plage de cellule
        For Each Cell In Range("Tableau1[DATES]").SpecialCells(xlCellTypeVisible)
            If Cell <> "" Then Un.Add Year(Cell), CStr(Year(Cell))
        Next Cell
     
        i = 0
        On Error GoTo 0
        'Boucle sur les éléments de la collection.
        For i = 1 To Un.Count
            ' transférer  les éléments de la collection vers une plage de feuille
            Cells(2, 1 + i) = Un.Item(i) 'début liste en ligne A2 à ... 
            i = i + 1
        Next i   
        Set Un = Nothing
    Pour transférer dans la feuille ça ne fonctionne pas bien.

    J'ai dû commettre une erreur, mais je ne trouve pas d’où ça vient.

    Merci d'avance pour votre aide.

  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
    10 656
    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 : 10 656
    Points : 25 437
    Points
    25 437
    Billets dans le blog
    31
    Par défaut
    Bonjour,
    Pour exporter les éléments uniques présents dans une colonne de façon simple, vous avez soit l'utilisation de PowerQuery soit utiliser la méthode AdvancedFilter de l'objet Range

    Exemple avec AdvancedFilter

    Exportation des éléments uniques présents dans la colonne nommée First Name du tableau structuré nommé T_DataGenerator vers la cellule A1 de la feuille dont le CodeName est shtTarget
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub T()
     Dim oRng As Range
     Set oRng = Range("T_DataGenerator").ListObject.ListColumns("First Name").Range
     oRng.AdvancedFilter Action:=xlFilterCopy, Unique:=True, CopyToRange:=shtTarget.Range("A1")
     Set oRng = Nothing
    End Sub
    Pour en savoir plus sur la propriété CodeName d'une feuille, lire éventuellement mon billet titré VBA Excel - Comment s’affranchir de la modification du nom de la feuille en utilisant son CodeName
    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
    Ma dernière contribution : VBA - Les macros complémentaires

  3. #3
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur informatique indépendant
    Inscrit en
    novembre 2003
    Messages
    17 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur informatique indépendant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 17 105
    Points : 49 257
    Points
    49 257
    Billets dans le blog
    92
    Par défaut
    Salut.


    Je plussoie Philippe sur l'utilisation de Power Query qui permet de rester dans un xlsx et qui offre un dédoublonnage plus souple que le filtre avancé tout en demandant moins de mise en place dès lors qu'on n'extrait pas toutes les colonnes ou pas dans même ordre que celui du tableau initial(1).

    En VBA et sur base des tableaux structurés t_Source et t_Cible, j'utilise la suppression des doublons, plus souple que le filtre avancé pour dédoublonner. De plus, la plage d'arrivée d'un filtre avancé n'est pas un tableau structuré. C'est parfois bien, parfois pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Test()
      If Not Range("t_Cible").ListObject.DataBodyRange Is Nothing Then Range("t_Cible").ListObject.DataBodyRange.Delete ' Vidange de la cible
      Range("t_Cible").Resize(Range("t_Source").Rows.Count).Value = Range("t_Source").Value
      Range("t_cible").RemoveDuplicates 1, Header:=xlYes
    End Sub
    A adapter si tu dois dédoublonner sur plusieurs colonnes.


    (1) Perso, je ne conseille plus jamais l'usage du filtre avancé, outil devenu selon moi obsolète.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    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...
    ---------------

  4. #4
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    février 2010
    Messages
    7 344
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : février 2010
    Messages : 7 344
    Points : 13 941
    Points
    13 941
    Par défaut
    Bonjour à tous
    Citation Envoyé par Pierre Fauconnier Voir le message
    Salut.

    Je plussoie Philippe sur l'utilisation de Power Query qui permet de rester dans un xlsx et qui offre un dédoublonnage plus souple que le filtre avancé tout en demandant moins de mise en place dès lors qu'on n'extrait pas toutes les colonnes ou pas dans même ordre que celui du tableau initial
    Un filtre avancé permet aussi de choisir les colonnes dans l'ordre voulu donc le critère discriminant pour le choix est davantage de se passer de VBA
    Chris
    PowerQuery existe depuis plus de 10 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  5. #5
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur informatique indépendant
    Inscrit en
    novembre 2003
    Messages
    17 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur informatique indépendant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 17 105
    Points : 49 257
    Points
    49 257
    Billets dans le blog
    92
    Par défaut
    Salut Chris,

    Power Query permet aussi le choix et l'ordre des colonnes, et est plus souple que le filtre avancé pour la gestion des doublons ainsi que pour la mise à jour de l'extraction (un simple clic droit suffit)(1). L'extraction sur une autre feuille (ce qui sera le cas dans 99% des cas) est également plus simple à gérer en Power Query => A partir de la version 2010, je déconseille le filtre avancé qui pour moi est devenu obsolète.


    (1) Je sais que tu le sais, hein C'est pour les lecteurs de la discussion que je précise cela.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    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...
    ---------------

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    avril 2007
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2007
    Messages : 663
    Points : 137
    Points
    137
    Par défaut
    Bonsoir,

    Merci pour vos réponse mais je n'arrive pas au résultat que je souhaite.

    Ce que je cherche à faire c'est une liste sans doublons des lignes visibles de la colonne "DATES" du tableau structuré "Tableau1".

    Comme je le dis dans mon post, boucler sur une plage de cellules et obtenir une liste d'éléments sans doublons, pas de soucis.

    Ça pèche dans la boucle pour transférer la liste dans la même feuille dans les cellule A2 B2 C2 … en fonction du nombre de valeurs uniques de cette liste.

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    janvier 2010
    Messages
    10 656
    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 : 10 656
    Points : 25 437
    Points
    25 437
    Billets dans le blog
    31
    Par défaut
    Bonjour,
    Ce que je cherche à faire c'est une liste sans doublons des lignes visibles de la colonne "DATES" du tableau structuré "Tableau1".
    Prenons le problème autrement.
    Comment obtient-on ces lignes visibles ?
    En effectuant un filtre, soit une ou plusieurs conditions donc le but est d'exporter les éléments uniques suivant conditions
    Problème que l'on peux résoudre avec PowerQuery OU avec la méthode AdvancedFilter
    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
    Ma dernière contribution : VBA - Les macros complémentaires

  8. #8
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur informatique indépendant
    Inscrit en
    novembre 2003
    Messages
    17 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur informatique indépendant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 17 105
    Points : 49 257
    Points
    49 257
    Billets dans le blog
    92
    Par défaut
    Si tu tiens vraiment à le faire par VBA plutôt que par Power Query, tu peux utiliser ceci, avec les deux tableaux sur des feuilles différentes

    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
    Sub Test()
      Dim r
      Dim i As Long
      Dim c As Range
     
      i = 1
      If Not Range("tableau2").ListObject.DataBodyRange Is Nothing Then Range("tableau2").ListObject.DataBodyRange.Delete
      ReDim r(1 To Range("tableau1").SpecialCells(xlCellTypeVisible).Count, 1 To 1)
      For Each c In Range("tableau1").SpecialCells(xlCellTypeVisible)
        r(i, 1) = c.Value
        i = i + 1
      Next
      Range("tableau2").Resize(i - 1).Value = r
      Range("tableau2").ListObject.DataBodyRange.RemoveDuplicates 1, xlYes
    End Sub

    Perso, je m'orienterais plutôt vers power query en transférant les conditions du filtre dans power query
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    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...
    ---------------

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    avril 2007
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2007
    Messages : 663
    Points : 137
    Points
    137
    Par défaut
    Bonsoir M. FAUCONNIER,

    Je suis navré de répondre tardivement pour vous dire que votre solution de deux tableaux sur des feuilles différentes me convient parfaitement et fonctionne tip top.

    Encore une fois merci.

  10. #10
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur informatique indépendant
    Inscrit en
    novembre 2003
    Messages
    17 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur informatique indépendant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 17 105
    Points : 49 257
    Points
    49 257
    Billets dans le blog
    92
    Par défaut
    J'en suis ravi

    Bonne weekend!
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    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. Renseigner une liste sans doublon dans une feuille ou dans un userform
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 26/01/2009, 14h54
  2. Liste sans doublon
    Par marc56 dans le forum Excel
    Réponses: 5
    Dernier message: 19/12/2007, 19h22
  3. liste sans doublons
    Par doons dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 08/10/2007, 13h47
  4. [SQL] Liste sans doublons
    Par tchin dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 19/09/2007, 13h43
  5. [VBA-E] Liste sans doublons pour remplir cellule
    Par Currahee dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/06/2007, 11h45

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