• # code source python reformaté

    Posté par . En réponse au message Demande pour que mon code python aille 1 million de fois plus vite car j'ai au moins 4 millions de f. Évalué à 3. Dernière modification le 03 février 2025 à 07:52.

     # conversion/reformatage avec ...GPT.
     import os
     import pandas as pd
     from openpyxl import load_workbook
     # Définition des chemins
     dossier_source = "D:/PYTHON/VALEUR REMPLACER ZIP"
     fichier_rebase = "D:/PYTHON/REBASE.xlsx"
     # Chargement des valeurs de REBASE.xlsx
     wb_rebase = load_workbook(fichier_rebase, data_only=True)
     ws_rebase = wb_rebase.active
     # Extraction des valeurs des tableaux
     tableaux = {
     1: pd.DataFrame(
     ws_rebase.iter_rows(min_row=1, max_row=273, min_col=1, max_col=2, values_only=True),
     columns=["Clé", "Valeur"]
     ),
     2: pd.DataFrame(
     ws_rebase.iter_rows(min_row=1, max_row=273, min_col=4, max_col=5, values_only=True),
     columns=["Clé", "Valeur"]
     ),
     3: pd.DataFrame(
     ws_rebase.iter_rows(min_row=1, max_row=273, min_col=7, max_col=8, values_only=True),
     columns=["Clé", "Valeur"]
     ),
     4: pd.DataFrame(
     ws_rebase.iter_rows(min_row=1, max_row=273, min_col=10, max_col=11, values_only=True),
     columns=["Clé", "Valeur"]
     ),
     }
     # Traitement des fichiers dans le dossier source
     for fichier in os.listdir(dossier_source):
     if fichier.endswith(".xlsx"):
     chemin_fichier = os.path.join(dossier_source, fichier)
     # Charger le fichier Excel
     wb = load_workbook(chemin_fichier)
     ws = wb.active
     # Identifier la dernière ligne contenant des données (entre 1 et 19)
     last_data_row = max(
     [i for i in range(1, 20) if any(ws.cell(row=i, column=j).value for j in range(2, ws.max_column + 1))],
     default=1
     )
     # Étape 1 : Remplacement avec le Tableau 1
     ligne_depart = 21
     if any(ws.cell(row=21, column=j).value for j in range(2, ws.max_column + 1)):
     ligne_depart = max(
     [i for i in range(21, ws.max_row + 1) if any(ws.cell(row=i, column=j).value for j in range(2, ws.max_column + 1))],
     default=20
     ) + 2
     ligne_debut_bloc_1 = ligne_depart
     # Ajout des valeurs du Tableau 1
     for col in range(2, ws.max_column + 1):
     for row in range(1, last_data_row + 1):
     valeur_originale = ws.cell(row=row, column=col).value
     if valeur_originale:
     valeur_remplacee = tableaux[1].loc[tableaux[1]["Clé"] == valeur_originale, "Valeur"]
     if not valeur_remplacee.empty:
     ws.cell(row=ligne_depart + row - 1, column=col, value=valeur_remplacee.values[0])
     # Calcul de la somme du Tableau 1
     ligne_somme_1 = ligne_depart + last_data_row + 1
     somme_bloc_1 = [
     sum(ws.cell(row=row, column=col).value or 0 for row in range(ligne_debut_bloc_1, ligne_somme_1) if isinstance(ws.cell(row=row, column=col).value, (int, float)))
     for col in range(2, ws.max_column + 1)
     ]
     # Suppression du bloc 1 et insertion des sommes à la ligne 21
     ws.delete_rows(ligne_debut_bloc_1, ligne_somme_1 - ligne_debut_bloc_1)
     ws.insert_rows(21)
     for col_idx, somme in enumerate(somme_bloc_1, start=2):
     ws.cell(row=21, column=col_idx, value=somme)
     # Étape 4 : Remplacement avec le Tableau 4
     ligne_depart = max(
     [i for i in range(21, ws.max_row + 1) if any(ws.cell(row=i, column=j).value for j in range(2, ws.max_column + 1))],
     default=20
     ) + 2
     ligne_debut_bloc_4 = ligne_depart
     # Ajout des valeurs du Tableau 4
     for col in range(2, ws.max_column + 1):
     for row in range(1, last_data_row + 1):
     valeur_originale = ws.cell(row=row, column=col).value
     if valeur_originale:
     valeur_remplacee = tableaux[4].loc[tableaux[4]["Clé"] == valeur_originale, "Valeur"]
     if not valeur_remplacee.empty:
     ws.cell(row=ligne_depart + row - 1, column=col, value=valeur_remplacee.values[0])
     # Calcul de la somme du Tableau 4
     ligne_somme_4 = ligne_depart + last_data_row + 1
     somme_bloc_4 = [
     sum(ws.cell(row=row, column=col).value or 0 for row in range(ligne_debut_bloc_4, ligne_somme_4) if isinstance(ws.cell(row=row, column=col).value, (int, float)))
     for col in range(2, ws.max_column + 1)
     ]
     # Suppression du bloc 4 et insertion des sommes à la ligne 24
     ws.delete_rows(ligne_debut_bloc_4, ligne_somme_4 - ligne_debut_bloc_4)
     ws.insert_rows(24)
     for col_idx, somme in enumerate(somme_bloc_4, start=2):
     ws.cell(row=24, column=col_idx, value=somme)
     # Sauvegarde du fichier modifié
     wb.save(chemin_fichier)
     print(f"✅ {fichier} mis à jour avec succès.")
     print("✔ Tous les fichiers ont été traités correctement.")