Reporter périodes des projets actifs
Bonjour à toutes et tous,
je fais un nouveau post car mon précédent titre ne convenait plus
Je rencontre deux soucis avec mon code (fichiers joints)
le code de la base exemple à pour objectifs de générer un fichier de suivi (tbd-projets) afin de reporter les données propres aux projets dit actif
j'ai cependant deux soucis
1) je souhaiterais pouvoir récupérer les périodes associées à chaque projets depuis l'onglet reporting
je me suis basé sur l'aide apportée par plusieurs contributeurs mais je ne dois pas bien comprendre le code.
pour moi arr(k, 1) = Tbl(j, 5) correspond à la date début de chaque période
arr(k, 2) = Tbl(j, 7) et celle ci à la date de fin de chaque période
cepandant quand je fais des simples msgbox de verif avec
msgbox(arr(1,1)) => vide ou meme arr(1,2) => toujours vide
alors que cela fonctionne avec arr(2,2) ou encore arr(3,1) d'où un premier soucis
With Worksheets("Reporting")
On Error Resume Next
L = Application.Match(id_projet, .Columns(1), 0)
If Not IsError(L) Then
Tbl = .Range("A2:G" & .Range("A" & .Rows.Count).End(xlUp).Row).Value
n = WorksheetFunction.CountIf(.Columns(1), id_projet)
ReDim arr(1 To n, 1 To 2)
For j = 1 To UBound(Tbl)
If Tbl(j, 1) = id_projet Then
k = k + 1
arr(k, 1) = Tbl(j, 5)
arr(k, 2) = Tbl(j, 7)
End If
Next j
End If
' msgbox(arr(1,1))
'msgbox(arr(2,1))
End With2) il me faut pouvoir reporter dans dic_projets les infos liées aux périodes des projets actifs
mais je ne vois pas comment reporter arr(2,2) etc car quand j'essaye rien n'est reporter dans le fichier tbd.. une idée svp?
If (statut = "Active") Then
If Not dic_statuts.exists(statut) Then Set dic_statuts(statut) = CreateObject("Scripting.Dictionary")
Set dic_projects = dic_statuts(statut)
dic_projects(id_projet) = Array(statut, Acronym, CallFrame, début, fin, Duration, Investigator_firstname, Investigator_name, CLng(Budget_Requested), arr(2, 1))
Set dic_statuts(statut) = dic_projects
End Ifmerci par avance pour votre aide
bonne journée
un petit coup de pouce serait apprécié car c'est en vue d'un partage d'information entre département que je dois mettre en place le fichier tbd d'exportation.
aussi merci par avance pour vos lumières!
j'ai fais quelques progrès après avoir galéré un peu
le point 1 est résolu
cela venait du nombre déclarer (j'ai mis le nombre de colonnes exactes à savoir 21 et c'est résolu
.Range("A4").Offset(I).Resize(dic_projects.Count, 21) = Application.Transpose(Application.Transpose(dic_projects.Items))le point 2 partiellement car désormais je peux afficher pour le premier projet les périodes concernées (ici 4 périodes)
mais je rencontre encore deux soucis pour lequel je sollicite votre aide
1) cela bug car je ne sais pas comment formuler si pas de période à déclarer
pour le premier projets il y a 4 périodes existantes et non 6
en effet si je rajoute pour le premier projet au code suivant
dic_projects(id_projet) = Array(statut, Acronym, CallFrame, début, fin, Duration, Investigator_firstname, Investigator_name, CLng(Budget_Requested), arr(1, 1), arr(1, 2), arr(2, 1), arr(2, 2), arr(3, 1), arr(3, 2), arr(4, 1), arr(4, 2))ceci pour potentiellement déclarer les périodes 5 et 6 possible
arr(5,1), arr(5,2), arr(6,1), arr(6,2)
du fait que l'erreur n'ai pas prévue cela fausse le tout
Aussi comment procéder si
arr(k, 1) = Tbl(j, 5) => est inexistant ou vide
arr(k, 2) = Tbl(j, 7) => est inexistant ou vide
2) cela ne fonctionne que pour le premier projet et aucun autres, je ne sais toutefois pas comment intégrer que cela doit s'appliquer pour tous les projets dits actifs
merci par avance pour votre aide
une petite aide serait appréciable svp
je n'arrive pas à surmonter cela :(
Bonsoir Darkangel,
C'est regrettable que vous n'ayez pas de réponse satisfaisante. Peut-être faut-il scinder vos posts afin d'éventuellement tomber sur une âme charitable qui daigne approfondir. En tout cas, je pense qu'il faut bien cadrer le besoin.
Comme je vous l'avais déjà dit, je ne connais pas les dictionnaires mais, logiquement, il devrait être possible d'affecter un tableau à votre dictionnaire, sans avoir à répertorier chacun de ses éléments. Avec quelques valeurs, ça passe mais si votre tableau était conséquent, ça n'irait pas et j'imagine que l'intérêt du dictionnaire est de stocker du volume.
Sinon, vous avez peut-être résolu ce problème mais peut-être que ça pourrait fonctionner ainsi :
Dim MonTab()
With Worksheets("Reporting")
On Error Resume Next
L = Application.Match(id_projet, .Columns(1), 0)
If Not IsError(L) Then
Tbl = .Range("A2:G" & .Range("A" & .Rows.Count).End(xlUp).Row).Value
For j = 1 To UBound(Tbl)
If Tbl(j, 1) = id_projet Then
k = k + 1
redim preserve arr(2, k)
arr(1, k) = Tbl(j, 5)
arr(2, k) = Tbl(j, 7)
End If
Next j
End If
MonTab = Application.Transpose(arr) 'transposition de arr pour retrouver les valeurs dans la configuration désirée
' msgbox(MonTab(1,1))
'msgbox(MonTab(2,1))
End WithEt si vous avez des valeurs vides non souhaitées, ce que vous avez mal établi votre condition d'alimentation du tableau.
Mais finalement, je réponds peut-être à côté de la plaque.
Donc je pense que vous devriez vraiment identifier vos besoins et notamment poster : "Comment affecter un tableau (ou ses valeurs), de dimension potentiellement variable, à un dictionnaire ?" Vous sauriez alors s'il faut chercher à diviser le tableau, à utiliser du monodimensionnel ou du multi, comment parvenir au résultat escompté et comment récupérer les infos par la suite. Sans déterminer précisément un problème, c'est difficile de correctement s'orienter vers une solution.
Cordialement,
Bonjour 3GS
je vous remercie pour votre retour. Je fini par croire que l'utilisation du dictionnaire n'ai pas forcement la meilleure des optiques et qu'il va me falloir coder cela d'une autre façon.
j'ai testé à tout hasard votre méthode mais cela ne ressort aucun résultat du tout.
je vais devoir effectivement tout revoir quitte à scinder les étapes comme vous le suggérer
Merci à vous en tout cas
Bonjour Darkangel,
Oui, le code ne retourne rien car la tableau stocke les valeurs uniquement.
C'est d'ailleurs aussi le cas d'un dictionnaire j'imagine. Ce qui est compliqué, c'est qu'on ne connait pas la finalité de ce dictionnaire.
J'espère que vous arrivez à trouver la documentation dont vous avez besoin et que vous trouverez une solution.
Bon courage en tout cas,