XL 2016 macro automatisation de remplissage de cellules

Manu9392

XLDnaute Nouveau
Bonjour,
Je suis à la recherche de codes VBA car je bloque sur un sujet.

Imaginons que j'octroie du crédit à 4 amis qui sont identifiés par des codes (ID).
Dans le fichier joint, il y'a :

- L'onglet "Détail" où on trouve l'ID, la maturité de la dette, le montant et le nombre de renouvellements possible pour chaque dette (Rotation).
Ensuite suivent 11 colonnes (Plage "Date_Projections") qui doivent afficher les ID en fonction du contenu de "rotation" (30D = 30 jours, 3M = 3mois...). J'ai mis des données en rouge pour illustrer le rendu attendu.

- L'onglet "Synthèse" où s'affichent en plus les montants des dettes en fonctions des ID qui apparaissent sur la plage "Date_Projections" de l'onglet "Détail".

Mon problème réside dans l'automatisation de l'affichage des ID dans la plage "Date_Projections" de l'onglet "Détail".

Auriez vous des idées? Je redoute de devoir me taper d'innombrables formules.
Manu
 

Pièces jointes

  • Projections.xlsx
    10.7 KB · Affichages: 61

Brice G

XLDnaute Occasionnel
Bonjour,
je comprends mal comment doivent se remplir les données en rouge (pourquoi il y a 100 en Q7 par exemple, là où je n'en aurais pas mis).
Je vais réfléchir, mais en effet, je doute qu'on ne doive pas passer par de belles formules.:p:)
Quelle est la date de départ, à partir de quand doit-on compter 30 jours, 6 mois ... ?

N'y a t-il pas une erreur non plus en K9 pour 102 ? Je ne mettrais rien.
 
Dernière édition:

Brice G

XLDnaute Occasionnel
Poouuuuaaaaahhh :eek::eek::confused:o_Oo_O ce que je me suis pris la tête sur ton fichier c'est terrible !:p
Mais je pense avoir trouvé la solution.

Ci-joint, dsl, je te laisse ça en brut, pour comprendre, si tu n'y arrives pas, dis-le moi, on regardera ensemble.
 

Pièces jointes

  • Copie de Projections_2.xlsx
    11.7 KB · Affichages: 47

Manu9392

XLDnaute Nouveau
(pourquoi il y a 100 en Q7 par exemple à dit:
Tu as raison en effet, ce 100 n'a pas de sens ici.


Quelle est la date de départ à dit:
La date de référence est la date du jour. En l'occurrence A2 de la feuille 'Synthèse'.

N'y a t-il pas une erreur non plus en K9 pour 102 ? Je ne mettrais rien.[/QUOTE à dit:
Ahhhh je voulais mettre 2018 pour l'année de la maturité.
 

Manu9392

XLDnaute Nouveau
Bonjour à tous,
Pas compris la Maturité dans la feuille Détail !
30D >> OK
1Y >> OK
3M >> jusqu'au 28/07/2018 alors qu'il y a 100 le 31/08/2018
6M >> 30/09/2017 également pas compris !
Bonne journée !
Hello JBarbe,
tu veux plutôt dire Rotation.
30D = Tous les 30 jours donc
1Y = Tous les ans
3M = Tous les 3 mois => Effectivement je me suis trompé pour le 100 du 31 Août.
6M = Tous les 6 mois => Encore une erreur. C'est le 30/09/2018.
Cela veut dire que le crédit sera renouvelé selon la rotation. Donc, les ID rempliront les champs selon cette rotation.
 

Manu9392

XLDnaute Nouveau
Poouuuuaaaaahhh :eek::eek::confused:o_Oo_O ce que je me suis pris la tête sur ton fichier c'est terrible !:p
Mais je pense avoir trouvé la solution.

Ci-joint, dsl, je te laisse ça en brut, pour comprendre, si tu n'y arrives pas, dis-le moi, on regardera ensemble.
Brice, si j'ai bien compris, pour que l'ID s'affiche, il faut :
  • Que la date de projection soit inférieure à la date de maturité
  • Et que la date de projection (ou la date de départ) + nombre de jours de rotation < date de projection
Pourquoi se baser sur la cellule précédente et conditionner la formule au fait qu'elle soit vide?
 

Brice G

XLDnaute Occasionnel
Bonjour Manu,
premièrement tu me dis que la date à prendre en compte n'est pas le 1er septembre 2017 comme je l'ai fait mais la date d'aujourd'hui, tu utiliseras la fonction aujourdhui() a priori pour réparer mon erreur.

Tu as plutôt compris l'idée : :) je passe tout en jours (3M devient 3*30 = 90 jours ; 1Y devient 365 jours), excel peut ainsi faire les additions de date, ce qui donne, je pense, au moins une piste pour résoudre ton problème.

Pourquoi se baser sur la cellule précédente et conditionner la formule au fait qu'elle soit vide?
En fait, j'avais eu beaucoup de soucis pour contourner le fait qu'à partir du moment où l'ID 100 apparaissait convenablement à la première rotation, après 3 mois donc, il apparaissait sur toutes les dates suivantes jusqu'à la date de maturité, il ne suivait plus un cycle.
En gros, cela venait du fait que je calculais 90 jours seulement depuis la date de départ, mes conditions étaient toutes deux remplies tout le temps dès qu'on passait 90 jours, il fallait trouver un moyen de RE-compter 90 jours à partir du moment où UNE rotation était faite.

Je m'en suis finalement sorti (j'ai essayé de faire une multiplication par le nombre d'occurences je me heurtais à d'autres problèmes, ça fonctionnait jamais bien :confused::p) comme ceci :
  • on vérifie si la date précédente était une rotation ou non (cellule vide ou pas du coup, car si rotation, on a marqué l'ID) ;
    • si OUI ==> on compte à partir de la date précédente, à savoir celle de la rotation.
    • Edit : C'est à ce moment que je me rends compte que j'ai fait une erreur, nous avons besoin, avec cette méthode, de connaître la date à laquelle la dernière rotation a eu lieu, de prendre juste la dernière ne fonctionne pas. Désolé après plusieurs essais plein d'espoir avec la fonction RECHERCHEV, je ne parviens pas à trouver une solution ; je n'ai pas le temps de faire plus, ma seule solution fonctionne bien pour la première ligne, c'est tout, dsl.


Sans s'être plongé dans le fichier de l'auteur, tout ce que j'ai dit n'a aucun sens.:eek::confused::D
 
Dernière édition:

Manu9392

XLDnaute Nouveau
Merci pour le fichier JBarbe, très très intéressant.
Si je comprends bien le premier exemple de 3 mois, tu vérifies que :
  • La cellule projection contient 30 et D
  • La date de maturité est supérieure à la date de projection (question sur cette partie à venir)
Alors, ID = contenu cellule
Après le X = X+1, fait que cela se reproduit sur les cellules suivantes.


j'ai 3 questions stp :
- Comment interpréter ce bout de code : DateSerial(Year(Cells(4, k)), Month(Cells(4, k)) + 1, 1) - 1 ?
- Comment faire si on voulait inclure plus de 100 types de rotation? J'ai tenté une formule excel du type : (PRODUIT(GAUCHE(Rotation;3);30)+Date du jour;0)) ?
- Comment mettre NA à toutes les cellules vides?
 

JBARBE

XLDnaute Barbatruc
Bonjour à tous, Bonjour Manu,
DateSerial(Year(Cells(4, k)), Month(Cells(4, k)) + 1, 1) - 1
Correspond au dernier jour du mois ( c'est une vérif dans les cellules correspondantes) !

Comment faire si on voulait inclure plus de 100 types de rotation?
Cela devient compliqué puisque chaque boucle correspond à une rotation différente !
Je ne vois guère d'autres solutions !

Comment mettre NA à toutes les cellules vides?
En modifiant la macro !

Bonne journée !