Extraire des données d'un tableau Excel selon un interval du temps
Bonjour à tous et à toutes;
SVP, pouvez-vous m'aider dans ce tableau excel. En faite, je veux apprendre une astuce qui me permet de garder les Y qui ont des observations continues de 2000 à 2005, soit 6 observations. Ceux qui ne suivent pas cette chronologie c'est à dire de 2000 à 2005 ou bien qui ont moins ou plus que 6 observations seront éliminées.
merci beaucoup.
Bonjour et bienvenue sur le forum
Un essai à tester. Te convient-il ?
Option Explicit
Dim dico As Object, tablo, tabloR(), cle
Dim i&, j&, n&, k&
Sub Extraire()
tablo = Range("A1").CurrentRegion
Set dico = CreateObject("Scripting.Dictionary")
'on compte le nombre de valeurs de chague valeur différente de Y
For i = 2 To UBound(tablo, 1)
If dico.exists(tablo(i, 1)) Then
dico(tablo(i, 1)) = dico(tablo(i, 1)) + 1
Else
dico(tablo(i, 1)) = 1
End If
Next i
cle = dico.keys
k = 0
For n = 0 To dico.Count - 1
If dico(cle(n)) = 6 Then
For i = 2 To UBound(tablo, 1)
If tablo(i, 1) = cle(n) Then
If tablo(i, 2) = 2000 Or tablo(i, 2) = 2001 _
Or tablo(i, 2) = 2002 Or tablo(i, 2) = 2003 _
Or tablo(i, 2) = 2004 Or tablo(i, 2) = 2005 Then
ReDim Preserve tabloR(1 To 4, 1 To k + 1)
For j = 1 To 4
tabloR(j, 1 + k) = tablo(i, j)
Next j
k = k + 1
End If
End If
Next i
End If
Next n
Range("F2").CurrentRegion.Offset(1, 0).ClearContents
Range("F2").Resize(UBound(tabloR, 2), 4) = Application.Transpose(tabloR)
End Sub
Bye !
Bonjour
Bonjour à tous
En comparant les résultats de ma copie à ceux de JFL (Salut à lui !) je m'aperçois que les miens sont faux ...
Un nouvel essai pour les corriger et ne pas rester sur un échec.
Option Explicit
Dim dico As Object, tablo, tabloR(), cle
Dim i&, j&, n&, k&
Sub Extraire()
tablo = Range("A1").CurrentRegion
Set dico = CreateObject("Scripting.Dictionary")
'on compte le nombre de valeurs de chague valeur différente de Y
For i = 2 To UBound(tablo, 1)
If dico.exists(tablo(i, 1)) And tablo(i, 2) > 2000 And tablo(i, 2) <= 2005 Then
dico(tablo(i, 1)) = dico(tablo(i, 1)) + 1
Else
dico(tablo(i, 1)) = 1
End If
Next i
cle = dico.keys
k = 0
For n = 0 To dico.Count - 1
If dico(cle(n)) = 6 Then
For i = 2 To UBound(tablo, 1)
If tablo(i, 1) = cle(n) Then
ReDim Preserve tabloR(1 To 4, 1 To k + 1)
For j = 1 To 4
tabloR(j, 1 + k) = tablo(i, j)
Next j
k = k + 1
End If
Next i
End If
Next n
Range("F2").CurrentRegion.Offset(1, 0).ClearContents
Range("F2").Resize(UBound(tabloR, 2), 4) = Application.Transpose(tabloR)
End Sub
Bye !
Bonjour à tous,
Une alternative en Sql avec requête imbriquée :
Sub Bilan()
Dim T As Variant
Req = "SELECT `Y`,`nb` " & _
" FROM (SELECT `Y`, COUNT(`Date`) AS `nb` FROM [Feuil1$A:D] " & _
" WHERE `Date` BETWEEN 2000 AND 2005 GROUP BY `Y`)" & _
" WHERE `nb`=6"
Connect_xls ThisWorkbook.FullName
T = Select_Db(Req, 1)
Close_Cnx
Sheets("Feuil1").Range("G1:J500").ClearContents
Sheets("Feuil1").Range("G1").Resize(UBound(T, 1), UBound(T, 2)) = T
End Sub
Pierre
Bonjour à tous
Bonjour à JEL et GMB. Merci beaucoup pour vos réponses que j’apprécie beaucoup...
Il est clair que vous etes des pro en excel. Les résultats sont bonnes mais le script est complexe pour moi . Ma tableau réelle contient 402834 lignes, et l'interval temporel qui je veut le sélectionner est de 2005 à 2019 soit 15 observations. Mes questions si vous me permettez:
Est-ce que ces scripts sont valables dans ce cas?
Ou dois-je saisir ces scripts?
Excite-il une autre méthode qui se base sur le tableau croisée dynamique?
avec un grand merci.
Même si la question ne m'est pas adressée, dans l'alternative que je propose la requête devient :
Req = "SELECT `Y`,`nb` " & _
" FROM (SELECT `Y`, COUNT(`Date`) AS `nb` FROM [Feuil1$A:D] " & _
" WHERE `Date` BETWEEN 2005 AND 2019 GROUP BY `Y`)" & _
" WHERE `nb`=15"
Et ce quelque soit le nb de lignes du tableau réel
Pierre
Bonjour de nouveau !
Je vous livre une version Power Query amendée qui intègre un tableau "Paramètres" pour faciliter la saisie des bornes de la périodicité choisie.
Votre volumétrie (+/- 400.000 lignes) n'est absolument pas un souci pour Power Query. Si la structure du fichier réel est conforme à votre exemple, la requête Power Query vous restituera le tableau attendu.
Vous pouvez aussi en passer par un TCD. Mais, sauf à faire intervenir du code VBA, vous n'aurez pas la même souplesse qu'avec Power Query. J'ai ajouté cette option à mon fichier (avec segment et différentes opérations manuelles). Cela me semble toutefois fastidieux. Peut-être que les spécialistes en TCD auront des solutions plus pertinentes à proposer !
Pour en revenir à Power Query : Menu Données / Requêtes et connexions puis clic droit sur "t_Data" vous ouvrira les portes de l'éditeur Power Query. Les différentes étapes appliquées à vos données initiales seront affichées alors à droite de votre écran.
Bonne découverte !
bonjour de nouveau;
Merci beaucoup Pierrep56, JFL et gmb.
je vais essayer avec les différentes méthodes et j'espère que j'arriverai à trouver les bonnes résultats.
Grand merci pour votre aide !
Nadia.