Formule excel étalement montant selon mois et durée

Bonjour,

Quelqu’un peut-il me mettre sur la voie ?
Dans le classeur joint : je voudrait en fonction du choix du 1er mois d’étalement (menu déroulant) et de la durée d’étalement (choix en chiffre) que s’affiche les valeurs
exemple M. X doit 5000 €, il souhaite payer en 4 mois à compter de janvier 2021 : je voudrais que s’affiche en automatique le montant de chaque remboursement en face chaque mois
TEST ETALEMENT.xlsx (13,3 Ko)
merci d’avance

Bonjour,

A tester
Remplir le nom, la dette, le Nb de mois d’étalement et choix du mois
le reste est automatique
Quadrillage et colorisation
La ligne 4 peut-être masquée
Si changement de montant et/ou de Nb de mois et/ou 1er mois étalement, c’est mis à jour

TEST ETALEMENT.xlsm (27,5 Ko)

Wahou du VBA pour ça ; je pensais qu’avec une simple formule excel on pouvait y arriver

je teste de demain

merci

Bonsoir à tous, bonsoir Mimimathy

Une contribution avec des formules.
Cordialement.
TEST ETALEMENT.xlsx (15,9 Ko)

ça fonctionne super
merci

zébulon
merci également

Bonjour Minimathy ,

j’ai intégré ta macro hier dans mon projet ; tout fonctionnait
aujourd’hui ça ne fonctionne plus


Une idée d’où vient le pb ?
merci

Re,

Cela fonctionnait sur ton fichier normal
Il y a un blocage de macro avec demande de débogage

Sans savoir plus, !!!

Teste en remplaçant
la ligne

Cells(Target.Row, 5) = Application.WorksheetFunction.Index(Sheets(5).Range("B1:B12"), Application.WorksheetFunction.Match(Cells(Target.Row, 4), Sheets(5).Range("A1:A12"), 0))

par

Cells(Target.Row, 5) = Application.WorksheetFunction.Index(Sheets("Menu déroulant").Range("B1:B12"), Application.WorksheetFunction.Match(Cells(Target.Row, 4), Sheets("Menu déroulant").Range("A1:A12"), 0))

Autre question,
Dans ce classeur, as-tu d’autres macros
Si OUI, cela pourrait venir d’une fonction du genre « Application EnableEvents » non réactivée

Bonjour,

je viens de remplacer la ligne et ça fonctionne de nouveau ; merci ; à voir si c’est stabilisé dans le temps

Non pour le moment, je n’ai pas d’autre macro mais ça ne serait tarder…

merci

Bonjour,
j’ai une autre question
dans le fTEST ETALEMENT.xlsm (24,1 Ko) j’aimerais que les colonnes A et B de l’onglet Dettes & Créances s’alimentent toutes seules selon la matrice de l’onglet Import balance ; j’ai tenté une recherchev mais je n’ai que M. X qui appairait sur toutes les lignes

une piste ?

merci

Re,

A tester,
la mise à jour du nom et montant s’effectue sur l’activation de l’onglet « Dettes & Créances »
En étant sur un autre onglet et en revenant dessus, la macro s’active
TEST ETALEMENT (1).xlsm (31,2 Ko)

re,
j’ai testé en l’incluant dans mon projet
j’ai une erreur image

j’essaie de comprendre mais je fais choux blanc

il y a la variable i que je ne comprend pas
et également la ligne :
ligD= 5: LigC = 16

Bonjour
Je me permet d apporter des éclaircissements
« il y a la variable i que je ne comprend pas »
i est une variable qui évolue à chaque tour de boucle
Le tour boucle est balisé par les lignes For i = 2 to D1 et Next i
La valeur de D1 est déterminé sur une ligne de code un peu avant :
D1= la ligne de code qui détermine le numéro de la dernière ligne des données
À supposer par exemple que la dernière ligne soit la ligne numéro 5
D1=5
Au premier tour de boucle i prend sa première valeur déterminée ici :

For i= 2 to D1
Donc ì =2
Le traitement exécute toutes les lignes de codes qui suivent jusqu au Next ì
Pendant ce premier tour tous les ì valent 2
Les instructions comme :
Cells (ì,1) sont à considérer comme Cells (2,1)
Ceci est valable pour toutes les instructions ayant la variable ì qu il faut remplacer par sa valeur 2 du premier tour
Puis le Next ì atteint le traitement recommence à la ligne :

For ì = 2 to D1

Mais la valeur de ì s incrémente de 1 et donc prend la valeur 3
Puis même déroulement avec cette nouvelle valeur de ì
Cette boucle prendra fin avec la dernière valeur de ì = 5
En ce qui concerne ceci :

ligD= 5: LigC = 16

Ce sont des variable fixe déterminée en dur
L une a la valeur 5 l autre la valeur 16

Dans les lignes de code de la boucle les instructions qui portent ces variables doivent prendre en compte leur valeur respective exemple :

Cells (ligD,1) est à remplacer par Cells (5,1)

