Somme.Si dépendant d'une variable

Finalement j'ai créé l'excel simplifié. Quelques éclaircissement dessus :

  • Lorsque que l'on ajoute un nouveau chef de projet dans le tableau de la feuille 1 et qu'on exécute le code ça va alors créer une nouvelle ligne sur le tableau 2 avec le nom du nouvel employé. (c'est le but de mon projet)
  • Pour voir que le code ne fonctionne pas il suffit d'ajouter une charge de travail au nouvel employé (j'ai mis 7 par défaut) et regarder le résultat dans le deuxième tableau (la charge de travail devrait être 7)
  • Le début du code me permet juste de tester si l'employé n'existe pas, et si il n'existe pas on créé une nouvelle ligne avec son nom dans le deuxième tableau.

On remarque bien le problème : le critère de recherche est faux (ce n'est pas "nom_employé" mais juste nom_employé)

Et voici le code :

Sub test()

Dim rg_cellule As Range

Dim rg_cellule2 As Range

Dim indicateur As Integer

Dim tampon_nom As String

Dim tampon_indic As Boolean

For Each rg_cellule In Range("Tableau1").ListObject.DataBodyRange.Columns(2).Cells

For Each rg_cellule2 In Range("Tableau2").ListObject.DataBodyRange.Columns(1).Cells

If rg_cellule = rg_cellule2 Then

indicateur = indicateur + 1

End If

Next rg_cellule2

If indicateur = 0 Then

tampon_nom = rg_cellule

tampon_indic = True

MsgBox ("Le Chef de projet " & rg_cellule.Value & " n'existe pas")

Exit For

End If

indicateur = 0

Next

If tampon_indic = True Then

With Sheets("Feuil2").ListObjects("Tableau2")

.ListRows.Add AlwaysInsert:=True 'On ajoute une ligne au tableau 2

.ListColumns("Owner").DataBodyRange(.ListRows.Count) = tampon_nom ' Ajoute le nom du nouvel employé

End With

derniereLigne = Sheets("Feuil2").Cells(Rows.Count, "C").End(xlUp).Row

MsgBox derniereLigne

Range("C" & derniereLigne).FormulaLocal = "=SOMME.SI(Tableau1[Owner];" & [tampon_nom] & ";Tableau1[Charge de travail])"

End If

End Sub

Merci d'avance.

Ce qui ne marche pas est bien-entendu la ligne // Range("C" & derniereLigne).FormulaLocal = "=SOMME.SI(Tableau1[Owner];" & [tampon_nom] & ";Tableau1[Charge de travail])"

Erreur de ma part j'ai joint le mauvais fichier.

Bon, plusieurs choses ...

1-

Ce que tu cherches est

Range("C" & derniereLigne).FormulaLocal = "=SOMME.SI(Tableau1[Owner];""" & tampon_nom & """;Tableau1[Charge de travail])"

avec triple guillemets !

Ceci suffit

Range("C" & derniereLigne).FormulaLocal = "=SOMME.SI(Tableau1[Owner];[@Owner];Tableau1[Charge de travail])"

[@Owner] fait référence au chef de projet de la ligne concernée.

mais ...


2-

Néanmoins, tu dois préciser la feuille concernée !

Sheets("Feuil2").Range("C" & derniereLigne).FormulaLocal = "=SOMME.SI(Tableau1[Owner];[@Owner];Tableau1[Charge de travail])"

C'est surtout ceci qui devait perturber ... car si ton code est lancé à partir de Feuil1 il ne se passe rien !

ou l'inclure tout simplement ici :

    With Sheets("Feuil2").ListObjects("Tableau2")

        .ListRows.Add AlwaysInsert:=True 'On ajoute une ligne au tableau 2
        .ListColumns("Owner").DataBodyRange(.ListRows.Count) = tampon_nom ' Ajoute le nom du nouvel employé
        .ListColumns("Charge de travail").DataBodyRange(.ListRows.Count).FormulaLocal = "=SOMME.SI(Tableau1[Owner];[@Owner];Tableau1[Charge de travail])"

    End With

ce qui évite le calcul de la dernière ligne.


3-

Et la dernière proposition est ... de ne rien faire ! Mets en effet une fois pour toutes la formule

=SOMME.SI(Tableau1[Owner];[@Owner];Tableau1[Charge de travail])

en colonne Charge de travail de ton Tableau2 en Feuil2. Lorsque tu fais

With Sheets("Feuil2").ListObjects("Tableau2")
        .ListRows.Add

la nouvelle ligne hérite automatiquement de ta formule. C'est la magie des tableaux. Tu n'as donc plus alors à la repréciser.

Bonjour, en effet la première technique a bien marché et je t'en remercie Steelson, par contre les deux autres n'ont malheureusement pas fonctionné.. Mais étant donné que cela résout mon problème je m'en contenterais.

Je rencontre maintenant encore un autre problème. Avec ce code :

Dim Mois As Range

Dim tampon_nom As String

'Mois est une variable (qui prend respectivement les valeurs Janvier, Février, Mars...)

For Each rg_cellule_boucle In Sheets("Trash sheet").Range("B21:B32")

Mois = rg_cellule_boucle.Value

With Sheets("Visualisation LOAD").ListObjects("WorkLoad")

.ListColumns("""& Mois &""").DataBodyRange(.ListRows.Count).FormulaLocal = "=SOMME.SI(Project_PM_Alloc[PROJECT MANAGER];""" & tampon_nom & """;Project_PM_Alloc[" & [Mois] & "])"

End With

Next rg_cellule_boucle

Sauf que mon code sort en erreur, "Erreur d'exécution '9' : L'indice n'appartient pas à la sélection"

Je me doute que l'erreur viens du fait que mon """& Mois &""" et ""& Mois&"" ne prennent pas les valeurs attendus.

J'espère avoir été assez clair,

Merci d'avance

Ici ce sera sans guillemets !!

.ListColumns(Mois)

C'est bon ça marche ! T'es beaucoup trop fort Steelson

Merci beaucoup.

Rechercher des sujets similaires à "somme dependant variable"