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 des mots sans doublons [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 59
    Points : 32
    Points
    32
    Par défaut Extraire des mots sans doublons
    Bonsoir

    J’ai un classeur Excel avec deux feuilles : OSCAR et JOURNAL

    Dans la colonne B2:B6000 de la feuille OSCAR il y a des mots doublons plusieurs fois, parfois en centaines.

    Mon souhait est une macro qui permet d’extraire les mots en questions sans leurs doublons dans la colonne B3:B60 de la feuille JOURNAL

    C'est-à-dire et par exemple si le mot VENTE existe n fois dans B2:B6000 de la feuille OSCAR il faut que je le trouve copié une seule fois dans la colonne B3:B60 de la feuille JOURNAL.

    Merci pour vos aides

  2. #2
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Une piste. Les deux classeurs doivent être ouverts, il te faut adapter les extensions des fichiers dans le code (.xlsx, .xlsm, etc...), ici, Oscar est .xslm et Journal, .xlsx :
    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
     
    Sub Test()
     
        Dim Dico As Object
        Dim Cle As Variant
        Dim Plage As Range
        Dim Cel As Range
     
        'attention, adapter les extansions des classeurs !
     
        With Workbooks("OSCAR.xlsm").Worksheets("Feuil1"): Set Plage = .Range(.Cells(2, 2), .Cells(.Rows.Count, 2).End(xlUp)): End With
     
        Set Dico = CreateObject("Scripting.Dictionary")
     
        For Each Cel In Plage: Dico(Cel.Value) = "": Next Cel
     
        Workbooks("JOURNAL.xlsx").Worksheets("Feuil1").Cells(3, 2).Resize(Dico.Count, 1).Value = Application.Transpose(Dico.Keys)
     
    End Sub

  3. #3
    Membre expérimenté Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 724
    Points : 1 454
    Points
    1 454
    Par défaut
    Bonjour, je vous propose une extraction de données sur la feuille Journal depuis Oscar. ci-dessous classeur d'exemple et lien avec le Tutorom de Philippe Tulliez.
    https://philippetulliez.developpez.c...dvancedfilter/
    TestExtraction.xlsm
    Cordialement

  4. #4
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Il suffit de copier l'intégralité de la liste et d'appliquer une méthode RemoveDuplicate sur la zone de destination.
    Lire ceci : https://msdn.microsoft.com/fr-fr/lib...3(v=office.15)

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 59
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Il suffit de copier l'intégralité de la liste et d'appliquer une méthode RemoveDuplicate sur la zone de destination.
    Lire ceci : https://msdn.microsoft.com/fr-fr/lib...3(v=office.15)
    Bonjour M. Menhir et merci d'avoir répondu à ma question
    la colonne de la feuille dont je veux extraire les données contient plus 6000 lignes et contient aussi des fonctions qui lient mon classeur avec un autre!
    si je recopie ça dans la deuxième feuille de classeur pour que je puisse utiliser removeDuplicate, j'aurais besoin de 6000 autres fonctions comme j'aurais besoin de ce classeur pour traiter d'autres dossiers!

  6. #6
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 59
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par Transitoire Voir le message
    Bonjour, je vous propose une extraction de données sur la feuille Journal depuis Oscar. ci-dessous classeur d'exemple et lien avec le Tutorom de Philippe Tulliez.
    https://philippetulliez.developpez.c...dvancedfilter/
    TestExtraction.xlsm
    Cordialement
    Monsieur Transitoire Merci beaucoup
    j'ai copié votre macro dans mon classeur mais je ne sais pas pourquoi elle m'a dupliqué un critère aussi elle a supprimé les bordures de tableau
    NB: je suis nul en VBA

    le code utilisé est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Extraction()
    Worksheets("JOURNAL").Activate
    Worksheets("OSCAR").Range("B2:B6000").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Worksheets("JOURNAL").Range("B2"), Unique:=True
    End Sub

    Nom : IMG_3017.JPG
Affichages : 197
Taille : 99,5 Ko

  7. #7
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 59
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par Theze Voir le message
    Bonjour,

    Une piste. Les deux classeurs doivent être ouverts, il te faut adapter les extensions des fichiers dans le code (.xlsx, .xlsm, etc...), ici, Oscar est .xslm et Journal, .xlsx :
    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
     
    Sub Test()
     
        Dim Dico As Object
        Dim Cle As Variant
        Dim Plage As Range
        Dim Cel As Range
     
        'attention, adapter les extansions des classeurs !
     
        With Workbooks("OSCAR.xlsm").Worksheets("Feuil1"): Set Plage = .Range(.Cells(2, 2), .Cells(.Rows.Count, 2).End(xlUp)): End With
     
        Set Dico = CreateObject("Scripting.Dictionary")
     
        For Each Cel In Plage: Dico(Cel.Value) = "": Next Cel
     
        Workbooks("JOURNAL.xlsx").Worksheets("Feuil1").Cells(3, 2).Resize(Dico.Count, 1).Value = Application.Transpose(Dico.Keys)
     
    End Sub

    Monsieur Theze

    J'ai un seul classeur pas deux, OSCAR et JOURNAL ne sont que deux feuilles de classeur en question

    Cordialement

  8. #8
    Membre expérimenté Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 724
    Points : 1 454
    Points
    1 454
    Par défaut
    Cher Kazannova, mon dossier joint est un exemple, j'ignore tout de votre dossier. Il s'agissait dans mon esprit de vous faire comprendre les possibilités des filtres élaborés. Je vous encourage donc à vous pencher sur le tutorom joint afin de comprendre comment l'adapter aux problèmes inhérents à votre dossier. Après si certains problèmes vous semblent incompréhensibles, il y aura toujours quelqu'un pour vous aider.
    Cordialement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub test()
    Worksheets("JOURNAL").Activate
    Worksheets("OSCAR").Range("A1:B2000").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Worksheets("OSCAR").Range("F1:F2"), CopyToRange:=Worksheets("JOURNAL").Range("B1"), Unique:=True
    Dans le code ci dessus qui n'est pas le même que celui que vous avez recopié,Range("A1:B2000") est donné à titre d'exemple et doit être ajusté à la réalité de votre document. Idem pour le criteria etc . Unique:=True permet d'éliminer les doublons.
    Je vous signale que dans votre recopie, vous avez omis la zone de critère : CriteriaRange:=Worksheets("OSCAR").Range("F1:F2")

  9. #9
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 59
    Points : 32
    Points
    32
    Par défaut
    Merci infiniment cher Transitoire

    Avec le code suivant ça marche bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Extraction()
    Worksheets("JOURNAL").Activate
    Worksheets("OSCAR").Range("B1:B6000").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Worksheets("JOURNAL").Range("B1"), Unique:=True
    End Sub
    Mon soucis est la perte des bordures de tableau. Une possibilité de les garder?



    J'ai bricolé par l'enregistrement d'une macro pour remettre les bordures effacées :-) mais c'est un travail de plus!

  10. #10
    Membre expérimenté Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 724
    Points : 1 454
    Points
    1 454
    Par défaut
    Mon soucis est la perte des bordures de tableau. Une possibilité de les garder
    J'ai bricolé par l'enregistrement d'une macro pour remettre les bordures effacées :-) mais c'est un travail de plus!
    Non, ça n'est pas un travail de plus, vous pouvez mettre votre enregistrement des bordures dans une autre macro ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Bordures()
    Application.ScreenUpdating = False   'permet d'éviter le rafraichissement de l'écran jusqu'a la fin de la procédure.
    ..........
    ..........     'code de l'enregistreur de macro
    Application.ScreenUpdating = true  'Rafraichissement de l'écran.
    end Sub
    Et vous rajoutez dans le code du post plus haut:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Sub test()
    Worksheets("JOURNAL").Activate
    Worksheets("OSCAR").Range("A1:B2000").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Worksheets("OSCAR").Range("F1:F2"), CopyToRange:=Worksheets("JOURNAL").Range("B1"), Unique:=True
    Bordures
    End Sub'  La procédure test après avoir extrait les données, va mettre en forme les bordures par l'appel de la procédure "Bordures"
    '

    Attention, je n'ai pas pu vérifier le bon fonctionnement de la macro
    Cordialement

  11. #11
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 59
    Points : 32
    Points
    32
    Par défaut
    Je l'ai fais et ça marche à merveille
    Un très grand merci Cher Transitoire

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

Discussions similaires

  1. Extraire des dates sans doublons
    Par jpma75 dans le forum Excel
    Réponses: 13
    Dernier message: 03/02/2016, 22h43
  2. [XL-2010] Extraire des données sans les doublons si la condition est atteinte
    Par luminused dans le forum Excel
    Réponses: 2
    Dernier message: 12/01/2015, 21h08
  3. [XL-2010] extraire des données sans doublon d'un tableau
    Par RobertThi dans le forum Excel
    Réponses: 6
    Dernier message: 20/01/2014, 16h03
  4. Réponses: 0
    Dernier message: 16/09/2008, 13h28
  5. extraire des mots à partir d'une chaine
    Par freestyler dans le forum Delphi
    Réponses: 5
    Dernier message: 28/09/2006, 15h04

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