XL 2016 Copie de données suivant date

RENOUVEL Michel

XLDnaute Nouveau
Bonjour à toutes et tous,

Est-il possible de copier des cellules en ne prenant que la date la plus récente pour un même élément ?
J'ai effectué un tri par date et une recherche de doublons, mais c'est fastidieux.
Malheureusement je ne maitrise pas les macros..

Merci d'avance pour votre aide
Michel
 

Pièces jointes

  • Inventaire 2022.xlsx
    273.9 KB · Affichages: 8

Cousinhub

XLDnaute Barbatruc
Inactif
Bonjour,
Sur tes 5998 références uniques, seules 2901 ont une date de mise à jour (ou plusieurs)...
L'extraction ne pose donc pas de soucis pour icelles...
Cependant, que fait-on des 3097 références n'ayant aucune date de mise à jour?
On les fait apparaître quand même, ou on les supprime?
@ te relire
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @RENOUVEL Michel, @bhbh :),
  • Avec un simple TCD peut-être en colonne F à G?
  • Si ne veut pas les références sans date, appliquer un filtre sur les valeurs (Différent de 0) en cliquant droit sur la cellule F2 par exemple et sous menu Filtrer / Filtre s'appliquant aux valeurs... puis choisir différent de 0 (voir exemple le TCD en colonnes I à J
  • la colonne des valeurs G a été formatée avec le format personnalisée jj/mm/aaaa;"";"";@
nota: N'oubliez pas d'actualiser les TCD après avoir modifié des valeurs sources!
 

Pièces jointes

  • RENOUVEL Michel- Inventaire 2022.- v1.xlsx
    620.8 KB · Affichages: 4
Dernière édition:

RENOUVEL Michel

XLDnaute Nouveau
Bonjour,
Sur tes 5998 références uniques, seules 2901 ont une date de mise à jour (ou plusieurs)...
L'extraction ne pose donc pas de soucis pour icelles...
Cependant, que fait-on des 3097 références n'ayant aucune date de mise à jour?
On les fait apparaître quand même, ou on les supprime?
@ te relire
Bonjour, merci pour ta réponse, il faut supprimer les références n'ayant pas de date de maj.
C'est une extraction d'un logiciel, je ne peux même pas trier sur le champ date !!
Merci de ton aide
 

RENOUVEL Michel

XLDnaute Nouveau
Bonjour @RENOUVEL Michel, @bhbh :),
  • Avec un simple TCD peut-être en colonne F à G?
  • Si ne veut pas les références sans date, appliquer un filtre sur les valeurs (Différent de 0) en cliquant droit sur la cellule F2 par exemple et sous menu Filtrer / Filtre s'appliquant aux valeurs... puis choisir différent de 0 (voir exemple le TCD en colonnes I à J
  • la colonne des valeurs G a été formatée avec le format personnalisée jj/mm/aaaa;"";"";@
nota: N'oubliez pas d'actualiser les TCD après avoir modifié des valeurs sources!
Bonjour mapomme:,
c'est presque bon, il faut que je récupère les informations à minima code, désignation, PA et Date en colonne
car je viens ensuite rajouter une colonne pour les quantités en stock, avant d'importer de nouveau dans le logiciel de gestion. il s'agit d'un inventaire valorisé en PAMP et en Dernier PA..
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

Si vous acceptez le VBA...
Cliquer sur le bouton HOP! qui exécute la macro CodesDates dont le code est dans module1.
Le résultat est sur la feuille "Resultat".

Code :
VB:
Option Explicit
Const F1s = "Feuil1", F2s = "Resultat"

Sub CodesDates()
Dim F1, F2
   Application.ScreenUpdating = False
   Set F1 = Sheets(F1s): Set F2 = Sheets(F2s)
   F1.Columns("a:d").Copy F2.Columns("a:d"): F2.Select
   F2.Columns("d:d").Replace what:=CDate("00:00:00"), replacement:="#N/A"
   F2.Columns("a:d").Sort key1:=[d1], order1:=xlAscending, Header:=xlYes
   On Error Resume Next
   F2.Columns("d:d").SpecialCells(xlCellTypeConstants, xlErrors).EntireRow.Delete
   F2.Columns("d:d").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
   F2.Columns("a:d").Sort key1:=[a1], order1:=xlAscending, key2:=[d1], order2:=xlDescending, Header:=xlYes
   F2.Columns("a:d").RemoveDuplicates Columns:=1, Header:=xlYes
End Sub
 

Pièces jointes

  • RENOUVEL Michel- Inventaire 2022- v2a.xlsm
    290.4 KB · Affichages: 2
Dernière édition:

Phil69970

XLDnaute Barbatruc
Bonjour à tous

@RENOUVEL Michel

Si j'ai compris tu veux récupérer uniquement les infos avec la date la plus récente et les autres valeurs peuvent être supprimées

Je te propose ceci à mettre dans un module :

VB:
Sub SupDoublon()
Dim Derlig&, MaZone As Range
Derlig = Range("A" & Rows.Count).End(xlUp).Row

Set MaZone = Range("A1:D" & Derlig)

MaZone.Sort key1:=Cells(1, 1), Order1:=xlAscending, key2:=Cells(1, 4), Order2:=xlDescending, Header:=xlYes
MaZone.RemoveDuplicates Columns:=1, Header:=xlGuess
End Sub

Il te restera uniquement les valeurs les plus récentes ;)

Merci de ton retour

@Phil69970
 

RENOUVEL Michel

XLDnaute Nouveau
Re,

