Microsoft 365 Remplir un tableau à l'aide d'onglets source

  • Initiateur de la discussion Initiateur de la discussion momo
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

momo

XLDnaute Occasionnel
Bonjour à tous

Je voudrais remplir un tableau automatiquement (Via VBA ou via Formules) à l'aide d'informations recueillies à partir de deux onglets du fichier .

je voudrais que vous m'aidiez à obtenir le résultat tel que décrit sur l'onglet résultat

Je joins une feuille descriptive du résultat attendu .

Merci d'avance pour toutes les propositions à recevoir
 

Pièces jointes

Solution
Bonjour.
Ayant maintenant compris que les écarts avec votre exemple venaient de seulement de ce que ce dernier n'était pas parfaitement conforme à ce qu'il aurait fallu, je propose une version avec quelques changements mineurs tenant compte de trois choses :
1 — Cette façon de calculer la colonne Montant Initial reçu revient en fait à y reproduire le Capital initial avant recalcul de la ligne. Alors si c'est bien ça, autant y mettre simplement ça.
2 — Bien que des apports postérieurs à la date d'arrêté ne seraient toujours plus reproduits non plus, seul un remboursement postérieur provoquerait l'apposition de cette date à la fin.
3 — Le remboursement restant peu être appliqué partiellement jusqu'à hauteur du capital.
Est ce normal que les remboursements dépassent les

En réalité, le Montant initial global peut s'encaisser par petit bout (Ca reste un choix). Par contre le remboursement se fait en fonction du montant global quelque soit le niveau d'encaisse deja effectué. C'est pourquoi lorsque le remboursement est supérieur au montant initial, on le limite au montant initial quitte a compenser lors de la prochaine échéance
 
C'est possible de partage comment on arrive à mettre en oeuvre les bases de données pour en arriver au résultat final?
Re,
De quoi reproduire les manipulations.
Cordialement.
 

Pièces jointes

Qu'est ce qui vous manque pour reprendre la procédure ?
Ce n'est pas très compliqué : La fonction TableUnique met bout à bout les deux tableaux en ajoutant devant une colonne 0 valant 0 pour les données venant du 1er tableau et 1 pour celles venant du second.
La fonction Gigogne renvoie tout ça classé sur les colonnes 1 et 2 (après la 0 identifiant la source) et regroupé mais seulement sur la 1, en une collection d'éléments SsGr (voir le module de classe de ce nom, il y a juste 2 propriétés: Id et Co et quelques méthodes qui ne sont pas utilisées ici
Chaque Code.Id contient le code, chaque Code.Co contient la collection des lignes attachées à ce code, exploré par un For Each Détail In Code.Co.
Détail et un variant contenant un tableau des valeur de la lignes en plus du Détail(0) qui indique la source.
Est-ce plus clair ?
 
Qu'est ce qui vous manque pour reprendre la procédure ?
Ce n'est pas très compliqué : La fonction TableUnique met bout à bout les deux tableaux en ajoutant devant une colonne 0 valant 0 pour les données venant du 1er tableau et 1 pour celles venant du second.
La fonction Gigogne renvoie tout ça classé sur les colonnes 1 et 2 (après la 0 identifiant la source) et regroupé mais seulement sur la 1, en une collection d'éléments SsGr (voir le module de classe de ce nom, il y a juste 2 propriétés: Id et Co et quelques méthodes qui ne sont pas utilisées ici
Chaque Code.Id contient le code, chaque Code.Co contient la collection des lignes attachées à ce code, exploré par un For Each Détail In Code.Co.
Détail et un variant contenant un tableau des valeur de la lignes en plus du Détail(0) qui indique la source.
Est-ce plus clair ?
Oui c'est beaucoup plus clair

Merci vraiment
 
Bonjour Dranreb
J'ai essayé de continuer le code mais il en fonctionne pas sur certaines lignes,

J'insère le code que j'ai modifié. Il me semble que lorsque les colonnes sont vides, les formules ne marchent pas.
Code:
Option Explicit

Sub test()
Dim Arrêté As Date, TRés(), Code As SsGr, LaDate As Date, Montant As Currency, MtRçPréc As Currency, Détail, L&
Arrêté = [B1].Value
ReDim TRés(1 To 5000, 1 To 10)
L = -1
For Each Code In Gigogne(TableUnique(Feuil2.[A2:C2], Feuil3.[A2:C2]), 1, Null, 2)
   L = L + 1: MtRçPréc = 0
   For Each Détail In Code.Co
      LaDate = Détail(2)
      Montant = Détail(3)
      If LaDate > Arrêté Then Exit For
      L = L + 1
      TRés(L, 1) = Code.Id
      TRés(L, 2) = MtRçPréc
      If Détail(0) = 0 Then
         TRés(L, 3) = LaDate
         TRés(L, 4) = Montant
         MtRçPréc = MtRçPréc + Montant
      Else
         TRés(L, 5) = LaDate
         TRés(L, 6) = Montant
         TRés(L, 7) = IIf(TRés(L, 6) > TRés(L, 2), TRés(L, 2), TRés(L, 6))
         TRés(L, 8) = TRés(L, 2) + TRés(L, 4) - TRés(L, 7)
         TRés(L, 9) = TRés(L, 6) - TRés(L, 7) + TRés(L - 1, 8)
         TRés(L, 10) = IIf(TRés(L, 5) > Arrêté, Arrêté, "")
         MtRçPréc = MtRçPréc - Montant
         End If: Next Détail, Code
[L16].Resize(5000, 10).Value = TRés
End Sub
 
Je ne comprends pas ce que vous voulez dire.
Il n'y a pas de cellule vide dans les données tandis que les postes d'une nouvelle ligne TRés(L, …) après L = L + 1 le sont toujours d'abord.
Reprenez de préférence la variable de départ quand elle existe comme Montant plutôt que Trés(L, 6).
Par exemple
VB:
TRés(L, 7) = IIf(Montant > MtRçPréc, MtRçPréc, Montant)
Me parait plus clair que
TRés(L, 7) = IIf(TRés(L, 6) > TRés(L, 2), TRés(L, 2), TRés(L, 6))
Vous pouvez aussi utiliser des variables différentes pour le montant de la source 0 et pour celui de l'autre.
La date d'arrêté ne peut pas être inscrite sur la dernière ligne car la condition ne peut être vraie à cause du If LaDate > Arrêté Then Exit For au début. Si vous voulez la mettre systématiquement le mieux c'est de changer la fin comme ça :
VB:
         MtRçPréc = MtRçPréc - Montant
         End If: Next Détail
      TRés(L, 10) = Arrêté
      Next Code
[L16].Resize(5000, 10).Value = TRés
End Sub
Mais alors, c'était juste ma façon de calculer ce MtRçPréc ? Pourtant à part pour le Code 001 je ne trouvai pas la même chose que dans votre exemple. C'est aussi en partie à cause de ça que j'ai laissé tomber en pensant que vous sauriez ce que vous voulez mieux que je ne saurais le comprendre.

Il me semble aussi vaguement que les TRés(L, 8) et TRés(L, 9) ne devrait pas être renseignés seulement quand Détail(0) = 1 mais dans tout les cas, à la fin, à partir de variables MtCapital et MtRembou, tous deux déclarés As Currency, dont vous réviseriez seulement les valeurs selon le Détail(0), car ils me paraissent procéder un peu de cumuls et d'un suivi tout au long des lignes qui se présentent.
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
10
Affichages
559
Retour