Pastebin
Retrouvez, créez et partagez vos snippets en temps réel.
Rechercher un Pastebin
Aucun paste trouvé.
Créer un paste
Pastebin
Blog
d
import xlwings as xw import pandas as pd import os # Petit dictionnaire pour convertir les abréviations françaises en chiffres pour le tri MOIS_FR = { 'janv.': 1, 'févr.': 2, 'mars': 3, 'avr.': 4, 'mai': 5, 'juin': 6, 'juil.': 7, 'août': 8, 'sept.': 9, 'oct.': 10, 'nov.': 11, 'déc.': 12 } def actualiser_mois(): """ Docstring for actualiser_mois : Etape 1 Lit le fichier source et met à jour la liste déroulante des mois """ wb = xw.Book.caller() sheet = wb.sheets['Accueil'] #Récupération du fichier source path_source = sheet.range('B2').value if not path_source or not os.path.exists(path_source): xw.alert("Le chemin ou le fichier n'existe pas ! ") return NOM_COLONNES_MOIS = "Mois fiscal" #Lecture uniquement de la colonne des mois try: df = pd.read_excel(path_source, usecols=[NOM_COLONNES_MOIS]) except Exception as e: xw.alert(f"Erreur : Colonne '{NOM_COLONNES_MOIS}' introuvable") return #Récupération des valeurs unique et suppression doublon / vide valeurs_uniques = df[NOM_COLONNES_MOIS].dropna().unique().tolist() #Trier par ordre chrono def tri_chronologique(date_str): try: #On sépare le mois à l'année par exemple "déc" .- "25" parties_mois, parties_annee = date_str.split('-') num_mois = MOIS_FR.get(parties_mois.lower(),0) num_annee = int(parties_annee) return (num_annee,num_mois) except: return(0,0) valeurs_uniques.sort(key=tri_chronologique) #Ecriture dans la col Z pour la liste déroulante des mois sheet.range('Z:Z').clear_contents() if valeurs_uniques: #On met les valeurs en col sheet.range('Z1').options(transpose=True).value = valeurs_uniques xw.alert("Liste déroulante des mois mis à jour ") else: xw.alert("Aucune donnée trouvée ") def generer_detail(): wb = xw.Book.caller() sheet_home = wb.sheets['Accueil'] path_source = sheet_home.range('B2').value mois_choisi = sheet_home.range('B3').value NOM_COLONNES_MOIS = "Mois fiscal" if not mois_choisi: xw.alert("Choisis un mois dans la liste !") return #Lecture de tout le fich df = pd.read_excel(path_source) #Filtre les données (correspondance exacte avec le mois choisi) df_filtre = df[df[NOM_COLONNES_MOIS] == mois_choisi] #Envoyer la réponse vers la feuille détail if 'Détail' not in [s.name for s in wb.sheets]: wb.sheets.add('Détail') sheet_detail = wb.sheets['Détail'] sheet_detail.clear() # On colle les données avec l'en-tête sheet_detail.range('A1').value = df_filtre sheet_detail.autofit() # Ajuste la largeur des colonnes automatiquement xw.alert(f"Importation terminée : {len(df_filtre)} lignes ajoutées.")
Créé il y a 1 mois.