Extraire des valeurs d'une matrice vers une autre

Résolu
fluffiou Messages postés 4 Date d'inscription dimanche 3 avril 2016 Statut Membre Dernière intervention 4 avril 2016 - 3 avril 2016 à 19:48
fluffiou Messages postés 4 Date d'inscription dimanche 3 avril 2016 Statut Membre Dernière intervention 4 avril 2016 - 4 avril 2016 à 21:40
Bonsoir à tous !!

J'ai eu à créer une matrice à 2 dimensions de 1000 lignes :
- dans la première dimension, les dates à partir du 04/02/2016 sur 1000jours.
- dans la seconde dimension, la date du dernier jour du mois précédent par rapport aux dates de la premières dimension.

Mon problème arrive car je dois extraire les dates supérieures à 2016 de la seconde dimension et mettre ces valeurs une matrice finale doit être redimensionnée automatiquement.

je vous mets ci-dessous le début de mon code.



Sub TestArray()

Dim Array_Temp(1 To 1000, 1 To 2) As Variant
Dim i As Integer
Dim iets As Date

Do Until i = 1000
i = i + 1
Cells(i, 1) = DateAdd("d", i, "04/02/2016")
Loop

For i = 1 To 1000
iets = Cells(i, 1)
Cells(i, 2) = DateAdd("d", -1, DateSerial(year(iets), month(iets), 1))
Next i

For i = 1 To 1000
If Cells(i, 2) > #12/31/2016# Then
Cells(i, 3) = Cells(i, 2)
End If
Next


End Sub



J'avoue que là je sèche, je n'ai jamais utilisé de tableau de cette façon.
Je vous remercie de votre aide.

5 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
3 avril 2016 à 20:46
Bonjour,
Tu nous parles ici de "matrices", et là de ranges (cellules d'une feuille Excel)...
Essaye d'être plus clair et surtout plus technique, s'il ,te plait.
0
fluffiou Messages postés 4 Date d'inscription dimanche 3 avril 2016 Statut Membre Dernière intervention 4 avril 2016
3 avril 2016 à 21:26
ucfoutu,

C'est ma première expérience avec une matrice. Je m'excuse de ne pas réussir à m'exprimer de façon très claire.

On me demande de faire une matrice/array. Comme tu peux t'en rendre compte, j'ai essayé de le remplir avec la façon que je connais, ce qui visiblement ne convient pas.

J'avais comme premières lignes à compléter :

Sub TestArray()
Dim Array_Temp() As Variant
End Sub


J'ai aussi une autre ligne pour pouvoir finaliser

Dim Array_Final() As Variant


En fait à partir de cette macro, je dois obtenir au final une seule colonne qui correspond aux dates des derniers jours des mois précédents (par rapport aux dates de la première colonne) qui sont supérieurs à 2016, qui sont dans la seconde colonne.

J'espère avoir été claire... Je crois que je confonds tout ... !
0
fluffiou Messages postés 4 Date d'inscription dimanche 3 avril 2016 Statut Membre Dernière intervention 4 avril 2016
Modifié par fluffiou le 3/04/2016 à 22:03
J'ai changé quelques infos dans ma macro.

Sub TestArray()

Dim Array_Temp(1 To 1000, 1 To 2) As Variant
Dim i As Integer
Dim iets As Date

Do Until i = UBound(Array_Temp)
i = i + 1
Array_Temp(i, 1) = DateAdd("d", i, "04/02/2016")
Cells(i, 1) = Array_Temp(i, 1)
Loop

For i = 1 To UBound(Array_Temp)
iets = Cells(i, 1)
Array_Temp(i, 2) = DateAdd("d", -1, DateSerial(Year(iets), Month(iets), 1))
Cells(i, 2) = Array_Temp(i, 2)
Next i

For i = 1 To UBound(Array_Temp)
If Array_Temp(i, 2) > #12/31/2016# Then
Cells(i, 3) = Array_Temp(i, 2)
End If
Next

'Dim Array_Final() As Variant

End Sub


est ce que cela correspond mieux au language de la matrice ? Ou il y a t'il d'autres modifications à faire ?

de plus je reste bloquée à la phase où je dois extraire (ce qui correspond pour le moment à ma dernière boucle for) pour redimensionner la matrice
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 4/04/2016 à 07:07
1) Quel besoin de passer par des matrices ? Je n'en vois aucun
2) tout ce bazar n'est finalement rien d'autre que ceci :
For i = 1 To 1000
la_date = DateAdd("d", i, "04/02/2016")
Cells(i, 1) = la_date
Cells(i, 2) = DateSerial(Year(la_date), Month(la_date), 0)
If Year(Cells(i, 2)) > 2016 Then Cells(i, 3) = Cells(i, 2)
Next
array_final = Columns(3).SpecialCells(xlCellTypeConstants)


Et la preuve ? ===>>
 For i = 1 To UBound(array_final)
MsgBox array_final(i, 1)
Next



EDIT : on se demande même à quoi peut bien servir ton remplissage de la colonne C !
Nul besoin de passer par un tel tremplin ===>>>
Dim trouve As Long
For i = 1 To 1000
la_date = DateAdd("d", i, "04/02/2016")
Cells(i, 1) = la_date
Cells(i, 2) = DateSerial(Year(la_date), Month(la_date), 0)
If Year(Cells(i, 2)) > 2016 And trouve = 0 Then trouve = i
Next
array_final = Range("B" & trouve & ":" & "B1000")

suffit !


________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fluffiou Messages postés 4 Date d'inscription dimanche 3 avril 2016 Statut Membre Dernière intervention 4 avril 2016
4 avril 2016 à 21:40
ucfoutu,

Alors concernant ta question : "1) Quel besoin de passer par des matrices ? Je n'en vois aucun " : ça m'est imposé !! tout simplement, tout comme faire la première boucle Until ainsi que la function qui m'était déjà donné.

Sinon je suis passée par la colonne C seulement pour trouver les valeurs que je devais extraire.

Merci pour ton edit, j'ai pu améliorer ma macro !

Je te remercie pour ta contribution.
0
Rejoignez-nous