PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV (précédentes versions) → Extraction de données de plusieurs fichiers Excel
Extraction de données de plusieurs fichiers Excel
Débuté par MMEITE, 18 jan. 2023 14:31 - 9 réponses
Posté le 18 janvier 2023 - 14:31
Salut Chers tous, j'ai besoin d'un coup pouce;

je travaille sur un projet ou je fais une extraction de données à partir de fichiers Excel. ma fenêtre d'extraction marche bien (Voir Code).
Mon souci est que les données viennent en plusieurs dizaines de fichiers Excel et il faut reprendre l'opération autant de fois qu'il y a de fichier. Je voudrais pouvoir mettre tous les fichiers dans un répertoire et lancer une seule fois pour extraire les données de tous les fichiers


Merci d'avance pour toute aide
SI SAI_chemin="" ALORS
Info("Veuillez d'abord sélectionner le fichier contenant les données à extraire.")
DonneFocus(BTN_FICHIER)
RETOUR
FIN
//***********************************************************************//
//***************Importation des données du fichiers Excel***************//
//***********************************************************************//

//Déclaration des variables
IdFichierXLS est un entier
FichierExcel est une chaîne
CheminDeFichier est une chaîne
i,NbLigne est un entier

CheminDeFichier = FEN_EXTRACTION_ENTREPRISE.SAI_chemin
FichierExcel = CheminDeFichier

JAUGE_Jauge1..Visible = Vrai

//Début procedure d'extraction
SI fFichierExiste(FichierExcel) ALORS
HCréation(ENTREPRISE_TRANSFERT)
IdFichierXLS = xlsOuvre(CheminDeFichier)
NbLigne = xlsNbLigne(IdFichierXLS)
HOuvre(ENTREPRISE_TRANSFERT)

POUR i=2 À NbLigne

SI IdFichierXLS <> -1 ALORS

