Extractrion de données spécifiques à partir d'une plage de données.

S

Seb

Guest
Bonjour,

J'aimerais être en mesure d'extraire les données de la colonne C; D et G provenant de la FEUIL1 uniquement pour les lignes ayant une date de maturité n'excédant pas une année par rapport à la date actuelle.

Le résultat devrait être celui que j'ai créé dans la FEUIL2.

Merci beaucoup de votre aide et bonne journée,

Seb

P.S. le fichier n'est pas "zippé" il faut changer l'extension à .xls.
 

Pièces jointes

  • Classeur1.zip
    18 KB · Affichages: 26
  • Classeur1.zip
    18 KB · Affichages: 22
  • Classeur1.zip
    18 KB · Affichages: 27
O

omicron

Guest
Bonsoir Seb,

Tu trouveras en pièce jointe un exemple qui devrait, je pense, répondre au problème posé.

=====================================================
Private Sub CommandButton1_Click()

Dim Inp, Out As Range

Set Inp = Sheets("Feuil1").Range("B6:G6") 'Plage première ligne à analyser
Set Out = Sheets("Feuil2").Range("B6:D6") 'Plage première ligne extraite

While Inp.Cells(1) <> ""
If DateAdd("y", 1, Now) - Inp.Cells(1, 6) > 0 Then
Out.Cells(1, 1) = Inp.Cells(1, 2)
Out.Cells(1, 2) = Inp.Cells(1, 3)
Out.Cells(1, 3) = Inp.Cells(1, 6)
Set Out = Out.Offset(1, 0)
End If
Set Inp = Inp.Offset(1, 0)
Wend

End Sub
=====================================================

Si tu as besoin d'explications complémentaires, tu peux toujours me recontacter.

Omicron.
 

Pièces jointes

  • EcartDate.zip
    10.7 KB · Affichages: 23
R

Ronan

Guest
Bonsoir,

Voici un exemple conçu à partir d'une méthode de @+Thierry que j'ai trouvé formidablement formidable :eek:)

@+

Ronan

P.S. : Pour le ZIP, même méthode.

Pour info :

Sub Extract()
Dim plage As Variant
Dim plage2() As Variant
With Sheets("feuil2")
ligne = .Cells(65536, 2).End(xlUp).Row
If ligne >= 6 Then
.Range("b6:d" & ligne).ClearContents
End If
End With
With Sheets("feuil1")
plage = .Range("b6:g" & .Cells(65536, 2).End(xlUp).Row)
End With
If UBound(plage, 1) < 1 Then Exit Sub
For i = 1 To UBound(plage, 1)
If Year(plage(i, 6)) <= Year(Date) + 1 Then
ReDim Preserve plage2(2, x)
plage2(0, x) = plage(i, 2)
plage2(1, x) = plage(i, 3)
plage2(2, x) = plage(i, 6)
x = x + 1
End If
Next i
For i = 0 To UBound(plage2, 2)
With Sheets("feuil2")
.Cells(i + 6, 2) = plage2(0, i)
.Cells(i + 6, 3) = plage2(1, i)
.Cells(i + 6, 4) = plage2(2, i)
End With
Next i
End Sub
 

Pièces jointes

  • Classeur1.zip
    29 KB · Affichages: 27
  • Classeur1.zip
    29 KB · Affichages: 22
  • Classeur1.zip
    29 KB · Affichages: 33
A

andré

Guest
Bonjour Seb, omicron, Ronan et les autres,

Solution par formules :

Feuil1!D2 : Remplacer la date par : =AUJOURDHUI()
Feuil1!A6 : =SI(OU(G6="";MOIS.DECALER(D$2;12)>G6);"";MAX(A$5:A5)+1)
Formule à copier vers le bas
Feuil2!B6 : =SI(NB(B$5:B5)+1>MAX(Feuil1!$A:$A);"";RECHERCHEV(NB(B$5:B5)+1;Feuil1!$A:$G;3;0))
Formule à copier vers la droite en remplaçant l'avant-dernier argument (3) respectivement par 4 et 7.
Formules à copier vers le bas.

Cette solution permet une mise à jour tout à fait automatique, sans aucune intervention extérieure.

Ândré.
 

Discussions similaires

Statistiques des forums

Discussions
312 235
Messages
2 086 476
Membres
103 227
dernier inscrit
maloalek