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.
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.
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 ... !
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
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.
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.