ENTREPRISE_TRANSFERT.GREF_REGCOM= xlsDonnée (IdFichierXLS,i,1,Vrai)
ENTREPRISE_TRANSFERT.RC= xlsDonnée (IdFichierXLS,i,2,Vrai)
ENTREPRISE_TRANSFERT.COD_SECT_ACTI= xlsDonnée (IdFichierXLS,i,3,Vrai)
ENTREPRISE_TRANSFERT.COD_CLS_ACTI= xlsDonnée (IdFichierXLS,i,4,Vrai)
ENTREPRISE_TRANSFERT.COD_PAYS= xlsDonnée (IdFichierXLS,i,5,Vrai)
ENTREPRISE_TRANSFERT.COD_REGIM_FISC= xlsDonnée (IdFichierXLS,i,6,Vrai)
ENTREPRISE_TRANSFERT.COD_FRM_JUR= xlsDonnée (IdFichierXLS,i,7,Vrai)
ENTREPRISE_TRANSFERT.NO_CPTE_CTRIB= xlsDonnée (IdFichierXLS,i,8,Vrai)
ENTREPRISE_TRANSFERT.NOM_ENT= xlsDonnée (IdFichierXLS,i,9,Vrai)
ENTREPRISE_TRANSFERT.SIGLE_ENT= xlsDonnée (IdFichierXLS,i,10,Vrai)
ENTREPRISE_TRANSFERT.NO_REP_ENT= xlsDonnée (IdFichierXLS,i,11,Vrai)
ENTREPRISE_TRANSFERT.NO_CAIS_SOCIAL= xlsDonnée (IdFichierXLS,i,12,Vrai)
ENTREPRISE_TRANSFERT.NO_COD_IMPORT= xlsDonnée (IdFichierXLS,i,13,Vrai)
ENTREPRISE_TRANSFERT.TEL= xlsDonnée (IdFichierXLS,i,14,Vrai)
ENTREPRISE_TRANSFERT.TELCOP= xlsDonnée (IdFichierXLS,i,15,Vrai)
ENTREPRISE_TRANSFERT.CP_ENT= xlsDonnée (IdFichierXLS,i,16,Vrai)
ENTREPRISE_TRANSFERT.BP_ENT= xlsDonnée (IdFichierXLS,i,17,Vrai)
ENTREPRISE_TRANSFERT.VILLE_ENT= xlsDonnée (IdFichierXLS,i,18,Vrai)
ENTREPRISE_TRANSFERT.ADR_GEO_ENT= xlsDonnée (IdFichierXLS,i,19,Vrai)
ENTREPRISE_TRANSFERT.ETAT_FNCE_CERT= xlsDonnée (IdFichierXLS,i,20,Vrai)
ENTREPRISE_TRANSFERT.ETAT_FNCE_APP= xlsDonnée (IdFichierXLS,i,21,Vrai)
ENTREPRISE_TRANSFERT.NOM_SIGNA= xlsDonnée (IdFichierXLS,i,22,Vrai)
ENTREPRISE_TRANSFERT.QLTE_SIGNA= xlsDonnée (IdFichierXLS,i,23,Vrai)
ENTREPRISE_TRANSFERT.CTACT_INFO= xlsDonnée (IdFichierXLS,i,24,Vrai)
ENTREPRISE_TRANSFERT.CTACT_CPTA= xlsDonnée (IdFichierXLS,i,25,Vrai)
ENTREPRISE_TRANSFERT.COMMIS_CPTE= xlsDonnée (IdFichierXLS,i,26,Vrai)
ENTREPRISE_TRANSFERT.PRE_AN_EXO= xlsDonnée (IdFichierXLS,i,27,Vrai)
ENTREPRISE_TRANSFERT.CTROL_ENT= xlsDonnée (IdFichierXLS,i,28,Vrai)
ENTREPRISE_TRANSFERT.CAPA_PROD_UTIL= xlsDonnée (IdFichierXLS,i,29,Vrai)
ENTREPRISE_TRANSFERT.NBR_ETS_PAYS= xlsDonnée (IdFichierXLS,i,30,Vrai)
ENTREPRISE_TRANSFERT.NBR_ETS_HPAYS= xlsDonnée (IdFichierXLS,i,31,Vrai)
ENTREPRISE_TRANSFERT.SYS_PRAT= xlsDonnée (IdFichierXLS,i,32,Vrai)
ENTREPRISE_TRANSFERT.DAT_SIGNA= xlsDonnée (IdFichierXLS,i,33,Vrai)
ENTREPRISE_TRANSFERT.DEB_EXO= xlsDonnée (IdFichierXLS,i,34,Vrai)
ENTREPRISE_TRANSFERT.FIN_EXO= xlsDonnée (IdFichierXLS,i,35,Vrai)
ENTREPRISE_TRANSFERT.DAT_CLOS_EFFECT= xlsDonnée (IdFichierXLS,i,36,Vrai)
ENTREPRISE_TRANSFERT.DUR_EXO= xlsDonnée (IdFichierXLS,i,37,Vrai)
ENTREPRISE_TRANSFERT.DAT_CLOS_EXO_PRE= xlsDonnée (IdFichierXLS,i,38,Vrai)
ENTREPRISE_TRANSFERT.DUR_EXO_PRE= xlsDonnée (IdFichierXLS,i,39,Vrai)
ENTREPRISE_TRANSFERT.AN_EXO= xlsDonnée (IdFichierXLS,i,40,Vrai)
ENTREPRISE_TRANSFERT.COD_ACTI_NAT= xlsDonnée (IdFichierXLS,i,41,Vrai)
ENTREPRISE_TRANSFERT.LIB_ACTI= xlsDonnée (IdFichierXLS,i,42,Vrai)
ENTREPRISE_TRANSFERT.NUM_CAS= xlsDonnée (IdFichierXLS,i,43,Vrai)
ENTREPRISE_TRANSFERT.IDENTIFIANT= xlsDonnée (IdFichierXLS,i,44,Vrai)
ENTREPRISE_TRANSFERT.DAT_SAISIE= xlsDonnée (IdFichierXLS,i,45,Vrai)
ENTREPRISE_TRANSFERT.HEURE_SAISIE= xlsDonnée (IdFichierXLS,i,46,Vrai)
ENTREPRISE_TRANSFERT.COD_AGT_SAISIE= xlsDonnée (IdFichierXLS,i,47,Vrai)
ENTREPRISE_TRANSFERT.DAT_MODIF= xlsDonnée (IdFichierXLS,i,48,Vrai)
ENTREPRISE_TRANSFERT.HEURE_MODIF= xlsDonnée (IdFichierXLS,i,49,Vrai)
ENTREPRISE_TRANSFERT.COD_AGT_MODIF= xlsDonnée (IdFichierXLS,i,50,Vrai)
ENTREPRISE_TRANSFERT.DAT_EXPL= xlsDonnée (IdFichierXLS,i,51,Vrai)
ENTREPRISE_TRANSFERT.HEURE_EXPL= xlsDonnée (IdFichierXLS,i,52,Vrai)
ENTREPRISE_TRANSFERT.COD_AGT_EXPL= xlsDonnée (IdFichierXLS,i,53,Vrai)
ENTREPRISE_TRANSFERT.CODE_ETAT= xlsDonnée (IdFichierXLS,i,54,Vrai)
ENTREPRISE_TRANSFERT.STATUT= xlsDonnée (IdFichierXLS,i,55,Vrai)
ENTREPRISE_TRANSFERT.FEUILLE= xlsDonnée (IdFichierXLS,i,56,Vrai)
ENTREPRISE_TRANSFERT.DAT_FEUILLE= xlsDonnée (IdFichierXLS,i,57,Vrai)
ENTREPRISE_TRANSFERT.AGT_MODIF_SAISIE= xlsDonnée (IdFichierXLS,i,58,Vrai)
ENTREPRISE_TRANSFERT.STATUT_SAISIE= xlsDonnée (IdFichierXLS,i,59,Vrai)
ENTREPRISE_TRANSFERT.CODE_ETAT_SAISIE= xlsDonnée (IdFichierXLS,i,60,Vrai)
ENTREPRISE_TRANSFERT.DAT_MODIF_SAISIE= xlsDonnée (IdFichierXLS,i,61,Vrai)
ENTREPRISE_TRANSFERT.HEURE_MODIF_SAISIE= xlsDonnée (IdFichierXLS,i,62,Vrai)
ENTREPRISE_TRANSFERT.DAT_MACHINE= xlsDonnée (IdFichierXLS,i,63,Vrai)
ENTREPRISE_TRANSFERT.NTD= xlsDonnée (IdFichierXLS,i,64,Vrai)
ENTREPRISE_TRANSFERT.EMAIL= xlsDonnée (IdFichierXLS,i,65,Vrai)
ENTREPRISE_TRANSFERT.ETAT= xlsDonnée (IdFichierXLS,i,66,Vrai)
ENTREPRISE_TRANSFERT.COD_AGT_CODIF= xlsDonnée (IdFichierXLS,i,67,Vrai)
ENTREPRISE_TRANSFERT.DAT_CODIF= xlsDonnée (IdFichierXLS,i,68,Vrai)
ENTREPRISE_TRANSFERT.HEURE_CODIF= xlsDonnée (IdFichierXLS,i,69,Vrai)
ENTREPRISE_TRANSFERT.VALID= xlsDonnée (IdFichierXLS,i,70,Vrai)
ENTREPRISE_TRANSFERT.COMMUNE= xlsDonnée (IdFichierXLS,i,71,Vrai)
ENTREPRISE_TRANSFERT.CENTRE_IMPOT= xlsDonnée (IdFichierXLS,i,72,Vrai)
ENTREPRISE_TRANSFERT.TEL2= xlsDonnée (IdFichierXLS,i,73,Vrai)
ENTREPRISE_TRANSFERT.NBR_PG_EXPL= xlsDonnée (IdFichierXLS,i,74,Vrai)
ENTREPRISE_TRANSFERT.NBR_EXPL_DEP= xlsDonnée (IdFichierXLS,i,75,Vrai)
ENTREPRISE_TRANSFERT.CTACT_CPTA_VISA= xlsDonnée (IdFichierXLS,i,76,Vrai)

// Champ jauge
FEN_EXTRACTION_ENTREPRISE..JaugeSystème = JAUGE_Jauge1..Nom
JAUGE_Jauge1..Libellé = "Extraction..."
JAUGE_Jauge1..BorneMin = 0
JAUGE_Jauge1..BorneMax = NbLigne
JAUGE_Jauge1..Valeur = i
Multitâche()

HAjoute(ENTREPRISE_TRANSFERT)
TableAffiche(TABLE_ENTREPRISE)
FIN
FIN
//<>
JAUGE_Jauge1..Visible=Faux
SI i = 1 ALORS
Info(" L’entreprise a été ajoutée avec succès")
FIN
SI i > 1 ALORS
Info(i+" entreprises ont été ajoutées avec succès")
FIN
//ExécuteTraitement(BTN_TRANSFERT1,trtClic)
SINON
JAUGE_Jauge1..Visible=Faux
Erreur("Le fichier n'existe pas")
FIN
Membre enregistré
3 889 messages
Popularité : +227 (347 votes)
Posté le 18 janvier 2023 - 15:00
Bonjour,
Dans un premier temps, ne serait-il pas plus simple d'utiliser HImporteXLS.
Concernant ton problème proprement dit, regarde du côté de fListeFichier

--
Il y a peut être plus simple, mais, ça tourne
Membre enregistré
149 messages
Posté le 18 janvier 2023 - 22:12
Bonjour,

