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

16base-exemple.xlsm (39.23 Ko)
16tbd-projets.xlsm (10.63 Ko)

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 With

2) 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 If

merci 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)

10base-exemple.xlsm (39.44 Ko)

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 With

Et 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,

Rechercher des sujets similaires à "reporter periodes projets actifs"