1. Ce site utilise des "témoins de connexion" (cookies) conformes aux textes de l'Union Européenne. Continuer à naviguer sur nos pages vaut acceptation de notre règlement en la matière. En savoir plus.

XL 2016 macro automatisation de remplissage de cellules

Discussion dans 'Forum Excel' démarrée par Manu9392, 12 Septembre 2017.

  1. Manu9392

    Manu9392 XLDnaute Nouveau

    Inscrit depuis le :
    12 Septembre 2017
    Messages :
    11
    "J'aime" reçus :
    0
    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:

  2. Manu9392

    Manu9392 XLDnaute Nouveau

    Inscrit depuis le :
    12 Septembre 2017
    Messages :
    11
    "J'aime" reçus :
    0
    Une indication? Un indice?
     
  3. Brice G

    Brice G XLDnaute Junior

    Inscrit depuis le :
    27 Juillet 2017
    Messages :
    95
    "J'aime" reçus :
    8
    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: 13 Septembre 2017
  4. Brice G

    Brice G XLDnaute Junior

    Inscrit depuis le :
    27 Juillet 2017
    Messages :
    95
    "J'aime" reçus :
    8
    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:

  5. Manu9392

    Manu9392 XLDnaute Nouveau

    Inscrit depuis le :
    12 Septembre 2017
    Messages :
    11
    "J'aime" reçus :
    0
     
  6. Manu9392

    Manu9392 XLDnaute Nouveau

    Inscrit depuis le :
    12 Septembre 2017
    Messages :
    11
    "J'aime" reçus :
    0
     
  7. JBARBE

    JBARBE XLDnaute Barbatruc

    Inscrit depuis le :
    26 Novembre 2008
    Messages :
    2526
    "J'aime" reçus :
    73
    Sexe :
    Masculin
    Utilise:
    Excel 2007 (PC)
    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 !
     
  8. Manu9392

    Manu9392 XLDnaute Nouveau

    Inscrit depuis le :
    12 Septembre 2017
    Messages :
    11
    "J'aime" reçus :
    0
    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.
     
  9. Manu9392

    Manu9392 XLDnaute Nouveau

    Inscrit depuis le :
    12 Septembre 2017
    Messages :
    11
    "J'aime" reçus :
    0
    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?
     
  10. Brice G

    Brice G XLDnaute Junior

    Inscrit depuis le :
    27 Juillet 2017
    Messages :
    95
    "J'aime" reçus :
    8
    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.

    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: 13 Septembre 2017
  11. JBARBE

    JBARBE XLDnaute Barbatruc

    Inscrit depuis le :
    26 Novembre 2008
    Messages :
    2526
    "J'aime" reçus :
    73
    Sexe :
    Masculin
    Utilise:
    Excel 2007 (PC)
    Bonjour à tous,
    En cliquant sur le bouton "GO"
    La macro est adaptée pour :
    - 30 jours
    - 2 ans
    - de 2 mois à 6 mois
    Possibilité d'ajouter d'autres critères dans cette macro !
    Bonne journée !
     

    Pièces jointes:

    Manu9392 et Brice G aiment cela.
  12. Manu9392

    Manu9392 XLDnaute Nouveau

    Inscrit depuis le :
    12 Septembre 2017
    Messages :
    11
    "J'aime" reçus :
    0
    Effectivement Brice, avec les formules et pour ce genre de problèmes, il y'a toujours quelque chose qui foire.
    Sinon merci pour tes essais et ta contribution. Ce n'était pas inutile ;);)
     
  13. Manu9392

    Manu9392 XLDnaute Nouveau

    Inscrit depuis le :
    12 Septembre 2017
    Messages :
    11
    "J'aime" reçus :
    0
    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?
     
  14. JBARBE

    JBARBE XLDnaute Barbatruc

    Inscrit depuis le :
    26 Novembre 2008
    Messages :
    2526
    "J'aime" reçus :
    73
    Sexe :
    Masculin
    Utilise:
    Excel 2007 (PC)
    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 !
     
  15. Manu9392

    Manu9392 XLDnaute Nouveau

    Inscrit depuis le :
    12 Septembre 2017
    Messages :
    11
    "J'aime" reçus :
    0
    Merci beaucoup... ça m'a beaucoup aidé en tout cas.

    Bonne journée !
     
  16. JBARBE

    JBARBE XLDnaute Barbatruc

    Inscrit depuis le :
    26 Novembre 2008
    Messages :
    2526
    "J'aime" reçus :
    73
    Sexe :
    Masculin
    Utilise:
    Excel 2007 (PC)
    Re,
    Si tu veux comprendre la macro et la modifier ou ajouter des boucles, je reste à ta disposition
    Bonne journée
     
  17. Manu9392

    Manu9392 XLDnaute Nouveau

    Inscrit depuis le :
    12 Septembre 2017
    Messages :
    11
    "J'aime" reçus :
    0
    En fait, si je me base sur la macro, je devrais faire 230 boucles correspondant à 230 rotations (de 0 à 599M, et 30D qui est unique).

    Je suis donc entrain de réfléchir à comment avoir le minimum de boucles possible en m'inspirant de ce tu as fait.

    La condition serait, en plus des conditions de date, et en excluant le cas du 30D:
    - de regarder dans les cellules de la colonne rotation
    - En fonction du nombre de caractères (min 2, max 4), prendre uniquement les chiffres. Ils serviront de base de rotation.

    En résumé, je cherche à me baser sur ce code : If Cells(X, 20) Like "30*" And Cells(X, 20) Like "*D" And Cells(4, j) <> "" Then

    Toute aide est sera la bienvenue.

    Merci.
     
  18. JBARBE

    JBARBE XLDnaute Barbatruc

    Inscrit depuis le :
    26 Novembre 2008
    Messages :
    2526
    "J'aime" reçus :
    73
    Sexe :
    Masculin
    Utilise:
    Excel 2007 (PC)
    Re,
    La macro test1 a été simplifiée en y mettant deux inputbox demandant un N° et une lettre en majuscule ( exemple 3M)!
    Ainsi l'on peut mettre le nombre de mois voulu mais seulement les MOIS !
    Peut-être cela peut t'aider par la suite !
    D'autre part, j'ai partagé la rotation les lettres d'un coté et les chiffres de l'autre !
    Je ne vois pas d'autre solution !
    Bonne soirée !
     

    Pièces jointes:

  19. JBARBE

    JBARBE XLDnaute Barbatruc

    Inscrit depuis le :
    26 Novembre 2008
    Messages :
    2526
    "J'aime" reçus :
    73
    Sexe :
    Masculin
    Utilise:
    Excel 2007 (PC)
    Bonsoir à tous,
    La macro test1 prend en charge du nombre 1 à 31 ( peut aller au-delà )
    Tout les mois tout les jours et toutes les Années sont pris en charge par la macro !
    Identifié ainsi :
    If Cells(X, 6) = "M" Then >>>pour mois
    J'ai abandonné les deux inputbox trop encombrant !
    Reste à savoir ce que tu veux faire sur les + de 200 lignes ?
    A tester !
    Bonne soirée !
     

    Pièces jointes:

    Dernière édition: 15 Septembre 2017
  20. Manu9392

    Manu9392 XLDnaute Nouveau

    Inscrit depuis le :
    12 Septembre 2017
    Messages :
    11
    "J'aime" reçus :
    0
    Bonjour JBarbe,

    J'ai finalement essayé la version suivante, en ne séparant pas les rotations :
    If Left(Sheets("Detail").Cells(X, 5), 1) = 1 Then ....
    If Right(Sheets("Detail").Cells(X, 5), 1) = "M" Then ...

    La prochaine étape est de voire s'il y'a moyen de faire une boucle pour ne pas avoir à répéter le code 230 fois.

    Bonne journée !
     

Partager cette page