//--- VARIABLES
xFichier est une chaîne
xListeFichier est une chaîne
xRep_Recherche est une chaîne = "C:\MonDossier\"
xType_Fic est une chaîne = "*.xls"

//--- Le parcours se fait dans le répertoire uniquement et est interruptible
ResListeFichier = fListeFichier(xRep_Recherche+xType_Fic, frNonRécursif+frInterruptible)

//--- Pour chaque fichier trouvé
POUR TOUTE chaîne xFichier de xListeFichier SEPAREE PAR RC

//--- Importation

FIN
Posté le 19 janvier 2023 - 13:59
Merci beaucoup à tous les deux. je teste tout ca et je fais un retour.

J'ai une autre préoccupation, je ne sais pas si cela va nécessiter un autre post.

Il y a-t-il une technique, une méthode, un procédé pour extraire les données d'un Excel qui a plus de 100 000 lignes (vu les limites de WinDev autour de 64 000 lignes)
Posté le 19 janvier 2023 - 14:37
Merci beaucoup à tous les deux. je teste tout ca et je fais un retour.

J'ai une autre préoccupation, je ne sais pas si cela va nécessiter un autre post.

Il y a-t-il une technique, une méthode, un procédé pour extraire les données d'un Excel qui a plus de 100 000 lignes (vu les limites de WinDev autour de 64 000 lignes)
Posté le 19 janvier 2023 - 15:11
Une technique, je ne sais pas.
Une méthode, peut-être.
Un procédé, pourquoi pas.
Mais une astuce oui :
Scinder le fichier excel en deux.

Bien à toi, jeune programmeur.
Membre enregistré
3 889 messages
Popularité : +227 (347 votes)
Posté le 19 janvier 2023 - 17:49
MMEITE a écrit :
Il y a-t-il une technique, une méthode, un procédé pour extraire les données d'un Excel qui a plus de 100 000 lignes (vu les limites de WinDev autour de 64 000 lignes)

