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 :

extraction d'une liste de données sans doublons et triées


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2012
    Messages : 174
    Points : 144
    Points
    144
    Par défaut extraction d'une liste de données sans doublons et triées
    Bonsoir le forum

    Encore besoin de votre aide :

    J' ai réalisé un tri dans une base de données. J'extrais les ligne obtenues dans une nouvelle feuille qui me fera plusieurs calculs.
    Dans la colonne A, j'ai les essences qui peuvent être les mêmes sur plusieurs lignes et changer (exemple a,b,c,c,c,a,b,g,g,g,h,t,a,a,)

    de cette liste de valeur, je voudrais extraire une liste sans doublons et triée (à coller en Y3) de la feuille lotissement

    J'ai essayé à partir de deux méthodes différentes mais j'obtiens avec Sub sans doublons trié 1 une liste avec doublon (toutes les essences sont là
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Sub lotissement()
     
    Dim dl As Long
    'selection de la feuille "BD"; determination de laderniere ligne
    With Sheets("BD")
        dl = .Range("C" & .Rows.Count).End(xlUp).Row
     
     
    'Selectionne la plage filtrée et le copie vers la feuille "lotissement"
        .Range("C1:R" & dl).SpecialCells(xlCellTypeVisible).Copy Destination:=Worksheets("lotissement").Range("A11")
    End With
    Call SansDoublonsTrié1
    End Sub
    Sub SansDoublonsTrié1()
      Dim temp()
      Set f = Sheets("lotissement")
      Set mondico = CreateObject("Scripting.Dictionary")
      a = Range(f.[a12], f.[a65000].End(xlUp)).Value
      For Each c In a
         mondico(c) = ""
      Next c
      Set dest = f.Range("Y3")
      dest.Resize(mondico.Count, 1) = Application.Transpose(mondico.keys)
      dest.Resize(mondico.Count, 1).Sort Key1:=dest, Order1:=xlAscending
      Set mondico = Nothing ' libère mondico
    End Sub
    et avec lautre code sub listeessence, j'obtiens une liste incomplete

    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
    Private Sub liste_essence()
        Dim Cell As Range
        Dim Tableau()
        Dim TempTab As Variant
        Dim i As Integer, j As Integer
        Dim boolVerif As Boolean
     
        ReDim Tableau(2 To 2)
        Tableau(2) = Cells(2, 16)
     
        'Boucle sur les données de la colonne P, dans la BD
        For Each Cell In Worksheets("lotissement").Range("A12:A" & _
                            Worksheets("lotissement").Range("A65536").End(xlUp).Row)
            boolVerif = False
     
            'Vérifie si le contenu de la cellule existe déjà dans le tableau
            For i = 2 To UBound(Tableau)
                'Si la donnée existe déjà dans le tableau
                If Tableau(i) = Cell Then
                    boolVerif = True
                    Exit For
                End If
            Next i
     
            'Si la donnée n'existe pas dans le tableau, on augmente la taille du tableau
            'et on ajoute la donnée.
            If boolVerif = False Then
                ReDim Preserve Tableau(2 To UBound(Tableau) + 1)
                Tableau(UBound(Tableau)) = Cell
            End If
     
            'Tri le contenu du tableau par ordre croissant.
            For i = 2 To UBound(Tableau)
                For j = 2 To UBound(Tableau)
                    If Tableau(i) < Tableau(j) Then
                        TempTab = Tableau(i)
                        Tableau(i) = Tableau(j)
                        Tableau(j) = TempTab
                    End If
                Next j
            Next i
        Next Cell
     
       'copie du tableau en Y3
     Sheets("lotissement").Range(Cells(3, 25), Cells(UBound(Tableau), 25)).Value = Application.WorksheetFunction.Transpose(Tableau)
     
    End Sub

    pouvez vous m'aider??

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub SansDoublonsTrie()
    Dim MonDico As Object
    Dim c As Range
     
    Set MonDico = CreateObject("Scripting.Dictionary")
    With Worksheets("lotissement")
        For Each c In .Range("A12:A" & .Cells(.Rows.Count, 1).End(xlUp).Row)
            If Not MonDico.exists(c.Value) Then MonDico.Add c.Value, c.Value
        Next c
        .Range("Y3").Resize(MonDico.Count, 1) = Application.Transpose(MonDico.keys)
        .Range("Y3").Resize(MonDico.Count, 1).Sort Key1:=.Range("Y3"), Order1:=xlAscending, Header:=xlNo
    End With
    Set MonDico = Nothing
    End Sub

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2012
    Messages : 174
    Points : 144
    Points
    144
    Par défaut
    Bonsoir Mercatog

    j'ai testé avec ton code mais j'ai toujours des doublons dans les essences.

    Ton avis??
    Ces données proviennent de la BD et je recopie les données aprés tri dans la feuille "lotissement".

    J'ai teste en entrant de fausse valeurs sur les lignes (AAAA,BBB, CCC, ZZZ,ZZZ,AAA, BBB,DDD...) et dans ce cas, la procedure de tri sans doublon fonctionne.Mes données sont des especes d'arbres (CHENE HETRE...)

    Ou est le Bug???
    Cordialement

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Peut être tu as des espaces superflus. Essaies 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
    Sub SansDoublonsTrie()
    Dim MonDico As Object
    Dim c As Range
     
    Set MonDico = CreateObject("Scripting.Dictionary")
    With Worksheets("lotissement")
        For Each c In .Range("A12:A" & .Cells(.Rows.Count, 1).End(xlUp).Row)
            If Not MonDico.exists(Trim(c.Value)) Then MonDico.Add Trim(c.Value), Trim(c.Value)
        Next c
        With .Range("Y3").Resize(MonDico.Count, 1)
            .Value = Application.Transpose(MonDico.keys)
            .Sort Key1:=Worksheets("lotissement").Range("Y3"), Order1:=xlAscending, Header:=xlNo
        End With
    End With
    Set MonDico = Nothing
    End Sub

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2012
    Messages : 174
    Points : 144
    Points
    144
    Par défaut
    Bonsoir mercatog

    Un grand merci. Pour ma gouverne, peux tu m'expliquer ce que tu as fait pour supprimer ces espaces superflus et d'où proviennent ils?

    Cordialement

    lps02

  6. #6
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Trim permet de supprimer les espaces au début ou en fin des mots

    Tu avais peut être "Chêne liège" et "Chêne liège "
    Le 2ème a un espace en fin (invisible pour l'utilisateur)

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2012
    Messages : 174
    Points : 144
    Points
    144
    Par défaut
    Un grand merci

    Cordialement

    Lps02

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

Discussions similaires

  1. [XL-2003] Exporter une liste de données sans doublons après un filtre sur une deuxième feuille
    Par mandrake57 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/07/2011, 13h36
  2. créer une série de chiffre aléatoire dans une plage donnée, sans doublon
    Par ProgElecT dans le forum Vos contributions VB6
    Réponses: 4
    Dernier message: 02/07/2008, 10h02
  3. Liste de choix sans doublons dans une colonne
    Par LouFels dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/02/2008, 22h58
  4. [Modèle Relationnel] Une base de données sans liens ni triggers
    Par Promeneur dans le forum Schéma
    Réponses: 15
    Dernier message: 27/05/2005, 10h35
  5. Développer une base de données sans BDE dans DELPHI 3 PRO
    Par ndlh721 dans le forum Bases de données
    Réponses: 3
    Dernier message: 05/02/2005, 14h21

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