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 Withce 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.Addla 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.