La barre des 65 536 ligne ne vient pas de windev mais de XL si l'on utilise un fichier XLS.
HImporteXLS peut traiter indiféremment les XLS et les XLSX

--
Il y a peut être plus simple, mais, ça tourne
Posté le 20 février 2023 - 14:00
Merci à tous pour les différentes réponses avec une mention spéciale à Voroltinquo et Denis.

Suite à vos réponses, j'ai fait un mélange des deux réponses pour obtenir les code suivant (Voir code joint)
Ca marche mais j'ai toujours un souci.
Les Données Excel à extraire ont 3 sources
je vous montre l'exemple de la table "ACTIF"
Sources 1 = REF_LIG AN_EXO GREF_REGCOM MNT_BRUT_EXO MNT_AMORT_DEPR_EXO MNT_NET_EXO MNT_NET_EXO_PRE CODE_NOTE COD_SYST
Source 2 = REF_LIG AN_EXO GREF_REGCOM MNT_NET_EXO MNT_NET_EXO_PRE CODE_NOTE COD_SYST NO_CPTE_CTRIB NOM_ENT
Source 3 =REF_LIG AN_EXO GREF_REGCOM MNT_BRUT_EXO MNT_AMORT_DEPR_EXO MNT_NET_EXO MNT_NET_EXO_PRE CODE_NOTE COD_SYST NO_CPTE_CTRIB NOM_ENT

Cette différence au niveau des colonnes en FONCTION des sources fait qu'après l'extraction (qui se passe bien) les Données ne sont pas ordonnées.

En utilisant la FONCTION HImporteXLS, Comment puis-je donner l'ordre des colonnes que je veux en FONCTION de ma Source??

UnFichier, ResListeFichier sont des chaînes
// Liste les fichiers de type ".xlsx" présents dans "D:\LOGICIEL CRYSTAL\BASE EN EXCEL\DGI NORMAL\".
// Le parcours se fait également dans les sous-répertoires et est interruptible.
chemin_fichier est un chaîne = "D:\LOGICIEL CRYSTAL\BASE EN EXCEL\DGI_NORMAL\"
ResListeFichier = fListeFichier(chemin_fichier+"*.xlsx", frRécursif + frInterruptible)

// Pour chaque fichier trouvé
sTable_xls est chaîne
POUR TOUTE chaîne UnFichier de ResListeFichier SEPAREE PAR RC

tableauDeChemin est un tableau de chaîne
// Ajout du fichier dans la table TABLE_TableFic
// Trace(UnFichier)
// MaListeFichier est une chaîne
// MaListeFichier = HListeFichier(hLstDétail+ hLstTout)

//FEN_EXTRACTION_test.TABLE_de_test.COL_Test=MaListeFichier
// Trace(MaListeFichier)
//sMonnomdefichier est une chaîne
tableauDeChemin = ChaîneDécoupe(UnFichier, ".")

sTable_xls = Remplace(tableauDeChemin[1], chemin_fichier , "")


Trace("Table :"+sTable_xls +"- Fichier :" + UnFichier )

HImporteXLS(sTable_xls, UnFichier, 1, "", hImpCreation, JAUGE_Jauge1)

FIN
Info("Importation terminée")
Membre enregistré
149 messages
Posté le 21 février 2023 - 07:38
Bonjour, MMEITE
Je ne sais pas si j'ai bien compris votre explication. Perso, je n'utilise presque jamais HimporteXLS et préfère passer par un CSV ou du TXT, mais bon...

Perso, je ferais comme çà, avec mes vieilles habitudes (probablement pas très orthodoxe)
Comme il y a 3 sources possibles, je chercherai leur différenc. Ici, le nombre de colonnes dans chaque XLS source (Source1=8 colonnes/Source2=7/Source3=10)

Ensuite, je traiterai dans une boucle chaque fichier EXCEL:


1) Recup du chemin du fichier XLS

