Extraire des valeurs d'une matrice vers une autre [Résolu]

Messages postés
4
Date d'inscription
dimanche 3 avril 2016
Dernière intervention
4 avril 2016
- 3 avril 2016 à 19:48 - Dernière réponse :
Messages postés
4
Date d'inscription
dimanche 3 avril 2016
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.
Afficher la suite 

Votre réponse

5 réponses

Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
- 3 avril 2016 à 20:46
0
Merci
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.
Commenter la réponse de ucfoutu
Messages postés
4
Date d'inscription
dimanche 3 avril 2016
Dernière intervention
4 avril 2016
- 3 avril 2016 à 21:26
0
Merci
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 ... !
Commenter la réponse de fluffiou
Messages postés
4
Date d'inscription
dimanche 3 avril 2016
Dernière intervention
4 avril 2016
- Modifié par fluffiou le 3/04/2016 à 22:03
0
Merci
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
Commenter la réponse de fluffiou
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
- Modifié par ucfoutu le 4/04/2016 à 07:07
0
Merci
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.
Commenter la réponse de ucfoutu
Messages postés
4
Date d'inscription
dimanche 3 avril 2016
Dernière intervention
4 avril 2016
- 4 avril 2016 à 21:40
0
Merci
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.
Commenter la réponse de fluffiou

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.