Bonjour,
À part les éventuelles formules qui se cachent dans les champs calculés qui peuvent être plus ou moins compliquées à retranscrire, c'est un travail relativement simple et très automatique.
Il y a néanmoins deux approches possibles : faire une interface graphique qui ressemble à la feuille Excel (plus ergonomique), ou un programme console (plus simple) qui pose les questions une à une pour remplir les entrées et donner les résultats.
Bonjour
graphique je peux réaliser un visuel de ce que je vois comme application. mais côté code, je suis nulle. je ne sais pas comment démarrer. comment coller du code ou quel code coller derrière le graphisme que je vais réaliser.
"je ne sais pas comment démarrer"
Pour un affichage de type grille Excel comme tu peux le faire, ça s'automatise assez facilement, tu peux considérer ce petit bout de code, j'en donnerai un exemple d'utilisation en dessous.
import javax.swing.*; import java.awt.*; import java.util.*; public class GridContainerBuilder { private final Map<Point, Component> components = new HashMap<>(); private int nbRows = 0, nbCols = 0; public GridContainerBuilder add(Point point, Component component) { nbCols = Math.max(nbCols, point.x); nbRows = Math.max(nbRows, point.y); components.put(point, component); return this; } public GridContainerBuilder add(int colX, int colY, Component component) { return add(new Point(colX, colY), component); } public GridContainerBuilder add(String excelXY, Component component) { return add(excelCoordinates(excelXY), component); } public Container build() { var container = new Container(); var layout = new GroupLayout(container); layout.setAutoCreateGaps(true); layout.setAutoCreateContainerGaps(true); layout.setHorizontalGroup(group(layout, true)); layout.setVerticalGroup(group(layout, false)); container.setLayout(layout); return container; } private GroupLayout.SequentialGroup group(GroupLayout layout, boolean isHorizontal) { var sequentialGroup = layout.createSequentialGroup(); for (int sequentialIndex = 0, sequentialLimit = isHorizontal ? nbCols : nbRows; sequentialIndex <= sequentialLimit; sequentialIndex++) { var parallelGroup = layout.createParallelGroup(); for (int parallelIndex = 0, parallelLimit = isHorizontal ? nbRows : nbCols; parallelIndex <= parallelLimit; parallelIndex++) { var point = isHorizontal ? new Point(sequentialIndex, parallelIndex) : new Point(parallelIndex, sequentialIndex); components.putIfAbsent(point, new Label()); parallelGroup.addComponent(components.get(point)); } sequentialGroup.addGroup(parallelGroup); } return sequentialGroup; } private static Point excelCoordinates(String excelXY) { int x = 0, y = 0; for (var i = 0; i < excelXY.length(); i++) { var c = excelXY.charAt(i); if (c >= 'A' && c <= 'Z') { x = 26 * x + c - 'A' + 1; } else if (c >= 'a' && c <= 'z') { x = 26 * x + c - 'a' + 1; } else if (c >= '0' && c <= '9') { y = 10 * y + c - '0'; } } return new Point(x - 1, y - 1); } }
"quel code coller derrière le graphisme"
Il s'agira plus ou moins de la retranscription des formules Excel existantes.
Avec ton image, je distingue trois types de cellules dans la feuille Excel :
Si on utilise le code précédent, en l'application à ton exemple des cellules A4:B6 ça donne ceci :
import javax.swing.*; import java.time.LocalDate; import java.time.Year; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; public class Main { public static void main(String[] args) { var formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy"); var b4Text = new JTextArea(LocalDate.now().format(formatter)); var b5Text = new JTextArea(Year.now().atMonth(12).atDay(31).format(formatter)); var b6Text = new JTextArea(); var a1Button = new JButton("Calcul"); a1Button.addActionListener(e -> { var b4Date = LocalDate.parse(b4Text.getText(), formatter); var b5Date = LocalDate.parse(b5Text.getText(), formatter); var b6Integer = ChronoUnit.DAYS.between(b4Date, b5Date); b6Text.setText(String.valueOf(b6Integer)); }); var frame = new JFrame(); frame.add(new GridContainerBuilder() .add("A1", a1Button) .add("A4", new JLabel("DATE D'EFFET")).add("B4", b4Text) .add("A5", new JLabel("DATE D'ECHEANCE")).add("B5", b5Text) .add("A6", new JLabel("PERIODE DE COUVERTURE")).add("B6", b6Text) .build()); frame.setLocationRelativeTo(null); frame.pack(); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
On obtient alors une interface assez similaire à la feuille Excel :
Ne sachant pas ce que doit faire la feuille Excel, j'ai essayé d'inventer des trucs pour l'exemple :
Au final, rien de très compliqué à part reprendre de la feuille Excel chaque champs calculé et reporter le calcul dans l'action du bouton.
Mon frère, je vois que tu es vraiment caller en matière de programmation. Le fichier en faite est un tarifeur pour le calcule de prime d'assurance en assurance maladie. J'ai envie de mettre ne place une application qui peut le faire de façon automatisé en renseignant progressivement certaine informations. Je pourrais mieux te l'expliquer car cette application pourrais servir au plus grand nombre. le calcul automatisé n'est qu'une parti de ce que je veux obtenir comme application.