// Récup du nombre de colonnes et du nombre de ligne dans le fichier XL
IDFichierXLS = xlsOuvre("C:\MonRépertoire\Fichier.XLS")
SI IDFichierXLS <> -1 ALORS
ResNbColonne = xlsNbColonne(IDFichierXLS)
ResNbLignes = xlsNbLigne(IDFichierXLS)
FIN
// Selon le nombre de colonnes trouvées : 3 cas
SELON ResNbcolonnes
CAS 8
CAS 7
CAS 10
FIN
Il suffit alors de Récup les données Excel (ligne par ligne / Colonne par colonne) dans des variables
VAR 1 = xlsDonnée(IDFichierXLS, ligne, colonne)

et Affectation des variables dans les bonnes colonnes de la table Windev
Membre enregistré
149 messages
Posté le 21 février 2023 - 08:39
Message précédent un poil confus... DSL
Cà pourrait donner çà

//--- VARIABLES
xChemin_fichier est une chaîne
ResListeFichier est une chaîne
xFICHIER est une chaîne
xNBLIG est un entier
xNBCOL est un entier
IDFichierXLS est un entier
I est un entier
xVar1 est une chaîne
xVar2 est une chaîne
xVar3 est une chaîne
xVar4 est une chaîne
xVar5 est une chaîne
xVar6 est une chaîne
xVar7 est une chaîne
xVar8 est une chaîne
xVar9 est une chaîne
xVar10 est une chaîne
xLigne_Import est une chaîne

//--- AFFECTATIONS
xChemin_fichier = "D:\LOGICIEL CRYSTAL\BASE EN EXCEL\DGI_NORMAL\"

//--- RECUP DES FICHIERS XL dans "D:\LOGICIEL CRYSTAL\BASE EN EXCEL\DGI NORMAL\".
ResListeFichier = fListeFichier(xChemin_fichier+"*.xlsx", frRécursif + frInterruptible)

//--- BOUCLE SUR LES FICHIERS TROUVES
POUR TOUTE chaîne xFICHIER de ResListeFichier SEPAREE PAR RC

//--- RECUP DU NOMBRE DE LIGNES ET DE COLONNES DU FICHIER
IDFichierXLS = xlsOuvre(xFICHIER)
SI IDFichierXLS <> -1 ALORS
xNBCOL = xlsNbColonne(IDFichierXLS)
xNBLIG = xlsNbLigne(IDFichierXLS)
FIN

//--- BOUCLE DE LECTURE DES DONNEES XL
POUR I=1 À xNBLIG

//--- AFFECTATION DES VARIABLES
xVar1 = xlsDonnée(IDFichierXLS, I,1)
xVar2 = xlsDonnée(IDFichierXLS, I,2)
xVar3 = xlsDonnée(IDFichierXLS, I,3)
xVar4 = xlsDonnée(IDFichierXLS, I,4)
xVar5 = xlsDonnée(IDFichierXLS, I,5)
xVar6 = xlsDonnée(IDFichierXLS, I,6)
xVar7 = xlsDonnée(IDFichierXLS, I,7)

//--- CONSTRUCTION DE LA CHAINE A AJOUTER
SI xNBCOL > 7 ALORS
xVar8 = xlsDonnée(IDFichierXLS, I,8)
FIN
SI xNBCOL > 8 ALORS
xVar9 = xlsDonnée(IDFichierXLS, I,9)
xVar10 = xlsDonnée(IDFichierXLS, I,10)
FIN

//--- CONSTRUCTION DE LA CHAINE D'IMPORT
SELON xNBLIG
CAS 7 : xLigne_Import = xVar1+TAB+xVar2+...etc...
CAS 8 : xLigne_Import = xVar1+TAB+xVar2+...etc...
CAS 10 : xLigne_Import = xVar1+TAB+xVar2+...etc...
FIN

//--- AJOUT DES VARIABLES DANS LA TABLE DANS L'ORDRE SOUHAITE
TableAjoute("Table_XLS",xLigne_Import)

FIN
FIN