Remplissage tableau suivant plusieurs critères
Bonjour à tous,
Je souhaite remplir un tableau excel basé sur un extrait d'un logiciel. Cependant je me retrouve coincé sur la stratégie à adopter pour remplir mon tableau. Voici quelques explications sur mon problème :
Je souhait remplir le tableau en pièce jointe (analyse restrictions) avec les données situées dans l'extrait (restrictions). Je voudrais dans mon tableau final avoir des croix/ des lettres ou autre pour savoir quand une restriction a eu lieu dans la période souhaitée par l'utilisateur.
Le problème est que pour un emplacement il peut y avoir plusieurs restrictions sur des périodes plus ou moins longues et ces restrictions peuvent être toujours valables encore aujourd'hui (cas ou la date est 01/01/3000).
J'ai pensé à utiliser la concaténation afin de lier un emplacement et une restriction afin de simplifier le problème mais je me retrouve avec encore trop de variables (il faudrait que je fasse des boucles dans des boucles) ce qui est trop compliqué pour moi.
Avez des suggestions à me proposer?
Si vous avez besoin de plus de précisions n'hésitez pas.
Merci par avance pour votre aide
Pierro26
Bonjour Pierro26,
un début de piste pour limiter les boucles,
est de vérifier si la date fait partie de la source
voici un exemple
Sub Test_DateIsBetween()
Set wk1 = Workbooks("Analyse restrictions.xlsm")
Set wk2 = Workbooks("Restrictions.xlsx")
d = wk1.Sheets("Suivi").Cells(8, 3) 'modifier cette ligne pour vérifier la date
dt1 = wk2.Sheets("Sheet").Range("D3")
dt2 = wk2.Sheets("Sheet").Range("E3")
t = DateIsBetween(d, dt1, dt2)
wk1.Sheets("Suivi").Cells(9, 3) = t
End Sub
Function DateIsBetween(dt, rng1, rng2) As Boolean
If dt >= rng1 And dt <= rng2 Then DateIsBetween = True
End FunctionSalut i20100,
Tout d'abord merci pour ton retour.
Je viens de voir que j'ai oublié de préciser un point :
Il y a parfois des sortes de "doublons" dans l'extract. Je m'explique : lorsqu'une restriction est ouverte, il l'est pour une date de départ précise mais pour une date de fin indéfinie d'ou l'an 3000. lorsqu'elle est fermée, une ligne vient s'ajouter à l'extract : même info que lors de l'ouverture du point mais avec un date de fin précise.
De ce fait il faut que je fasse un tri des données (via une boucle) dans un premier temps. Par contre j'ai réfléchit un peu hier et j'ai réussi, via des boucles de boucles, à remplir mes cases :
'ajout des statuts des trains
For i = 7 To nblignereporting - 3
For j = 2 To nbligneextract
If BSuivi(i, 1) = BExtract(j, 1) And BExtract(j, 2) = BSuivi(1, 2) Then
If BExtract(j, 4) > BSuivi(1, 5) And BExtract(j, 5) < BSuivi(1, 7) Then
nbjoursrestriction = BExtract(j, 5) - BExtract(j, 4)
For k = 3 To nbjours + 2
If BExtract(j, 4) = BSuivi(6, k) Then
For l = 0 To nbjoursrestriction
ws_Suivi.Cells(i, k + l) = "X"
Next l
End If
Next k
End If
If BExtract(j, 4) > BSuivi(1, 5) And BExtract(j, 5) > BSuivi(1, 7) Then
nbjoursrestriction1 = BSuivi(1, 7) - BExtract(j, 4)
For k = 3 To nbjours + 2
If BExtract(j, 4) = BSuivi(6, k) Then
For l = 0 To nbjoursrestriction1
ws_Suivi.Cells(i + 2, k + l + 1) = "X"
Next l
End If
Next k
End If
If BExtract(j, 4) < BSuivi(1, 5) And BExtract(j, 5) < BSuivi(1, 7) Then
nbjoursrestriction1 = BSuivi(3, 6) - BExtract(j, 4)
For l = 0 To nbjoursrestriction1
ws_Suivi.Cells(i, 3 + l) = "X"
Next l
End If
If BExtract(j, 4) < BSuivi(1, 5) And BExtract(j, 5) > BSuivi(1, 7) Then
For k = 3 To nbjours + 2
ws_Suivi.Cells(i, k) = "X"
Next k
End If
End If
Next j
Next iIl y a encore quelques modifications à ajouter dans cette partie de code mais je pense etre sur la bonne voie (à confimer?)
Je vais essayer 'ajuster le code aujourd'hui et de trouver une boucle pour trier mes données dans mon extract mais si tu as des idées je suis preneur.
Merci pour ton aide!
Excellente journée
Pierro26