Une application de tableur riche en fonctionnalités construite avec Rust et egui/eframe, inspirée d'Excel. MiniSheet offre une expérience de tableur desktop moderne et performante avec un support complet des formules, du formatage des cellules et des outils de manipulation de données.
- Grille Infinie : Tableur défilable avec expansion dynamique des lignes/colonnes
- Sélection de Cellules : Support de la sélection simple, de plage et multiple
- Édition In-Cell : Édition directe dans la cellule avec F2 ou double-clic
- Barre de Formule : Saisie de formule dédiée avec bouton d'application
- Recalcul Automatique : Suivi intelligent des dépendances avec détection de cycles
- Annuler/Rétablir : Historique illimité d'annulation/rétablissement (Ctrl+Z / Ctrl+Y)
- Copier/Coller : Support complet du presse-papiers (Ctrl+C / Ctrl+V)
- Arithmétiques :
+,-,*,/ - Puissance :
^ - Comparaisons :
=,<>,<,>,<=,>= - Parenthèses :
()pour le regroupement
- Relative :
A1,B2(s'ajuste lors de la copie) - Absolue :
$A$1(ligne et colonne fixes) - Mixte :
$A1(colonne fixe),A$1(ligne fixe) - Plages :
A1:B5,SUM(A1:A10)
Mathématiques :
SUM(plage)- Somme des valeursAVG(plage)- Moyenne des valeursMIN(plage)- Valeur minimaleMAX(plage)- Valeur maximaleCOUNT(plage)- Nombre de valeurs numériquesABS(valeur)- Valeur absolueSQRT(valeur)- Racine carréeROUND(valeur, décimales)- Arrondir à un nombre de décimalesPOWER(base, exposant)- Élever à une puissance
Conditionnelles :
IF(condition, valeur_vrai, valeur_faux)- Logique conditionnelleSUMIF(plage, critère)- Somme avec conditionCOUNTIF(plage, critère)- Compter avec conditionAVERAGEIF(plage, critère)- Moyenne avec condition
Fonctions de Texte :
CONCATENATE(texte1, texte2, ...)ouCONCAT(...)- Joindre du texteLEFT(texte, nb_caractères)- Extraire les caractères de gaucheRIGHT(texte, nb_caractères)- Extraire les caractères de droiteMID(texte, position_début, nb_caractères)- Extraire les caractères du milieu
Fonctions de Recherche :
VLOOKUP(valeur_recherche, tableau, index_colonne, [recherche_approximative])- Recherche verticaleHLOOKUP(valeur_recherche, tableau, index_ligne, [recherche_approximative])- Recherche horizontale
- Détection Intelligente de Séquences : Détecte automatiquement les séquences numériques (1, 2, 3...) et les séquences de texte (Jan, Fév, Mar... ou Lun, Mar, Mer...)
- Ajustement des Formules : Ajuste automatiquement les références relatives lors du remplissage
- Glisser pour Remplir : Cliquez et glissez le petit carré dans le coin inférieur droit des cellules sélectionnées
- Rechercher : Rechercher dans toutes les cellules (Ctrl+F)
- Remplacer : Remplacer une occurrence ou toutes les occurrences
- Navigation : Naviguer dans les résultats avec les boutons Précédent/Suivant
- Tri par Colonne : Cliquez sur les boutons ▲/▼ dans les en-têtes de colonnes
- Support Multi-Type : Gère le tri numérique et textuel
- Croissant/Décroissant : Basculer la direction du tri
- Sélection de Plage : Shift+Clic pour sélectionner des plages rectangulaires
- Sélection Discontinue : Ctrl+Clic pour sélectionner plusieurs cellules non adjacentes
- Tout Sélectionner : Ctrl+A pour sélectionner toute la feuille
- Gras (Ctrl+B)
- Italique (Ctrl+I)
- Couleur du Texte : Couleur de premier plan personnalisée
- Couleur de Fond : Arrière-plan de cellule personnalisé
- Options d'alignement Gauche, Centre, Droite
- Afficher les Formules : Basculer pour afficher les formules au lieu des valeurs (Ctrl+`)
- Nouveau : Créer une nouvelle feuille de calcul (Ctrl+N)
- Ouvrir : Ouvrir un fichier existant (Ctrl+O)
- Enregistrer : Enregistrer le fichier actuel (Ctrl+S)
- Enregistrer sous : Enregistrer dans un nouveau fichier (Ctrl+Shift+S)
- Format : Format de fichier JSON avec sérialisation complète
- Mode Sombre : Basculer entre les thèmes clair et sombre
- Palette Personnalisée : Schéma de couleurs cohérent dans toute l'application
- Barre de Statut : Messages de statut codés par couleur (OK, Avertissement, Erreur)
- Mise en Surbrillance de la Sélection : Indication visuelle claire des cellules sélectionnées
- Retour d'Erreur : Les cellules avec erreurs affichent un fond rouge
- Mise en Surbrillance des Dépendances : Cellules référencées surlignées quand une cellule avec formule est sélectionnée
- Effets au Survol : Retour visuel sur les éléments interactifs
- Infobulles : Infobulles utiles sur les boutons et contrôles
- Colonnes Redimensionnables : Glisser les bordures des colonnes pour redimensionner
- Ajustement Automatique : Ajustement automatique de la largeur des colonnes selon le contenu
- Figer la Première Ligne : Garder la ligne d'en-tête visible lors du défilement
- Figer la Première Colonne : Garder la première colonne visible lors du défilement
- Flèches : Déplacer la sélection
- Tab : Aller à droite (Shift+Tab : aller à gauche)
- Entrée : Aller en bas (Shift+Entrée : aller en haut)
- Home : Aller à la première colonne
- End : Aller à la dernière colonne
- F2 : Entrer en mode édition
- Échap : Annuler l'édition
- Ctrl+Z : Annuler
- Ctrl+Y ou Ctrl+Shift+Z : Rétablir
- Ctrl+C : Copier
- Ctrl+V : Coller
- Suppr ou Retour arrière : Effacer la cellule
- Ctrl+B : Basculer le gras
- Ctrl+I : Basculer l'italique
- Ctrl+` : Basculer l'affichage des formules
- Ctrl+N : Nouvelle feuille de calcul
- Ctrl+O : Ouvrir un fichier
- Ctrl+S : Enregistrer
- Ctrl+Shift+S : Enregistrer sous
- Ctrl+A : Sélectionner toutes les cellules
- Ctrl+F : Ouvrir la boîte de dialogue Rechercher et Remplacer
- Toolchain Rust (installer depuis rustup.rs)
- Cargo (fourni avec Rust)
# Cloner ou naviguer vers le répertoire du projet
cd exxel
# Compiler le projet
cargo build --release
# Exécuter l'application
cargo run --releaseLe projet utilise les crates suivantes :
eframe = "0.27"- Framework GUI natifegui = "0.27"- Bibliothèque GUI en mode immédiatserde = "1.0"- Framework de sérialisationserde_json = "1.0"- Support JSONrfd = "0.14"- Dialogues de fichiers natifs
A1: 10
A2: 20
A3: =A1+A2 → 30
A4: =A1*A2 → 200
A5: =A2/A1 → 2
A1: 5
A2: 10
A3: 15
A4: =SUM(A1:A3) → 30
A5: =AVG(A1:A3) → 10
A6: =MAX(A1:A3) → 15
A7: =MIN(A1:A3) → 5
A1: 85
A2: =IF(A1>=90, "A", IF(A1>=80, "B", "C")) → "B"
A1: "Hello"
A2: "World"
A3: =CONCATENATE(A1, " ", A2) → "Hello World"
A4: =LEFT(A1, 3) → "Hel"
A5: =RIGHT(A1, 3) → "llo"
- Saisir
1dans A1 - Saisir
2dans A2 - Sélectionner A1:A2
- Glisser la poignée de recopie (petit carré) vers le bas jusqu'à A10
- Résultat : 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
- Saisir
=A1+B1dans C1 - Sélectionner C1 et glisser la poignée de recopie jusqu'à C5
- C2 devient
=A2+B2, C3 devient=A3+B3, etc.
App: Main application state and UI logicSheet: Spreadsheet data model (cells, formulas, formats)CellValue: Enum representing cell value types (Empty, Number, Text, Error)FormulaParser: Recursive descent parser for formula evaluationSelection: Selection state management (Single, Range, Multiple)Theme: Color palette and visual styling
- Incremental Recalculation: Only recalculates cells affected by changes
- Cycle Detection: Prevents circular references
- Error Handling: Comprehensive error messages and validation
- Serialization: Full save/load support with custom HashMap serialization
MiniSheet dispose d'une documentation complète organisée en deux parties : des guides pratiques dans le dossier Guide/ et une documentation technique approfondie dans le dossier livre/.
Les guides pratiques sont disponibles dans le dossier Guide/ et couvrent des sujets spécifiques :
- GUIDE_UTILISATEUR.md - Guide complet pour les utilisateurs finaux
- GUIDE_FORMULES.md - Guide détaillé de toutes les formules et fonctions
- RACCOURCIS_CLAVIER.md - Référence complète des raccourcis clavier
- GUIDE_DEVELOPPEMENT.md - Guide pour développeurs (architecture, conventions, contribution)
- GUIDE_DEBUGGING.md - Guide de débogage (outils, techniques, cas d'usage)
- API.md - Documentation complète de l'API
- ARCHITECTURE.md - Architecture technique détaillée
- PERFORMANCE.md - Guide de performance et optimisations
- SECURITE.md - Guide de sécurité et bonnes pratiques
- GUIDE_DEPLOIEMENT.md - Guide de déploiement (compilation, packaging, distribution)
- CARGO_TOML.md - Explication de Cargo.toml
- CARGO_LOCK.md - Explication de Cargo.lock
- TARGET_DIRECTORY.md - Explication du répertoire target
- TARGET_BUILDS.md - Guide des build targets et cross-compilation
- FORMATS_FICHIERS.md - Guide des formats de fichiers supportés
MiniSheet est accompagné d'une documentation technique approfondie structurée en livre, couvrant tous les aspects du développement et de l'architecture.
La documentation complète se trouve dans le dossier livre/ :
- Table des matières complète - Vue d'ensemble de tout le contenu
- Guide de navigation - Instructions pour utiliser la documentation
- Chapitre 1 : Introduction - Présentation et historique
- Chapitre 2 : Architecture - Conception et modules
- Chapitre 3 : Fonctionnalités de base - Grille, navigation, édition
- Chapitre 4 : Formules et fonctions - Moteur de calcul
- Chapitre 5 : Interface utilisateur - egui et composants
- Chapitre 6 : Algorithmes et optimisation - Performance et algorithmes
- Chapitre 7 : Fonctionnalités avancées - Formatage conditionnel, validation
- Chapitre 8 : Perspectives - Évolution et développement futur
- Chapitre 1 : Introduction à MiniSheet - Présentation, historique, technologies
- Chapitre 2 : Architecture et conception - Modules, données, sélection, thèmes
- Chapitre 3 : Fonctionnalités de base - Grille, navigation, édition, sauvegarde
- Chapitre 4 : Formules et fonctions - Parsing, évaluation, dépendances
- Chapitre 5 : Interface utilisateur - egui, événements, rendu, composants
- Chapitre 6 : Algorithmes et optimisation - Recherche, tri, mémoire, calculs
- Chapitre 7 : Fonctionnalités avancées - Formatage conditionnel, validation, tableaux croisés
- Chapitre 8 : Perspectives et développement - Limites, améliorations futures
- Annexe A : Fonctions - Guide complet des fonctions mathématiques, statistiques, texte et recherche
- Annexe B : Raccourcis clavier - Tous les raccourcis pour navigation, édition et formatage
- Annexe C : Structure des données - Types de données, persistance et optimisation mémoire
- Annexe D : Exemples pratiques - Cas d'usage concrets : budget, inventaire, analyses
- Annexe E : Contribution - Guide pour contribuer au développement
La documentation technique inclut :
- Exemples de code Rust complets et fonctionnels
- Architectures détaillées avec diagrammes
- Algorithmes optimisés avec explications
- Patterns de conception utilisés
- Guides de contribution pour le développement
La documentation couvre :
- Fonctionnalités avancées non documentées dans ce README
- Exemples pratiques d'utilisation
- Optimisations de performance
- Dépannage et résolution de problèmes
📁 Guide/ # Guides pratiques
├── 📄 GUIDE_UTILISATEUR.md # Guide utilisateur
├── 📄 GUIDE_FORMULES.md # Guide des formules
├── 📄 RACCOURCIS_CLAVIER.md # Raccourcis clavier
├── 📄 GUIDE_DEVELOPPEMENT.md # Guide développeur
├── 📄 GUIDE_DEBUGGING.md # Guide débogage
├── 📄 API.md # Documentation API
├── 📄 ARCHITECTURE.md # Architecture technique
├── 📄 PERFORMANCE.md # Guide performance
├── 📄 SECURITE.md # Guide sécurité
├── 📄 GUIDE_DEPLOIEMENT.md # Guide déploiement
├── 📄 CARGO_TOML.md # Cargo.toml
├── 📄 CARGO_LOCK.md # Cargo.lock
├── 📄 TARGET_DIRECTORY.md # Répertoire target
├── 📄 TARGET_BUILDS.md # Build targets
└── 📄 FORMATS_FICHIERS.md # Formats de fichiers
📁 livre/ # Documentation technique approfondie
├── 📄 [README.md](./livre/README.md) # Guide de navigation
├── 📄 [TABLE_DES_MATIERES.md](./livre/TABLE_DES_MATIERES.md) # Table des matières complète
├── 📁 chapitre01/ à chapitre08/ # 8 chapitres détaillés
│ └── 📄 Sections numérotées (1.1, 1.2, etc.)
└── 📁 annexes/ # 5 annexes pratiques
├── 📄 [annexe_A_fonctions_reference.md](./livre/annexes/annexe_A_fonctions_reference.md)
├── 📄 [annexe_B_raccourcis_clavier.md](./livre/annexes/annexe_B_raccourcis_clavier.md)
├── 📄 [annexe_C_structure_donnees.md](./livre/annexes/annexe_C_structure_donnees.md)
├── 📄 [annexe_D_exemples_pratiques.md](./livre/annexes/annexe_D_exemples_pratiques.md)
└── 📄 [annexe_E_guide_contribution.md](./livre/annexes/annexe_E_guide_contribution.md)
- Pas de support multi-feuilles (une seule feuille)
- Pas de support de graphiques
- Pas d'import/export Excel (.xlsx)
- Validation de données basique uniquement
- Pas de commentaires de cellules
- Pas de règles de formatage conditionnel
Fonctionnalités potentielles pour les versions futures :
- Feuilles multiples avec onglets
- Génération de graphiques
- Support du format de fichier Excel (.xlsx)
- Validation de données avancée
- Commentaires de cellules
- Formatage conditionnel
- Fonctionnalité d'enregistrement automatique
- Fonctions plus avancées (DATE, TIME, etc.)
Ce projet est fourni tel quel à des fins éducatives et personnelles.
Il s'agit d'un projet personnel, mais les suggestions et commentaires sont les bienvenus !
Pour les problèmes ou questions, veuillez consulter les commentaires du code ou créer une issue dans le dépôt du projet.
MiniSheet - Une application de tableur moderne construite avec Rust 🦀

