Modification d'un tableau en fonction des donnés récuperées
VictorVM1
Messages postés
15
Date d'inscription
Statut
Membre
Dernière intervention
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
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:
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?
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
A voir également:
- Modification d'un tableau en fonction des donnés récuperées
- Tableau word - Guide
- Fonction si et - Guide
- Suivi des modifications word - Guide
- Trier un tableau excel - Guide
- Tableau ascii - Guide
2 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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
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
1quand tu fais
ReDim Preserve datesimpo(1, a)?
VictorVM1
Messages postés
15
Date d'inscription
Statut
Membre
Dernière intervention
Bonjour, merci de la réponse. Honetement non j'ai du mal a maitriser le Redim et ça doit pecher là desus
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
sus aux formats!
au lieu de:
il est préférable:
au lieu de:
Dim dateajd As String dateajd = Format(Date, "dd mmm")
il est préférable:
Dim dateajd As date dateajd = Date