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 :

VBA : stocker sans doublon [XL-2003]


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 Djohn
    Profil pro
    Inscrit en
    Février 2007
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 309
    Par défaut VBA : stocker sans doublon
    Bonjour,

    Je possede un tableau constitué d'une unique colonne A, avec une centaine de ligne
    une boucle se charge de stocker chaque element dans une variable String.

    Mon objectif est de stocker chaque element, sauf si l'element y est deja présent.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Dim Stock As String
    Dim n As Integer
    n = 1
     
    While Cells(n, 1) <> ""
    ' il faudrait ici creer un controle qui vérifie si l'élement contenu 
    ' dans la  cellule est déja apparu dans la colonne
    Stock = Stock & ";" & Cells(n, 1)
    n = n+1
    Wend
    si vous avez une idée pas trop lourde a mettre en place, et surtout sans faire de filtre préalablement.
    Merci

  2. #2
    Expert éminent 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
    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
    15
    16
    17
    Sub test()
    Dim LastLig As Long, j As Long
    Dim Kol As New Collection
    Dim Stock  As String
     
    LastLig = Cells(Rows.Count, "A").End(xlUp).Row
    For j = 1 To LastLig
        On Error Resume Next
        Kol.Add Range("A" & j).Value, CStr(Range("A" & j).Value)
    Next j
     
    For j = 1 To Kol.Count
        Stock = Stock & ";" & Kol.Item(j)
    Next j
    Stock = Mid(Stock, 2)
    MsgBox Stock
    End Sub

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    389
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 389
    Par défaut
    Un autre essai avec Dictionary

    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
     
    Sub sc()
    Dim mondico As Object
    Dim cellule As Range
    Dim temp As Variant
    Dim alitems As Variant
    Dim i
     
        Set mondico = CreateObject("Scripting.Dictionary")
            For Each cellule In Range([A2], [A65536].End(xlUp))
                mondico.Item(cellule.Value) = cellule.Value
            Next cellule
     
        alitems = mondico.Items
     
            For i = 0 To UBound(alitems)
                temp = temp & alitems(i) & ", "
            Next i
     
        [D2] = temp
     
    End Sub

  4. #4
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    Une autre idée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim Stock As String
    Dim n As Integer
    n = 1
     
    While Cells(n, 1) <> ""
        if not stock like "*;" & cells(n,1) & "*" Then Stock = Stock & ";" & Cells(n, 1)
    n = n+1
    Wend
    Stock = mid$(stock,2)
    Cordialement,

    PGZ

  5. #5
    Membre éclairé Avatar de Djohn
    Profil pro
    Inscrit en
    Février 2007
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 309
    Par défaut
    merci bcp,
    par curiosité, j'ai testé tous les codes, et ca ma permis d'apprendre des choses interessantes.
    j'ai finalement retenu le code de PGZ (le plus court

    merci

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 01/11/2014, 11h43
  2. Réponses: 0
    Dernier message: 16/09/2008, 13h28
  3. [VBA-E] Liste unique sans doublon
    Par MatMeuh dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/07/2007, 10h39
  4. [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
  5. [vba] - Combobox + Filtre Auto + Sans Doublons
    Par RegiO dans le forum Général VBA
    Réponses: 2
    Dernier message: 25/04/2007, 09h43

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