Cells (ligC,2) est à remplacer par Cells (16,2)

Ces variables contrairement à la variable ì reste fixe ne bouge pas à chaque tour de boucle

Voilà pour les explications

Fort de cette procédure le traitement cible des cellules pour assurer des actions

Si on se penche sur la ligne jaune source du bug :
If Ws.Cells (ì,1).Value = « DETTES FOURNISSEURS » Then
Qui veut dire
Si la cellule (ì,1) de l onglet Ws défini au dessus « Import balance » est égale à
« DETTES FOURNISSEURS »
Il faut déterminer la cellule cible Cells (î,1)
Donc cela se résume à déterminer la valeur de î au moment du bug
Pour cela au bug sur la ligne jaune porter la souris sur la variable ī une petite boîte de dialogue devrait en donner sa valeur
Une fois obtenu à supposer que la valeur soit par exemple 4 c est donc la cellule (4,1)
4 le numéro de la ligne
1 le numéro de la colonne soit la colonne À
Une fois la cellule déterminée essayer de comprendre pourquoi le bug la donnée semble incompatible avec celle que peut avoir la cellule (cellule au format date ou au format nombre incompatible avec du texte par exemple)

Voilà donc une piste de recherche et résolution

Effectivement j’ai un dièse N/A qui plantait la macro ; c’est résolu

Dans mon projet j’ai mon onglet « Dettes & Créances » dans le quel :

  • mes dettes fournisseurs vont de la ligne 5 à 66
  • mes dettes sociales qui vont de la lignes 68 à 72
  • mes dettes état qui vont de la ligne 74 à 76
  • mes créances clients qui vont de la ligne 78 à 107
  • mes créances état qui vont de la ligne 109 à 112

J’ai traduit ça dans la macro comm suit mais il ne me fait pas bien les séparations
il me met les dettes sociales /dettes état/ et les créances à partir de la ligne 78

Une idée ?

Bonjour
ta variable ligC est défini à 78 sur la ligne de code :

ligQ = 5: ligC = 78

Juste avant le For i = 2 To Dl

ce qui impacte toutes les cellules Cells(ligC,1) et Cells(ligC, 2) à la ligne 78 colonne A pour la première colonne B pour la seconde en prenant les valeurs des lignes i des colonnes C et D
dont les cellule Cells(i,1) (colonne A pour les ligne i de 2 à la dernière saisies) ont comme valeur
« DETTES SOCIALES »
« DETTES ETAT »
« CREANCE CLIENTS »
« CREANCE ETAT »

Voilà l’explication

Bonjour,

Je n’arrive pas à lui faire faire la commande suivante :

si dans la feuille « Import balance », la colonne A = DETTES FOURNISSEURS alors libellé de la colonne C et montant de la colonne D vont dans l’onglet Dettes & Créances respectivement en colonne A et B à partir de la ligne 5 jusqu’à la ligne 66 sinon :

  • si dans la feuille « Import balance », la colonne A = DETTES SOCIALES alors libellé de la colonne C et montant de la colonne D vont dans l’onglet Dettes & Créances respectivement en colonne A et B à partir de la ligne 68 jusqu’à la ligne 72, sinon,

  • si dans a feuille « Import balance », la colonne A = DETTES ETAT alors libellé de la colonne C et montant de la colonne D vont dans l’onglet Dettes & Créances respectivement en colonne A et B à partir de la ligne 74 jusqu’à la ligne 76, sinon,

  • si dans a feuille « Import balance », la colonne A = CRÉANCES CLIENT alors libellé de la colonne C et montant de la colonne D vont dans l’onglet Dettes & Créances respectivement en colonne A et B à partir de la ligne 78 jusqu’à la ligne 107, sinon,

  • si dans a feuille « Import balance », la colonne A = CRÉANCES ETAT alors libellé de la colonne C et montant de la colonne D vont dans l’onglet Dettes & Créances respectivement en colonne A et B à partir de la ligne 109 jusqu’à la ligne 112.

Vous pourriez m’aider ?
d’avance merci

Bonjour

A la place de la ligne de code :

ligQ = 5: ligC = 78

Mets :
Ligne1 = 5
Ligne2 = 68
Ligne3 = 74
Ligne4 = 78
Ligne5 = 109

Remplaces ces lignes :
If Ws.Cells(i 1).Value = « DETTES FOURNISSEURS » Then
Cells(ligQ, 1).Value = Ws.Cells(i, 3).Value
Cells(ligQ, 2).Value = Ws.Cells(i, 4).Value

Par
If Ws.Cells(i 1).Value = « DETTES FOURNISSEURS » Then
Sheets(« Dettes & Créances »).Cells(Ligne1, 1).Value = Ws.Cells(i, 3).Value
Sheets(« Dettes & Créances »).Cells(Ligne1, 2).Value = Ws.Cells(i, 4).Value
Ligne1 = Ligne1+1

If Ws.Cells(i 1).Value = « DETTES SOCIALES » Then
Cells(ligC, 1).Value = Ws.Cells(i, 3).Value
Cells(ligC, 2).Value = Ws.Cells(i, 4).Value

