Copier Valeur Cellule Fichier Fermé - Traitement Lent

Cubensia

XLDnaute Nouveau
Bonjour à tous et merci pour ce forum
Voici quelques année que je trouve inspiration ici et c'est plutôt pratique

Cependant j'ai un cas un peu tordu ( ou pas à vous soumettre )

Je dois compiler dans un fichier des commentaires provenant de fichiers Excel Source.

Mes sources sont déterminées par un onglet d'entrée en utilisant la méthode

"Thefile = _
Application.GetOpenFilename("Excel (*.xls*), *.xls*", _"

Je stocke les chemins de mes sources dans un onglet de paramétrage.

Jusqu'ici tout va bien


Ensuite avec la méthode classique ( hors ADO ) je vais copier une formule pointant de mon fichier source dans mon fichier cible. Un copier coller de valeur et tout est OK
Dans l'ensemble çà fonctionne

Mon soucis vient du temps de traitement

En effet potentiellement j'ai 20 cellules à copier par ligne sur 3 lignes ( minimum ) sur 4 parties de commentaires. ce qui fait pour un fichier source 420 formules à copier .... et ceci je dois le faire sur 5 fichiers sources ( minimum ) et ceci pour 4 onglets ... on arrive à un nombre assez élévé de formules à copier et mes temps de traitements explosent ...

Rien que sur un onglet et pour deux fichiers sources je suis à plus de 5 minutes .. j'ai un peu peur de la suite.


Ainsi je me demande si mon approche de base n'est pas faussée ...et si ADO ne m'apporterait pas meilleure performance, mais mon niveau en vb étant ce qu'il est ( bidouilleur créatif ) j'ai bien peur de me heurter à un mur.

Voici mon bout de code ( le principe de base )


' -= 1 - PARTIE TRAITANT PAR FICHIER SOURCE =-

Do

'-= RECUPERATION DU NOM DE FICHIER AFIN DE GENERER LES FORMULES DANS LES SYNTHESES=-



ligne_dep = 1
nom = PARAM2.Cells(1 + l, 1).Value ' chemin du fichier source
nom_palier = PARAM2.Cells(1 + l, 2).Value
nom_reverse = StrReverse(nom)
nom_len = Len(nom)
test1 = InStr(1, nom_reverse, "!")
test2 = InStr(1, nom_reverse, "\")
nom_part1 = Left(nom, nom_len - test2)
nom_part2 = Right(nom, test2 - 1)

'-= FIN DE RECUPERATION DU NOM DE FICHIER AFIN DE GENERER LES FORMULES DANS LES SYNTHESES=-

Application.ScreenUpdating = False ' -= DESACTIVATION DU RAFRAICHISSEMENT DE L'ECRAN =-

'-= DEBUT DU TRAITEMENT EN LIGNE =-


' DETERMINATION DE LA LIGNE DE DEPART DES PREMIERS COMMENTENTAIRES DANS LE FICHIER SOURCE

Do

PARAM2.Cells(20, 20).Formula = "='" + nom_part1 + "\[" + nom_part2 & "]CA_CONTRIB'!$B$" & ligne_dep
TEST_DEP = PARAM2.Cells(20, 20).Value
ligne_dep = ligne_dep + 1
'ligne_dep_origine = ligne_dep


Loop Until TEST_DEP = "RET"


' FIN DE DETERMINATION DE LA LIGNE DE DEPART DES PREMIERS COMMENTENTAIRES DANS LE FICHIER SOURCE


Do

j = 0 'MISE A 0 DU COMPTEUR EN COLONNE
CAPRO1.Cells(ligne_dep_cible + k, 5).Value = nom_palier '-= POSITIONNENMENT DU NOM DE PALIER 22 ETANT LA LIGNE DE DEPART DANS LE FICHIER CIBLE =-

'-= DEBUT DU TRAITEMENT EN COLONNE =-
Do
colonne = PARAM2.Cells(2 + j, 9) '-= RECUPERATION DU NOM DE LA COLONNE =-

'- CREATION DE LA FORMULE POUR ALLER RECUPERER LES VALEURS DANS LES FICHIERS SOURCES
formula_value = "='" + nom_part1 + "\[" + nom_part2 & "]CA_CONTRIB'!$" & colonne & "$"
Comments = formula_value & ligne_dep
'- FIN DE CREATION DE LA FORMULE POUR ALLER RECUPERER LES VALEURS DANS LES FICHIERS SOURCES

CAPRO1.Cells(ligne_dep_cible + 1 + i, 3 + j).Formula = Comments ' PLACEMENT DE LA FORMULE DANS LA CELLULE DESTINATION
CAPRO1.Cells(ligne_dep_cible + 1 + i, 3 + j).Copy ' COPIE DE LA FORMULE
CAPRO1.Cells(ligne_dep_cible + 1 + i, 3 + j).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False ' COLLAGE EN VALEUR DE LA FORMULE
j = j + 1 ' INCREMENTATION DU COMPTEUR EN COLONNE

Loop Until j = nb_colonne ' CONDITION DE SORTIE
'-=FIN DU TRAITEMENT EN COLONNE =-


ligne_dep = ligne_dep + 1 ' INCREMENTATION DU COMPTEUR DE LIGNE DANS LE FICHIER SOURCE
i = i + 1 ' INCREMENTAION DU COMPTEUR DE LIGNE DANS LE FICHIER CIBLE
CAPRO1.Rows(ligne_dep_cible + m + 2).Insert Shift:=xlDown ' INSERTION D'UNE LIGNE
m = m + 1

Loop Until CAPRO1.Cells(ligne_dep_cible + i, 3).Value <> "RET" ' condition de sortie pour les commentaires part 1
'-= FIN DU TRAITEMENT EN LIGNE =-




k = i ' place le curseur sur la bonne ligne pour place le nom du palier
l = l + 1 ' se deplace de 1 pour voir si un autre fichier de commentaire est chargé

Loop Until PARAM2.Cells(1 + l, 1).Value = "Faux" Or PARAM2.Cells(1 + l, 1).Value = ""

' -= FIN DE PARTIE TRAITANT PAR FICHIER SOURCE =-


Merci de vos réponses éclairés ou pas et sinon merci de m'avoir lu
 

Cubensia

XLDnaute Nouveau
Re : Copier Valeur Cellule Fichier Fermé - Traitement Lent

Bon je crois avoir trouvé
Je crois que je ne vous avais pas décrit l'environnement .... je suis sous Citrix pour l'exploitation de ce fichier - mes fichiers sources étant stockes sur le réseau ...

... du coup çà fonctionne beaucoup moins bien ...

J'ai testé en local sur mon poste je descend en dessous de la minute -

Merci de m'avoir lu
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof