Extraction sans doublons date

Résolu
Vicolemino Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -  
Vicolemino Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,

Ca fait maintenant plusieurs jours que je tente désespérément d'extraire des dates d'une colonne dans une autre feuille en supprimant les doublons.

Le but de la manip en 2 mots:
Des personnes ont participé à une formation mais à des dates qui peuvent être différentes. En face du nom de chaque personne en feuille 1 est donc inscrite la date à laquelle il a fait la formation.
J'aimerais pouvoir extraire ces dates dans un autre tableau (situé en feuille 2) et grâce à la fonction NB.SI compter le nombre de personne ayant assisté à la formation à chaque date.
Je vous met en exemple 2 photos d'une de mes nombreuses tentatives (ici, n'ayant pas réussi à extraire dans une autre feuille, j'ai tenté d'extraire les dates sur la même feuille mais ça n'a pas fonctionné). J'essayerais de mettre le fichier excel en retrant chez moi ce soir.

J'espère avoir été clair dans ma demande. Je vous remercie pour votre aide et vous souhaite une bonne soirée.

Victor



2 réponses

  1. Frenchie83 Messages postés 2254 Statut Membre 339
     
    Bonjour
    Comme ceci, tout est expliqué dedans,
    https://www.cjoint.com/c/FDEeLcwjplw
    Cdlt
    0
    1. Vicolemino Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
       
      Salut Frenchie 83,

      Tout d'abord merci pour ta réponse rapide et très bien expliquée. Malheureusement j'ai déjà essayé cette solution (dans mon tableau complet, elle n'enlève pas tous les doublons, le remplissage ne doit pas être uniformisé) mais je suis à la recherche d'une façon automatique de le faire.

      Victor
      0
      1. Utilisateur anonyme > Vicolemino Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
         
        Bonsoir Victor,

        À l'ouverture du fichier, tu es sur Feuil1, où j'ai repris toutes tes dates.

        Va sur Feuil2, et remarque bien que le tableau est vide. Fais < Ctrl >< E > :
        ça remplit correctement le tableau, avec les dates en ordre croissant.

        Fichier Excel 2003 : Extraction sans doublon

        Cordialement.  😊
         
        0
    2. Vicolemino Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
       
      Bonjour albkan,

      Je m'excuse avant tout pour ce delai de réponse.
      Ta macro est super et fonctionne parfaitement.

      Malheureusement je suis vraiment une bille en VBA et j'aimerais bien progresser un peu. Penses-tu pouvoir mettre des commentaires expliquant un peu l'utilité de chaque ligne ?
      La prochaine étape de mon projet est de n'extraire que les dates supérieures au 01/01/2016 et j'aurais aimé réussir à le faire seul sans vous embêter du coup ce serait cool de comprendre ton code :).

      Merci beaucoup pour ton aide en tout cas !
      0
      1. Utilisateur anonyme > Vicolemino Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
         
        Bonjour Vicolemino,

        Je suis content que ma macro t'ai plu, mais comme en ce moment je suis
        vraiment débordé, je remets à plus tard mes commentaires pour chaque
        ligne ! J'essayerai de ne pas oublier !

        D'autre part, dans l'exemple que tu as donné, toutes les dates sont
        supérieures au 01/01/2016 !

        Donc extraire toutes les dates répondant à ce critère revient à obtenir
        l'ensemble de ces dates (c'est-à-dire le même tableau) !

        Il faudrait que tu donnes un autre exemple ; ou en restant sur le même,
        changer de critère : extraire toutes les dates supérieures au 10/02/2016
        ferai ressortir seulement les 4 dernières dates.

        Qu'en penses-tu ?  😊
         
        0
    3. Vicolemino Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
       
      Salut albkan,

      Ne t'inquiètes pas pour les commentaires, c'est déjà très gentil de m'avoir aidé !!

      Pour ce qui est de l'exemple que j'ai donné, il n'est effectivement pas très représentatif de ce que je voulais faire puisque j'ai en réalité un tableau d'environ 1200 lignes où les dates sont comprises entre 2014 et 2016 et vont sans cesse évoluer. D'où l'intérêt de faire cette extraction :)

      Je te remercie encore pour ton aide et je vais essayer de m'en sortir. Je reviendrais vers toi si besoin :)
      0
  2. Frenchie83 Messages postés 2254 Statut Membre 339
     
    Bonsoir
    En supposant que certaines dates soient au format texte,
    Avec une macro
    https://www.cjoint.com/c/FEbrF3d6X6w
    Cdlt
    0
    1. Vicolemino Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
       
      Salut Frenchie,

      Merci pour cette MAJ, l'intégration du bouton est un réel plus.
      Comme je l'expliquais à albkan plus haut je débute complètement en VBA et j'aimerais n'extraire que les dates supérieures au 01/01/2016.

      Pourrais-tu détailler ce que tu fais dans ton code en ajoutant des commentaires ? Je pourrais comme ça le comprendre et essayer d'ajouter les fonctionnalités que je veux.

      Merci encore pour ton aide !
      0
    2. Frenchie83 Messages postés 2254 Statut Membre 339 > Vicolemino Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
       
      Bonjour Vicolemino, Bonjour Albkan
      Voici les explications en commentaires,
      Pour comprendre le raisonnement, je suis parti des données fournies dans le sujet initial, Ma première réponse ne convenant pas parfaitement parce que suivant vos dires "dans mon tableau complet, elle n'enlève pas tous les doublons, le remplissage ne doit pas être uniformisé", j'en ai donc tenu compte dans le dernier envoi en retraitant la colonne des dates afin quelles soient toutes uniformisées et éviter ainsi tout plantage futur. Ensuite j'ai crée une zone de nom pour la colonne "PPS 8D Date" que je détruit et recrée à chaque fois pour l'adapter à la nouvelle longueur du tableau. Ensuite à l'aide d'un filtre avancé, les dates sans doublons sont recopiées sur la 2ème feuille, et la aussi, je recrée les formules de comptage pour les adapter à la longueur du nouveau tableau.
      Sub ExtractionSansDoublons()
          Dim DerCol As Integer, DerLig As Integer
          Application.ScreenUpdating = False
          Sheets("Tableau 2").Range("A3:A" & [A3].End(xlDown).Row).ClearContents
          Sheets("Tableau 1").Select
          ActiveWorkbook.Names("PPS8dDate").Delete 'Détruit la zone de nom "PPS8dDate" pour en créer une nouvelle adaptée à la longueur de la liste
          ActiveWorkbook.Names.Add Name:="PPS8dDate", RefersToR1C1:=Range("E1:E" & [E10000].End(xlUp).Row) 'création de la nouvelle zone de nom "PPS8dDate"
          DerCol = Range("A1").SpecialCells(xlCellTypeLastCell).Column 'on repère la dernière cellule du tableau
          Cells(1, DerCol) = 1 'Dans une cellule vide je met la valeur 1 que je copie
          Cells(1, DerCol).Copy
          Range("E1:E" & [E10000].End(xlUp).Row).Select
          Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply 'on fait un collage spécial multiplication, ce qui à pour effet de mettre toutes les dates au même format
          Sheets("Tableau 2").Select
          Range("A2:A3").Select
          Range("PPS8dDate").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("A2"), Unique:=True 'on va sur la feuille "Tableau 2" et on applique le filtre avancé
          Range("C3:C" & [A10000].End(xlUp).Row).FormulaR1C1 = "=IF(RC[-2]=0,"""",COUNTIF('Tableau 1'!R2C5:R19C5,'Tableau 2'!RC[-2]))" 'on recrée les formiules d'extraction du nombre de personnes formées
          Sheets("Tableau 1").Cells(1, DerCol).ClearContents ' on revient sur la feuille "TAbleau 1" pour effacer le 1 qui ne sert plus
      End Sub
      Cordialement
      0
    3. Vicolemino Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
       
      Bonjour Frenchie83 et merci pour le détail ! C'est beaucoup plus clair maintenant !
      Un truc que je ne comprends pas cependant, c'est que lorsque je l'adapte à mon vrai tableau, ce ne sont pas des dates qui ressortent mais des nombres. Par exemple 19/11/2015 devient 42327 et cette modification de la date apparaît à la fois en feuille 1 et en feuille 2. Saurais-tu d'où peut venir mon problème ?

      Mise à jour: Je viens de comprendre pourquoi j'ai eu ce problème. Le format des cellules passe automatiquement en standard lorsque j'applique la macro. Je vais essayer de trouver une solution !
      0
    4. Utilisateur anonyme > Vicolemino Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
       
      Bonjour Vicolemino,

      Le nombre 42327 est le N° de Série de la date 19/11/2015. C'est normal,
      et tu le vois ainsi car le format de ta cellule est le format Standard.

      Pour voir la date 19/11/2015 à la place de ce N° de Série, tu dois mettre le format
      "jj/mm/aaaa" ; et tu peux aussi mettre tout autre format de date qui te convient.

      Cordialement.  😊
       
      0
    5. Vicolemino Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   > Utilisateur anonyme
       
      Bonjour albkan,

      j'ai vu ça oui et du coup j'ai réussis à contourner le problème. Cependant je me retrouve face à une nouvelle difficulté. Je veux trier ces dates par ordre croissant. N'ayant pas réussi à réaliser un tri correct en laissant les cellules au format date, je travaille avec un format nombre et je finis par remettre un format date en toute fin de macro. Le problème que je rencontre est que le tri s'emmêle lorsque je repasse au format date. Ci-joint le code que j'ai réalisé (en me servant beaucoup de la première version de frenchie :) ) (je ne sais pas comment ajouter le code tel que vous l'avez fait plus haut...):

      Sub Macro2()
      Application.ScreenUpdating = False
      'On indique que les calculs ne seront pas affichés à l'écran

      With Range("Y17:Y200")
      .ClearContents
      End With
      'On efface les données présentes dans la colonne Y à partir de la ligne 17

      With Range("A23:A200")
      .ClearContents
      End With
      'On efface les données présentes dans la colonne A à partir de la ligne 23


      Range("PPS8dDate").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("Y17"), Unique:=True
      ' On extrait les valeurs de la colonne PPS8dDate sans doublons. (Unique=True signifie sans doublons)
      ' Pour garder les doublons, on écrit Unique= False

      For Each cellule In Sheets("résumé").Range("Y17:Y200")
      cellule.Value = Format(cellule.Value, "#.00")
      Next cellule

      x = 17
      While Cells(x, 25) <> ""
      If Cells(x, 25) <= 42370 Then
      Cells(x, 25).Delete
      x = x - 1
      End If
      x = x + 1
      Wend
      ' On supprime les dates inférieures à 42370= 01/01/2016 en chiffre
      ' Si l'on souhaite changer la date, il faut regarder sa valeur en l'écrivant dans une case
      ' et en changeant le format sur "nombre"


      Sheets("résumé").Select
      Range("Y17:Y200").Copy
      Range("A23").Select
      ActiveSheet.Paste
      'On copie-colle les valeur présentent dans la colonne Y à partir de la ligne 17
      'dans le tableau PPS 8D date

      With Worksheets("résumé")
      .AutoFilterMode = False
      .Range("A23:A200").AutoFilter
      End With
      Range("A23:A200").Sort Key1:=Range("A23"), Order1:=xlAscending, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal



      Range("A23:A10000").HorizontalAlignment = xlCenter
      Sheets("NEW").Range("E2:E10000").HorizontalAlignment = xlCenter
      ' On centre horizontalement les valeurs des cellules précédement définies au format date

      For Each cellule In Sheets("NEW").Range("E2:E1500")
      cellule.Value = Format(cellule.Value, "dd/mm/yyyy")
      Next cellule
      ' On repasse les valeurs en format date


      'For Each cellule In Sheets("résumé").Range("A23:A200")
      'cellule.Value = Format(cellule.Value, "dd/mm/yyyy")
      'Next cellule
      'On repasse les valeurs en format date


      Range("C23:C" & [A10000].End(xlUp).Row).FormulaR1C1 = "=IF(RC[-2]=0,"""",COUNTIF('NEW'!R2C5:R5000C5,'résumé'!RC[-2]))"
      'on recrée les formiules d'extraction du nombre de personnes formées

      With Range("Y17:Y200")
      .ClearContents
      End With
      'On efface les données présentes dans la colonne Y à partir de la ligne 17
      Application.ScreenUpdating = True
      'On raffiche les résultat à l'écran

      End Sub


      Vois-tu une erreur dedans qui expliquerait ce problème ?

      Je te remercie et te souhaite une bonne soirée !!

      Victor
      0