Par

If Ws.Cells(i 1).Value = « DETTES SOCIALES » Then
Sheets(« Dettes & Créances »).Cells(Ligne2, 1).Value = Ws.Cells(i, 3).Value
Sheets(« Dettes & Créances »).Cells(Ligne2, 2).Value = Ws.Cells(i, 4).Value
Ligne2 = Ligne2+1

If Ws.Cells(i 1).Value = « DETTES ETAT » Then
Cells(ligC, 1).Value = Ws.Cells(i, 3).Value
Cells(ligC, 2).Value = Ws.Cells(i, 4).Value

Par

If Ws.Cells(i 1).Value = « DETTES ETAT » Then
Sheets(« Dettes & Créances »).Cells(Ligne3, 1).Value = Ws.Cells(i, 3).Value
Sheets(« Dettes & Créances »).Cells(Ligne3, 2).Value = Ws.Cells(i, 4).Value
Ligne3 = Ligne3+1

If Ws.Cells(i 1).Value = « CREANCES CLIENTS » Then
Cells(ligC, 1).Value = Ws.Cells(i, 3).Value
Cells(ligC, 2).Value = Ws.Cells(i, 4).Value

Par

If Ws.Cells(i 1).Value = « CREANCES CLIENTS » Then
Sheets(« Dettes & Créances »).Cells(Ligne4, 1).Value = Ws.Cells(i, 3).Value
Sheets(« Dettes & Créances »).Cells(Ligne4, 2).Value = Ws.Cells(i, 4).Value
Ligne4 = Ligne4+1

If Ws.Cells(i 1).Value = « CREANCES ETAT » Then
Cells(ligC, 1).Value = Ws.Cells(i, 3).Value
Cells(ligC, 2).Value = Ws.Cells(i, 4).Value

Par

If Ws.Cells(i 1).Value = « CREANCES ETAT » Then
Sheets(« Dettes & Créances »).Cells(Ligne5, 1).Value = Ws.Cells(i, 3).Value
Sheets(« Dettes & Créances »).Cells(Ligne5, 2).Value = Ws.Cells(i, 4).Value
Ligne5 = Ligne5+1

colonne A et B à partir de la ligne 5 jusqu’à la ligne 66 sinon :
colonne A et B à partir de la ligne 68 jusqu’à la ligne 72, sinon,
colonne A et B à partir de la ligne 74 jusqu’à la ligne 76, sinon,
colonne A et B à partir de la ligne 78 jusqu’à la ligne 107, sinon,
colonne A et B à partir de la ligne 109 jusqu’à la ligne 112.

La 1° ligne est bien déterminée avec les lignes de code mis en place :

Ligne1 = 5
Ligne2 = 68
Ligne3 = 74
Ligne4 = 78
Ligne5 = 109

Mais la dernière ligne est conditionnée par les données sources de l’onglet « Import Balance »
Si plus de données à ramener que de lignes à disposition celles-ci déborderont
A moins de rajouter une condition liée à cette limite à respecter
Dans cette alternative une seule partie des données sera ramenée en fonction de cette limite

A toi de me dire

Bonjour,

j’ai fait les remplacements

j’ai 2 soucis

« Erreur de compilation non explicite »

Si je veux que le montant repris de l’onglet Import balance soit ceux de la colonne Q et non la Colone D ; je remplace D1 par Q1 dans le code ?

il est possible que plus de données à ramener que de lignes à disposition mais je n’ai pas assez de recul pour le moment ; j’agrandirais mes plages le moment venue

« Erreur de compilation non explicite »

Oui effictivement les variables Ligne1 à Ligne5 doivent être déclarées
dans cette ligne de code
Dim D1%, i%, ligQ% , ligC% Ws As Worksheet
à remplacer par
Dim D1%, i%,Ligne1%, Ligne2%, Ligne3%, Ligne4%, Ligne5%, Ws As Worksheet

Supprimer tous les ligQ et ligC variable inutilisées dans tout le code

« Si je veux que le montant repris de l’onglet Import balance soit ceux de la colonne Q et non la Colone D ; je remplace D1 par Q1 dans le code ? »

Non
D1 représente le nombre de lignes à traiter dans l’onglet « Import Balance » déterminé dans cette ligne de code :

D1 = Ws.Range(« A » & Rows.Count).End(xlUp).Row

Pour récupérer les données de la colonne Q au lieu de la colonne D il faut agir sur ces instructions :

Ws.Cells(i, 4).Value (le 4 est le numéro de la colonne D 4° colonne à partir de la colonne A la 1° colonne)

Pour la colonne Q il faut mettre cette instruction ainsi :

Ws.Cells(i, 17).Value (17° colonne à partir de la colonne A qui est la 1°)

Toutes les instructions Ws.Cells(i, 4).Value qui doivent changer de colonne doivent être modifiées ainsi Ws.Cells(i, 17).Value

Fais des essais et dis moi