Si vous acceptez le VBA...
Cliquer sur le bouton HOP! qui exécute la macro CodesDates dont le code est dans module1.
Le résultat est sur la feuille "Resultat".

Code :
VB:
Option Explicit
Const F1s = "Feuil1", F2s = "Resultat"

Sub CodesDates()
Dim F1, F2
   Application.ScreenUpdating = False
   Set F1 = Sheets(F1s): Set F2 = Sheets(F2s)
   F1.Columns("a:d").Copy F2.Columns("a:d"): F2.Select
   F2.Columns("d:d").Replace what:=CDate("00:00:00"), replacement:="#N/A"
   F2.Columns("a:d").Sort key1:=[d1], order1:=xlAscending, Header:=xlYes
   On Error Resume Next
   F2.Columns("d:d").SpecialCells(xlCellTypeConstants, xlErrors).EntireRow.Delete
   F2.Columns("d:d").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
   F2.Columns("a:d").Sort key1:=[a1], order1:=xlAscending, key2:=[d1], order2:=xlDescending, Header:=xlYes
   F2.Columns("a:d").RemoveDuplicates Columns:=1, Header:=xlYes
End Sub
Excusez moi pour ma réponse tardive, j'étais en formation aujourd'hui, ça fonctionne parfaitement !! Il faut vraiment que je me forme sur le VBA :) . Je me permets d'abuser une dernière fois concernant un dernier traitement. J'ai récupérer le fichier de l'inventaire scanné. j'ai collé dans Excel dans le fichier en pièce jointe la colonne code et quantité en stock, peut-on, via une macro copier la quantité en stock (Colonne L)dans la Colonne I quand les codes (Colonne B et K) sont identiques..

Merci beaucoup pour votre aide précieuse :)
 

Pièces jointes

  • Projet Inventaire.xlsx
    213.7 KB · Affichages: 4

RENOUVEL Michel

XLDnaute Nouveau
Bonjour à tous

@RENOUVEL Michel

Si j'ai compris tu veux récupérer uniquement les infos avec la date la plus récente et les autres valeurs peuvent être supprimées

Je te propose ceci à mettre dans un module :

VB:
Sub SupDoublon()
Dim Derlig&, MaZone As Range
Derlig = Range("A" & Rows.Count).End(xlUp).Row

Set MaZone = Range("A1:D" & Derlig)

MaZone.Sort key1:=Cells(1, 1), Order1:=xlAscending, key2:=Cells(1, 4), Order2:=xlDescending, Header:=xlYes
MaZone.RemoveDuplicates Columns:=1, Header:=xlGuess
End Sub

Il te restera uniquement les valeurs les plus récentes ;)

Merci de ton retour

@Phil69970
Merci Beaucoup, je vais tester :)
 

RENOUVEL Michel

XLDnaute Nouveau
Re-bonjour,
Dans le fichier en pièce jointe je souhaiterais copier la quantité en stock, Colonne L, dans la Colonne I quand les codes (Colonne B et K) sont identiques..
Pour expliquer les colonnes de A à H sont issues d'un export de logiciel, les colonnes K et L sont issues d'un inventaire via une douchette.
J'espère avoir été clair sur le besoin :)
Merci beaucoup pour votre aide et votre patience
 

Pièces jointes

  • Projet Inventaire.xlsx
    213.7 KB · Affichages: 2

mapomme

XLDnaute Barbatruc
Supporter XLD
Dans le fichier en pièce jointe je souhaiterais copier la quantité en stock, Colonne L, dans la Colonne I quand les codes (Colonne B et K) sont identiques..

Re,

Un essai en VBA. Cliquer sur le bouton Hop!
Le code est dans Module1.

VB:
Option Explicit
Const colSource = "K", colCible = "I"     'Référence en lettre de la colonne Source et Cible"

Sub Stock()
Dim der&, numSource&, numCible&, t, dico, i&
   With ActiveSheet
      numSource = Cells(1, colSource).Column: numCible = Cells(1, colCible).Column
      If .FilterMode Then .ShowAllData
      .Cells(1, numCible).EntireColumn.ClearContents
      der = .Cells(.Rows.Count, numSource).End(xlUp).Row
      t = .Range(.Cells(1, numSource), .Cells(der, numSource)).Resize(, 2)
      Set dico = CreateObject("scripting.dictionary")
      For i = 2 To UBound(t)
         If t(i, 1) <> "" Then dico(t(i, 1)) = t(i, 2)
      Next i
      der = .Cells(.Rows.Count, "b").End(xlUp).Row
      t = .Range(.Cells(1, "b"), .Cells(der, "b"))
      t(1, 1) = "Quantité Stock (Maj)"
      For i = 2 To UBound(t)
         If t(i, 1) <> "" Then If dico.exists(t(i, 1)) Then t(i, 1) = dico(t(i, 1)) Else t(i, 1) = ""
      Next i
      .Cells(1, numCible).Resize(UBound(t)) = t
   End With
End Sub
 

Pièces jointes

  • RENOUVEL Michel- MàJ Stock- v1.xlsm
    223.4 KB · Affichages: 3
Dernière édition:

Cousinhub

XLDnaute Barbatruc
Inactif
Bonjour,
Par formule
Dans la cellule I2, tu mets cette formule :
VB:
=SIERREUR(INDEX($L$2:$L$1602;EQUIV(B2;$K$2:$K$1602;0));"")
Et tu incrémentes jusqu'en bas (double click sur la petite croix noire quand tu mets ta souris dur le coin inférieur droit de cette cellule I2)
Bonne journée
 

Discussions similaires