Forum Clubic

Extraction valeur unique

:hello: ici!

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:

Exemple:

121011	16/11/2011
081011	16/11/2011
121011	16/11/2011
081011	16/11/2011
081011	16/11/2011
121011	16/11/2011
081011	16/11/2011
081011	16/11/2011
121011	17/11/2011
121011	17/11/2011
121011	17/11/2011
121011	18/11/2011
060911	18/11/2011
270911	18/11/2011
270911	18/11/2011
260911	18/11/2011
121011	18/11/2011
121011	18/11/2011

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:

16/11/2011	
121011
081011

17/11/2011
121011

18/11/2011
121011
060911
270911
260911

Tout ce que j’ai réussi à faire, c’est extraire les valeurs unique de chaque colonne, mais sans les trier par date de notre production :sweet:

Help please :peur:
Edité le 23/11/2011 à 09:32

et tu veux faire ça avec quel logiciel ?

Arf pardon :nexath

Sur excel avec une macro :jap:
Edité le 22/11/2011 à 19:55

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

Avec ce que tu m’as écris, ça va copier toutes mes dates, et seulement quand la date change, me recopier la date de fabrication du produit

Ce que je voudrais c’est que à partir de ça:

http://nsa27.casimages.com/img/2011/11/23/mini_111123015200577967.jpg

On obtient ça:

http://nsa28.casimages.com/img/2011/11/23/mini_111123015250159499.jpg

Ne pas chercher toutes les valeurs, elles n’apparaissent pas sur l’image [:shy]
Edité le 23/11/2011 à 13:45

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.

C’est bien que je veux pour les dates écritent normalement :jap:

Mais ça je peux les faires sortir avec cette fonction:

Range("A34:A10000").AdvancedFilter Action:=xlFilterCopy, Copytorange:=Range("c1:c10000"), Unique:=True

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

Merci, ça fonctionne très bien :jap:

J’ai juste un soucis avec le tri, il m’efface ma sélection :paf:

Mais si je le fais manuellement, pas de soucis :etonne2:

Maintenant, à partir de ça, je vais essayer de ne pas afficher les doublons de la date de fabrication des produits qui sont en colonne A :whistle:

Souhaitez-moi bonne chance :nexath

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

J’ai pourtant bien corrigé ça pour mon tableau, mais je vais essayer avec currentregion :jap:

Oui c’est ça :jap: Et c’est ce que je vais faire :icon_biggrin:

Merci encore pour ton aide :jap:
Edité le 28/11/2011 à 13:29