Modification d'un tableau en fonction des donnés récuperées

Fermé
VictorVM1 Messages postés 15 Date d'inscription mercredi 21 avril 2021 Statut Membre Dernière intervention 5 mai 2021 - Modifié le 26 avril 2021 à 12:26
yg_be Messages postés 20774 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 8 décembre 2022 - 4 mai 2021 à 13:01
Bonjour à tous!

Je vous présente ma situation: je cherche à récupérer des donnés dans un tableau exhaustif, ici les dates d’évènement sur des trains entre deux dates (à 4 et 6 mois) et de les regrouper pour afficher pour chaque train la date la plus proche.

La logique derrière mon code est la suivante:
pour chaque ligne du tableau

-J'applique un filtre pour récupérer les dates dont l'identifiant d'évènement correspond entre l'horizon 4 et 6 mois
-Je regarde dans le tableau que je suis en train de créer si il n'existe pas déjà un code évènement déjà renseigné pour le train concerné
-Si la date de cet évènement est plus proche que celle renseignée auparavant alors je la remplace
-Si la date de cet évènement est moins proche que celle de la date renseignée alors je ne fais rien et je passe a la ligne du tableau origine suivante
-Sinon je crée une nouvelle ligne pour enregistrer l'évènement

voici le code:
Sub traitement()

Dim datesimpo()
Dim dateajd As String
Dim date4mois As Date
Dim date6mois As Date

Dim affichedate As String

Dim i As Long
Dim a As Long
Dim b As Long
Dim c As Long

Dim texte As String


dateajd = Format(Date, "dd mmm")

date4mois = DateAdd("d", 120, dateajd)
date6mois = DateAdd("d", 180, dateajd)

'affichedate = date4mois & " " & date6mois
'MsgBox affichedate

i = 1
While Cells(i, 1) <> ""

If date4mois < Cells(i, 17) And Cells(i, 17) < date6mois And _
(Cells(i, 7) = "MID60" Or Cells(i, 7) = "MIF52" Or Cells(i, 7) = "MIF53" Or Cells(i, 7) = "MIF54" Or _
Cells(i, 7) = "MIF55" Or Cells(i, 7) = "MIF59" Or Cells(i, 7) = "MIP56" Or Cells(i, 7) = "MIP57" Or _
Cells(i, 7) = "MIP58" Or Cells(i, 7) = "MIP63" Or Cells(i, 7) = "MIP64" Or Cells(i, 7) = "MIT50" Or _
Cells(i, 7) = "MIT51" Or Cells(i, 7) = "MIT61" Or Cells(i, 7) = "MIT62") Then


b = 1
While b <= i

If Cells(1, i) = datesimpo(b, 2) And (datesimpo(b, 3) = "MID60" Or datesimpo(b, 3) = "MIF52" Or datesimpo(b, 3) = "MIF53" Or _
datesimpo(b, 3) = "MIF54" Or datesimpo(b, 3) = "MIF55" Or datesimpo(b, 3) = "MIF59" Or _
datesimpo(b, 3) = "MIP56" Or datesimpo(b, 3) = "MIP57" Or datesimpo(b, 3) = "MIP58" Or _
datesimpo(b, 3) = "MIP63" Or datesimpo(b, 3) = "MIP64" Or datesimpo(b, 3) = "MIT50" Or _
datesimpo(b, 3) = "MIT51" Or datesimpo(b, 3) = "MIT61" Or datesimpo(b, 3) = "MIT62") Then

If Cells(i, 17) < datesimpo(b, 17) Then

datesimpo(0, a) = Cells(b, 17)
datesimpo(1, a) = Cells(b, 18)
b = b + 1
Else
b = b + 1

End If
End If
Wend

Else

ReDim Preserve datesimpo(1, a)

datesimpo(0, a) = Cells(i, 17) 'dateopti
datesimpo(1, a) = Cells(i, 18) 'datemax
datesimpo(2, a) = Cells(i, 1) 'Nom de la rame
datesimpo(3, a) = Cells(i, 7) 'Nom de l'évènement

a = a + 1

End If

i = i + 1

Wend


Malheureusement je récupère un message d'erreur du type "l'indice n'appartient pas à la sélection" au niveau de l'importation du nom de la rame dans mon tableau (datesimpo(2, a) = Cells(i, 1) ).

Je suppose que ça doit venir du fait que le tableau soit vide au début mais je suis pas sûr et je ne sais pas comment contourner le problème..

Des suggestion?




Configuration: Windows / Firefox 68.0

2 réponses

yg_be Messages postés 20774 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 8 décembre 2022 1 269
Modifié le 26 avril 2021 à 14:17
bonjour,
merci d'utiliser les balises de code, comme expliqué ici (le VBA, c'est du basic): https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

sais-tu ce que signifie le
1
quand tu fais
ReDim Preserve datesimpo(1, a)
?
0
VictorVM1 Messages postés 15 Date d'inscription mercredi 21 avril 2021 Statut Membre Dernière intervention 5 mai 2021
27 avril 2021 à 09:53
Bonjour, merci de la réponse. Honetement non j'ai du mal a maitriser le Redim et ça doit pecher là desus
0
yg_be Messages postés 20774 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 8 décembre 2022 1 269
4 mai 2021 à 13:01
sus aux formats!
au lieu de:
Dim dateajd As String
dateajd = Format(Date, "dd mmm")

il est préférable:
Dim dateajd As date
dateajd = Date
0