Je viens vers vous car j’ai une demande d’un collègue, mais là il me pose une colle :paf:
Donc je vous explique:
J’ai un tableau avec plusieurs colonnes qui sont toutes filtrées. Dans les deus premières colonnes, je n’ai que des dates (une en format date, mais l’autre avec seulement les chiffres à la suite ex: 221111). Ce sont des dates de production. L’une correspond à notre date à nous de production et l’autre à la date de production d’un élément du produit. Il se peut donc que par exemple, dans notre de fabriquation du 10/11/2011 par exemple, j’ai des éléments qui ont été produits le 100811 ou encore le 211011 etc etc…
Ce qu’il faut, c’est que j’arrive à extraire les dates de production du produit durant nos dates à nous :pt1cable:
Donc dans cette liste, pour une production du 16/11/2011, j’ai 2 dates différentes de produits (121011 et 081011), pour le 17/11/2011 j’en ai qu’une (121011) et pour le 18/11/2011 j’en ai 4 (121011, 270911, 260911, 060911) On obtient donc ça:
Tu commences par faire un tri de ton tableau, sur la 2e colonne croissante puis sur la première décroissante, d’après ton exemple.
Ca, tu peux le faire manuellement ou dans la macro.
Ensuite pour la mise en page proprement dite, tu fais en sorte que ta macro balaie les lignes du tableau
si 1e ligne ou cellule colonne B identique à celle juste au dessus, écrire cellule colonne B dans la zone cible
sinon écrire cellule colonne A
passer à la ligne suivante
une solution à la macgyver : changer la couleur police pour la rendre de la même couleur que l’arrière plan.:paf:
et ce, de manière conditionnelle :
la première cellule de la ligne de donnée n’est affectée, aucune règle,
sur la deuxième ligne, la cellule est mise en forme : ‘Format’ -> ‘Mise en forme conditionnelle’ : “La valeur de la cellule est” - “égale à” - “D1” (D1 correspond à la première cellule de la première ligne), "Format -> “Couleur = blanc” (arrière plan blanc d’avance).
puis cette mise en forme conditionnelle est déployée sur toutes les cellules.
exemple, ligne 3, la condition est “La valeur de la cellule est” - “égale à” - “D2”
j’ai testé, et visuellement on ne voit plus que les dates qui nous intéressent, mais en sélectionnant tout, on revoit toutes les dates.
Je vous l’accorde à tous, c’est du bricolage.
Et avec ça, ça me dit les valeurs qui existent dans ma colonne. Parce que ça 'as pas l’air comme ça, mais je peux avoir facilement 1500 lignes à trier :paf:
C’est sur que ça répond à ma demande, mais faut quand même que je me farçisse le millier de lignes :ane:
Je peux aussi le faire avec la fonction sommeprod me dirai vous, sauf que tous les jours, ce millier de lignes va changer :jap:
Non, c’est le contraire, la date (colonne B) n’est écrite que si elle est différente de celle de la ligne précédente.
Par contre, c’est un peu approximatif, j’aurais dû mettre
écrire cellules colonne A et B dans la zone cible.
Et là, on obtient quelque chose de semblable à ta copie d’écran.
Après, présenter les valeurs en une seule colonne comme tu l’avais montré au début, ou en deux colonnes séparées, ce n’est qu’une question de gestion d’offset dans la zone cible.
Sub Macro1()
Range("A1:B18").Select
Selection.Sort Key1:=Range("B1"), Order1:=xlDescending, Key2:=Range("A1") _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
:=xlSortNormal
Set Rsource = Range("A1")
Set Rcible = Range("E1")
' 1e ligne
Rcible.Value = Rsource.Offset(0, 1).Value
Rcible.Offset(0, 1).Value = Rsource.Value
Set Rcible = Rcible.Offset(1)
'suivantes
For Each c In Range(Rsource.Offset(1), Rsource.End(xlDown))
If c.Offset(0, 1).Value <> c.Offset(-1, 1).Value Then
Rcible.Value = c.Offset(0, 1).Value
End If
Rcible.Offset(0, 1).Value = c.Value
Set Rcible = Rcible.Offset(1)
Next
End Sub
Normal, c’est un exemple. Il faut que tu adaptes la première ligne (Range(“A1:B18”).Select).
Ou alors tu la supprimes complètement et tu fais d’abord une sélection manuelle.
Autre solution si tu tries la totalité du tableau :
Range(“A1”).CurrentRegion.select
si ton tableau commence en A1, bien sûr
Peut être mieux encore, en sélectionnant n’importe quelle cellule du tableau :
ActiveCell.CurrentRegion.select
Après le tri, ça revient à ne pas écrire une ligne si elle est identique à la précédente, non ?
Dans ce cas il suffit d’insérer un if juste en dessous du for each