Extraction sans doublons date

Résolu/Fermé
Vicolemino
Messages postés
9
Date d'inscription
vendredi 29 avril 2016
Statut
Membre
Dernière intervention
9 mai 2016
- 29 avril 2016 à 17:15
Vicolemino
Messages postés
9
Date d'inscription
vendredi 29 avril 2016
Statut
Membre
Dernière intervention
9 mai 2016
- 9 mai 2016 à 16:00
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

Frenchie83
Messages postés
2237
Date d'inscription
lundi 6 mai 2013
Statut
Membre
Dernière intervention
20 juin 2022
332
30 avril 2016 à 06:38
Bonjour
Comme ceci, tout est expliqué dedans,
https://www.cjoint.com/c/FDEeLcwjplw
Cdlt
0
Vicolemino
Messages postés
9
Date d'inscription
vendredi 29 avril 2016
Statut
Membre
Dernière intervention
9 mai 2016

1 mai 2016 à 17:57
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
Utilisateur anonyme > Vicolemino
Messages postés
9
Date d'inscription
vendredi 29 avril 2016
Statut
Membre
Dernière intervention
9 mai 2016

1 mai 2016 à 20:26
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
Vicolemino
Messages postés
9
Date d'inscription
vendredi 29 avril 2016
Statut
Membre
Dernière intervention
9 mai 2016

3 mai 2016 à 15:58
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
Utilisateur anonyme > Vicolemino
Messages postés
9
Date d'inscription
vendredi 29 avril 2016
Statut
Membre
Dernière intervention
9 mai 2016

3 mai 2016 à 16:31
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
Vicolemino
Messages postés
9
Date d'inscription
vendredi 29 avril 2016
Statut
Membre
Dernière intervention
9 mai 2016

4 mai 2016 à 08:37
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
Frenchie83
Messages postés
2237
Date d'inscription
lundi 6 mai 2013
Statut
Membre
Dernière intervention
20 juin 2022
332
1 mai 2016 à 19:34
Bonsoir
En supposant que certaines dates soient au format texte,
Avec une macro
https://www.cjoint.com/c/FEbrF3d6X6w
Cdlt
0
Vicolemino
Messages postés
9
Date d'inscription
vendredi 29 avril 2016
Statut
Membre
Dernière intervention
9 mai 2016

3 mai 2016 à 16:02
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
Frenchie83
Messages postés
2237
Date d'inscription
lundi 6 mai 2013
Statut
Membre
Dernière intervention
20 juin 2022
332 > Vicolemino
Messages postés
9
Date d'inscription
vendredi 29 avril 2016
Statut
Membre
Dernière intervention
9 mai 2016

3 mai 2016 à 18:05
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
Vicolemino
Messages postés
9
Date d'inscription
vendredi 29 avril 2016
Statut
Membre
Dernière intervention
9 mai 2016

Modifié par Vicolemino le 4/05/2016 à 09:35
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
Utilisateur anonyme > Vicolemino
Messages postés
9
Date d'inscription
vendredi 29 avril 2016
Statut
Membre
Dernière intervention
9 mai 2016

4 mai 2016 à 13:23
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
Vicolemino
Messages postés
9
Date d'inscription
vendredi 29 avril 2016
Statut
Membre
Dernière intervention
9 mai 2016
> Utilisateur anonyme
Modifié par Vicolemino le 4/05/2016 à 17:10
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