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 :

Extraire les noms apparaissant dans un tableau de données [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 87
    Points : 38
    Points
    38
    Par défaut Extraire les noms apparaissant dans un tableau de données
    Bonjour,

    J'ai un tableau de données qui se remplit par un userform.
    La colonne 1 contient des noms. Ces noms peuvent apparaître plusieurs fois dans le tableau.

    Je souhaite extraire tous les noms différents qui apparaîtront dans le tableau et les mettre dans d'autres cellules que je choisirais.

    Comment puis-je faire?

    Je me doute déjà que je dois faire une boucle for pour étudier tout le tableau. Mais ensuite?

    Merci.

  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
    Et avec TCD?

  3. #3
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour,

    Un exemple de code qui fait ce que tu souhaites

    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
     
    Dim i As Long 'ligne source
    Dim j As Long 'ligne destination
     
    i = 2
    j = 2
     
    Do While Range("L" & i).Value <> ""
     
        If Application.WorksheetFunction.CountIf(Range("Q:Q"), Range("L" & i).Value) = 0 Then
            Range("Q" & j).Value = Range("L" & i).Value
            j = j + 1
        End If
     
     
        i = i + 1
    Loop
    EDIT :
    Colonne L => Source
    Colonne Q => Destination

  4. #4
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    bonjour JessieCoutas mercatog re jfontaine le forum comme je comprends!!
    extraire les noms sans doublons l'exemple copy les noms de la sheets1 vers la sheets 2 a adapter.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Option Explicit
    Sub test()
     Dim c As Variant, M As Object
    Application.ScreenUpdating = False
    Set M = CreateObject("Scripting.Dictionary")
    With Sheets(1)
    For Each c In .Range("A1", .[a65000].End(xlUp))
    M(c.Value) = IIf(M.exists(c.Value), M(c.Value) + 1, 1)
    Next c
    Sheets(2).[a1].Resize(M.Count, 1) = Application.Transpose(M.keys)
    End With
    End Sub

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 87
    Points : 38
    Points
    38
    Par défaut N'enlève pas les doublons
    Bonjour,

    Merci pour vos réponses.
    J'ai essayé ton code Laetitia et ça n'enlève pas les doublons. Que dois-je écrire pour que ça les enlève?

    Par ailleurs, j'aimerai que chaque nom de la liste soit collé dans Sheets(2) mais toutes les 3 lignes.

    Peux-tu m'aider s'il te plait?

    Merci beaucoup.
    Bonne journée.

  6. #6
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Bonjour,
    Pour ce qui est des doublons regarde ce petit tutoriel
    http://silkyroad.developpez.com/excel/doublons/

    Je te conseil d'essayer de t'en inspirer pour réaliser une collection contenant les noms
    (cf : IV-A. Créer une liste sans doublons)

    Tu t'inspires de ce code et au lieu d'afficher la liste avec
    tu met quelque chose qui ressemble à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(2).range("A" & 3*i) Un.Item(i)
    Essaye de faire le code, teste le et si ca ne fonctionne pas montre nous ce que tu as fait et explique ce qui ne va pas

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 87
    Points : 38
    Points
    38
    Par défaut
    Bonjour,

    J'ai lu le tutoriel et essayé de l'appliquer, mais je débute et ne comprends pas tout...

    Dans un premier temps , je ne sais pas comment l'appliquer pour qu'il balaye ma colonne A car la plage, je ne la connais pas.

    Ensuite, il ne comprend pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(2).range("A" & 3*i) Un.Item(i)
    .

    Désolée, je ne suis pas très douée...
    N'est-il pas possible de repartir du code de Laetitia et de faire en sorte qu'il n'y ait pas de doublons et que le résultat s'affiche toutes les 3 lignes?

    Merci beaucoup.

  8. #8
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Ligne 5 de ta macro ca coince rajoute une virgule.... ha non c'est pas ca.
    Peut être qu'en nous montrant comment tu as essayer d'adapter le code on pourra t'aider. Moi en tout cas je ne le ferais pas a ta place

    Pour éviter les doublons le mieux est une collection sinon tu peux reparcourir tout ce qui a déjà été fait et ne copier l'info que si elle n'est pas déjà présente mais c'est lourd.

    edit pour le code j'ai oublié un =
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(2).range("A" & 3*i) = Un.Item(i)
    Re edit
    Tu ne connais pas ta plage? tu connais la première ligne et la colonne non?
    regarde ici

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 87
    Points : 38
    Points
    38
    Par défaut Erreur 400
    Il me dit Erreur 400. Voici 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
    Sub Test()
        Dim DerniereLigne
        Sheets("Suivi déchets NON DANGEREUX").Select
        DerniereLigne = Range("A11").End(xlDown).Row
        Creer_Liste_SansDoublons Range("A11:DerniereLigne")
    End Sub
     
    Sub Creer_Liste_SansDoublons(Plage As Range)
        Dim Cell As Range
        Dim Un As Collection
        Dim i As Long
     
        Set Un = New Collection
     
        On Error Resume Next
     
        'Boucle sur la plage de cellule
        For Each Cell In Plage
            'If Cell <> "" Permet de ne pas prendre en compte les cellules vides
            'Un.Add Cell, CStr(Cell) Ajoute le contenu de la cellule dans la collection
            If Cell <> "" Then Un.Add Cell, CStr(Cell)
        Next Cell
     
        On Error GoTo 0
     
        'Boucle sur les éléments de la collection.
        For i = 46 To Un.Count
            'Ecrit le résultat dans la fenêtre d'exécution (Ctrl+G)
            Sheets("Moyens Humains, Techniq, Financ").Range("A" & 3 * i) = Un.Item(i)
        Next i
     
        Set Un = Nothing
    End Sub

  10. #10
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A11:DerniereLigne")
    la ca coince
    Du'une par il manque un A comme dans
    "A11:A25"
    d'autre part tu n'utilise pas la variable DerniereLigne, tout ce qui est entre guillemet est une chaine de caractère pas une variable

    essaye ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    dim variable as integer
    variable=125
    msgbox "variable"
    msgbox variable
    msgbox "A variable"
    msgbox "A" & " variable"
    msgbox "A" &  variable
    tu essayes de corriger

    Sinon tu as testé en donnant directement une plage fixe?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Creer_Liste_SansDoublons Range("A11:A25")
    Ca fait partie des réflexe a avoir pour savoir ce qui coince (dans ton cas le derniereligne coince ca c'est sure=

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 87
    Points : 38
    Points
    38
    Par défaut
    J'ai fait la modification sur la variable DerniereLigne. Je n'ai plus d'erreur mais il ne se passe rien.

    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
    Sub Test()
     
        Dim DerniereLigne
        Sheets("Suivi déchets NON DANGEREUX").Select
        DerniereLigne = Range("A11").End(xlDown).Row
        Creer_Liste_SansDoublons Range("A11" & DerniereLigne)
    End Sub
     
    Sub Creer_Liste_SansDoublons(Plage As Range)
        Dim Cell As Range
        Dim Un As Collection
        Dim i As Long
     
        Set Un = New Collection
     
        On Error Resume Next
     
        'Boucle sur la plage de cellule
        For Each Cell In Plage
            'If Cell <> "" Permet de ne pas prendre en compte les cellules vides
            'Un.Add Cell, CStr(Cell) Ajoute le contenu de la cellule dans la collection
            If Cell <> "" Then Un.Add Cell, CStr(Cell)
        Next Cell
     
        On Error GoTo 0
     
        'Boucle sur les éléments de la collection.
        For i = 46 To Un.Count
            'Ecrit le résultat dans la fenêtre d'exécution (Ctrl+G)
            Sheets("Moyens Humains, Techniq, Financ").Range("A" & 3 * i) = Un.Item(i)
        Next i
     
        Set Un = Nothing
    End Sub

  12. #12
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox "A11" & DerniereLigne
    Tu trouves pas qu'il manque quelque chose?
    maintenant essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox  "A11:A" & DerniereLigne
    La c'est mieux non?
    on tape bien
    Et est ce que tu as essayé avec une plage fixe? ca nous aurais permis de vérifier directement que c'était bien le seul problème
    Mais bon la ca devrait coller test et dit nous si cela te va

    A condition de virer ton 46
    i va de 0 a un.count
    si tu veux décaler la ligne ou tu écris tu le fait dans le range ou alors tu vas perdre les 46 première valeurs de la liste

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 87
    Points : 38
    Points
    38
    Par défaut
    Ah oui mince, je me sens un peu bête pour le coup du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "A11:A" & DerniereLigne
    . Merci.

    J'ai essayé avec une plage fixe mais ça ne fonctionne pas non plus.

    Je souhaite extraire de ma liste initiale de noms qui débute Range("A11") dans Sheets("Suivi déchets NON DANGEREUX"), les noms sans doublons et les mettre toutes les 3 lignes dans la feuille "Moyens..." à partir de la ligne "A46".
    Fichiers attachés Fichiers attachés

  14. #14
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Je n'ouvre pas les fichier joins pour plein de raisons certaines sont même relativement bonne.

    Est ce que tu as enlevé le 46?
    Dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        For i = 46 To Un.Count
            Sheets("Moyens Humains, Techniq, Financ").Range("A" & 3 * i) = Un.Item(i)
        Next i
    La tu commence a lire la 46ème valeur de la liste et tu écriras toutes les 3 ligne a partir de la 138ème ligne
    Je ne sais pas si c'est ce que tu veux mais je pense que non alors remplace le 46 par 1 comme dans l'exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        For i = 1 To Un.Count
            Sheets("Moyens Humains, Techniq, Financ").Range("A" & 3 * i+1) = Un.Item(i)
        Next i
    edit petite corection ce n'est pas a partir de 0 mais de 1

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 87
    Points : 38
    Points
    38
    Par défaut
    Oui c'est ce que j'ai fait déjà dans le fichier que je t'ai envoyé.
    Je te remets 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
    Sub Test()
     
        Dim DerniereLigne
        Sheets("Suivi déchets NON DANGEREUX").Select
        DerniereLigne = Range("A11").End(xlDown).Row
        Creer_Liste_SansDoublons Range("A11:A" & DerniereLigne)
    End Sub
     
    Sub Creer_Liste_SansDoublons(Plage As Range)
        Dim Cell As Range
        Dim Un As Collection
        Dim i As Long
     
        Set Un = New Collection
     
        On Error Resume Next
     
        'Boucle sur la plage de cellule
        For Each Cell In Plage
            'If Cell <> "" Permet de ne pas prendre en compte les cellules vides
            'Un.Add Cell, CStr(Cell) Ajoute le contenu de la cellule dans la collection
            If Cell <> "" Then Un.Add Cell, CStr(Cell)
        Next Cell
     
        On Error GoTo 0
     
        'Boucle sur les éléments de la collection.
        For i = 1 To Un.Count
            'Ecrit le résultat dans la fenêtre d'exécution (Ctrl+G)
            Sheets("Moyens Humains, Techniq, Financ").Range("A" & 3 * i) = Un.Item(i)
        Next i
     
        Set Un = Nothing
    End Sub

  16. #16
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    ???
    Au final la question est de qui ??
    Mais je suis perdu moi

    En tout cas le classeur exemple fonctionne pile poile (visiblement il fait même les majuscule minuscule sans se mettre en option copare text) donc bon je suppose que la personne qui a lancé la discutions peut le mettre en non?

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 87
    Points : 38
    Points
    38
    Par défaut
    Merci beaucoup Krovax!

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 25/05/2009, 20h09
  2. Extraire les images contenues dans un fichier word
    Par elreybubu dans le forum Delphi
    Réponses: 2
    Dernier message: 25/10/2006, 13h07
  3. Réponses: 1
    Dernier message: 01/05/2006, 11h17
  4. Réponses: 15
    Dernier message: 02/12/2005, 17h12
  5. Éliminer les lignes blanches dans un tableau
    Par DenPro dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 18/11/2004, 01h27

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