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

  • Initiateur de la discussion Initiateur de la discussion Seb
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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😀6") '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

Bonsoir,

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

@+

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

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é.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
8
Affichages
733
Retour