Je veux que Excel m’effectue un calcul de parts selon 2 critères changeants. Ci-joint le fichier :Nombre de parts.xlsx (14,3 Ko)
L’onglet Part, indique le nombre (NB) de part (1,2…) en fonction de la situation familiale (Célibataire, Divorcé(e)…) et le nombre d’enfant (1,2…).
Lorsque le nombre d’enfants est supérieur ou égale à 6 (donc 6, 7… enfants), le nombre de part ne change plus en fonction de la situation familiale. C’est-à-dire par exemple que le nombre de part pour un célibataire avec 7 enfants doit toujours être 4,5 ; celui d’un marié(e) avec 8 enfants est 5… Le nombre d’enfant est plafonné à 6 !
Dans l’onglet Calcul, j’ai mis une liste déroulante en A2 Célibataire, Divorcé(e)…) pour la Situation Familiale et en B2 (1,2,… jusqu’à 10) pour le Nb d’enfant.
Avec une procédure VBA, je veux par exemple que lorsque je déroule dans l’onglet Calcul en A2 Célibataire et 1 en B2, qu’il soit écrit 2 en C2 tel qu’en ligne 7 de l’onglet Part. Ainsi de suite de façon dynamique.
Compte tenu du nombre de cas possibles, il est laborieux de le faire avec les formules SI imbriqués… Je pense que c’est faisable à partir du code : CreateObject(« Scripting.Dictionary »). Hélas, je ne sais pas le manipuler. Merci d’avance,
au lieu de cliquer sur un bouton pour afficher les résultats, ce dernier peut s’afficher à chaque ligne suivant les données fournies
Macro à placer dans la feuille "Calcul"
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo fin
If Not Application.Intersect(Target, Range("B" & Target.Row)) Is Nothing Then
Dim i%, Dl%, configuration$, Ws As Worksheet
Set Ws = Sheets("Part")
Dl = Ws.Range("A" & Rows.Count).End(xlUp).Row
If Target.Value < 7 Then
configuration = Range("A" & Target.Row) & Target.Value
Else
configuration = Range("A" & Target.Row) & 6
End If
End If
For i = 2 To Dl
If Ws.Range("A" & i) & Ws.Range("B" & i) = configuration Then
Range("C" & Target.Row) = Ws.Range("C" & i)
End If
Next i
fin:
End Sub
J’ai continuer les tests avec le fichier ci-joint Nombre de parts M.xlsm (18,3 Ko) (attention, pour me faciliter l’insertion de ce code dans le fichier principal, j’ai déplacé la Situation familial en B10, le Nb d’Enfant en C10 et le Nb de Part en D10 toujours dans l’onglet Calcul et rajouter des infos de part et d’autres de ces cellules pour se rapprocher de la configuration réelle).
J’ai constaté que la macro fonctionne mais ne donne pas le résultat attendu dans le cas de la Situation familiale Divorcé(e) (une erreur assez subtile).
Le détail des résultats attendus et inattendus de calcul du Nb de Part avec le cas Divorcé(e):
Nb d’Enfant = 0 Nb de Part = 1 Oui
Nb d’Enfant = 1 Nb de Part = 1 Non, plutôt 2
Nb d’Enfant = 2 Nb de Part = 1 Non, plutôt 2,5
Nb d’Enfant = 3 Nb de Part = 3 Oui
Le reste est juste. Possible de corriger ?
Lorsque je déroule la Situation familiale à par exemple Célibataire et le Nb d’Enfant à 2, le Nb de Part affiche 2,5 tel qu’attendu. Cependant, lorsque je change seulement Célibataire en Marié(e) par exemple et conserve le Nb d’enfant à 2, le Nb de Part affiche toujours 2,5 au lieu de 3. Je dois donc toujours dérouler 2 informations. Est-il possible de profiter de la présence d’une information et que l’autre s’ajuste pour obtenir le résultat attendu ?
Pour apprendre, après tes corrections, la ligne On Error GoTo fin sera t-elle encore nécessaire ?
Re,
Il fallait déjà modifier dans la macro le lettre des colonnes de la feuille calcul dans la macro
Ensuite, le bug vient de tes données inscrite dans la feuille « Part »
Divorcé n’est pas égale à Divorcé(e)
L’expression On Error GoTo fin sert si tu veut effacer un bloc de cellule afin d’éviter un plantage macro.
A voir avec correction Nombre de parts M.xlsm (24,0 Ko)