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

Signaler
Messages postés
14
Date d'inscription
mercredi 21 avril 2021
Statut
Membre
Dernière intervention
4 mai 2021
-
Messages postés
15463
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
4 mai 2021
-
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

Messages postés
15463
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
4 mai 2021
845
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)
?
Messages postés
14
Date d'inscription
mercredi 21 avril 2021
Statut
Membre
Dernière intervention
4 mai 2021

Bonjour, merci de la réponse. Honetement non j'ai du mal a maitriser le Redim et ça doit pecher là desus
Messages postés
15463
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
4 mai 2021
845
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