Réduction délai traitement

Y compris Power BI, Power Query et toute autre question en lien avec Excel
T
Tidog117
Jeune membre
Jeune membre
Messages : 20
Inscrit le : 6 décembre 2018
Version d'Excel : 2017

Message par Tidog117 » 22 mai 2019, 14:50

Bonjour,

J'aimerais avoir un coup de main pour réduire le temps de traitement, qui d'ailleurs fait planter mon pc à un moment donné, de mon programme ci dessous.

L'objectif de ce programme est de comparer 2 fichiers excel. Le premier, WBA, est le fichier que j'utilise et dans lequel j'ai un certains nombre de lignes (le nombre de colonnes est fixe pour les 2 fichiers). Dans une colonne je rempli des commentaires.
Le 2em fichie, WBB, est un fichier extrait d'un logiciel qui est la version à jour du premier document hormis qu'il ne contient pas de commentaire. Je dois donc, au travers d'une macro comparer les 2 fichiers ligne par ligne pour vérifier s'il y en a de nouvelles. Le cas échéant insérer une ligne et copier la ligne de WBB vers WBA. Si pas de copie on ne touche pas à la ligne pour garder les commentaires.

Je ne trouve pas le moyen de faire quelque chose de rapide...

Sub MAJ()
Application.Calculation = xlCalculationManual
Dim WBB As Workbook 'fichier servant pour la mise a jour
Dim WBA As Workbook 'fichier à mettre à jour
Dim wsb As Worksheet
Dim wsa As Worksheet

Dim compteura
Dim compteurb

Dim derlig As Long

'Application.ScreenUpdating = False

Workbooks.Open Filename:="C:\Users\Jeremy.Caseteuble\Desktop\EDV\Nouveau.xlsx"
'indexation des fichiers et des feuilles
Set WBB = Workbooks("Nouveau.xlsx")
Set WBA = Workbooks("Extractiondutableaudesprojetstest.xlsm")
Set wsb = WBB.Worksheets("Extractiondutableaudesprojetste")
Set wsa = WBA.Worksheets("Extractiondutableaudesprojetste")
Set WBA = ActiveWorkbook
wsa.Activate

'derniere ligne plage de donnéeWBB.wsb.Activate
derlig = wsb.Range("A" & Rows.Count).End(xlUp).Row
'MsgBox (derlig)
compteura = 8
compteurb = 8

Do While compteurb <= derlig

If wsa.Cells(compteura, 9) <> wsb.Cells(compteurb, 9) Then
'wsa.Cells(compteura, 1).Select
'MsgBox ("selection")
wsa.Cells(compteura, 1).Insert Shift:=xlDown
'MsgBox ("insertion")
wsb.Range("A" & compteura & ":AE" & compteura).Copy
'MsgBox ("copy")
wsa.Cells(compteura, 1).EntireRow.PasteSpecial
'MsgBox ("colle")
compteura = compteura + 1
compteurb = compteurb + 1
'MsgBox (compteura & " " & compteurb)
Else
compteura = compteura + 1
compteurb = compteurb + 1
'MsgBox ("else" & compteura & " " & compteurb)
End If
Loop
Application.Calculation = xlCalculationAutomatic
'Application.ScreenUpdating = True
End Sub
Avatar du membre
galopin01
Passionné d'Excel
Passionné d'Excel
Messages : 5'922
Appréciations reçues : 100
Inscrit le : 18 septembre 2008
Version d'Excel : 2016
Téléchargements : Mes applications

Message par galopin01 » 22 mai 2019, 15:53

Bonjour,
La macro est-elle dans le WbA ?
Il serait bon de fournir un fichier Source Test (au moins quelques lignes)
On n'est obligé d'avoir envie de créer des fichiers bidons avec des noms à rallonge alors que toi tu a ça tout cuit sur ton bureau.
A+
Ici c'est un forum Excel/VBA pas Photoshop :
Quand vous amenez votre voiture au garagiste vous lui donnez pas juste la photo ?
T
Tidog117
Jeune membre
Jeune membre
Messages : 20
Inscrit le : 6 décembre 2018
Version d'Excel : 2017

Message par Tidog117 » 22 mai 2019, 16:07

Je ne peux pas envoyer le contenu par soucis de confidentialité, il faut imaginer qu'il y a environ 4000 lignes, et que ce chiffre augmentera avec le temps
Extractiondutableaudesprojetstest.xlsm
(465.16 Kio) Téléchargé 2 fois
Avatar du membre
galopin01
Passionné d'Excel
Passionné d'Excel
Messages : 5'922
Appréciations reçues : 100
Inscrit le : 18 septembre 2008
Version d'Excel : 2016
Téléchargements : Mes applications

Message par galopin01 » 22 mai 2019, 16:35

Bonjour,
Bon de toute façon il faut te dire qu'on n'obtiendra pas un gain conséquent avec ta méthode qui est très chronophage. ::o
Normalement on ne compare pas 2 plages mais 2 Array ce qui est au moins 20 fois plus rapide que de comparer les feuilles. Ensuite on n'insère pas de ligne, on rajoute les infos manquantes dans l'Array cible (à la fin) et quand c'est fini on colle toussa à la place de prévu puis on trie...
Après il faut qu'on discute... Parce que s'il y a des formules dans le classeur cible, ça peut éventuellement poser problème. Mais il n'y a pas de problème qui n'aient pas de solution.
C'est pourquoi un petit Fichier Source et un petit Fichier Cible Test serait pas de refus... Pas besoin de 25000 lignes hein ! 2 ou 3 suffisent pour se faire une idée de la problématique...
(Des données bidon hein !) L'entête du tableau ou le n° de Compte chèque de l'entreprise on s'en fout...
A+
Ici c'est un forum Excel/VBA pas Photoshop :
Quand vous amenez votre voiture au garagiste vous lui donnez pas juste la photo ?
T
Tidog117
Jeune membre
Jeune membre
Messages : 20
Inscrit le : 6 décembre 2018
Version d'Excel : 2017

Message par Tidog117 » 22 mai 2019, 16:47

J'ai appris le vba sur le tas donc je me doute qu'il y a de meilleures méthodes, cest pour cela que je demande de l'aide. :)
Sinon pour les fichiers, dans mon message précédent j'ai fourni le fichier mais sans les lignes, il suffit juste de mettre un caractère dans quelques lignes pour faire un essai, je ne peux pas fournir les données originelles.
Il faut aussi copier le fichier et renommer la copie"Nouveau.xlsx" et on peut lancer le test.

J'essai une autre méthode actuellement mais j'y passe un temps fou
Avatar du membre
galopin01
Passionné d'Excel
Passionné d'Excel
Messages : 5'922
Appréciations reçues : 100
Inscrit le : 18 septembre 2008
Version d'Excel : 2016
Téléchargements : Mes applications

Message par galopin01 » 22 mai 2019, 16:59

galopin01 a écrit :
22 mai 2019, 16:35

(Des données bidon hein !) L'entête du tableau ou le n° de Compte chèque de l'entreprise on s'en fout...
Si tu veux tirer un minimum de profit du forum il va falloir que tu y mettes du tien. Des données absurdes du genre titi, toto, tata, tutu, caca, popo... ne serviraient à rien : Il faut des données qui pour bidon qu'elles soient restent vraisemblable. Afin d'adapter le code aux données. En VBA pas d'égalité qui tienne. Si toto est un nom, tata une date, tutu un N° d'ordre et autres joyeuseté comment tu veux qu'on s'y retrouve les yeux bandés ?
Le forum ne fonctionne pas avec des boules de cristal. Et si tu regardes un certain nombre de sujets sur différents forum tu verras que la plupart des habitués proposent des fichiers qui parlent plus ou moins de leur profession, sans pour autant divulguer de secrets même s'ils travaillent dans des banques ou des centrales nucléaires...
Enfin c'est toi qui voit.
A+
Ici c'est un forum Excel/VBA pas Photoshop :
Quand vous amenez votre voiture au garagiste vous lui donnez pas juste la photo ?
T
Tidog117
Jeune membre
Jeune membre
Messages : 20
Inscrit le : 6 décembre 2018
Version d'Excel : 2017

Message par Tidog117 » 22 mai 2019, 17:05

Ce n'est pas la première fois que je vais sur un forum. Je vais essayer de faire un fichier test demain, j'ai d'ailleurs oublié de précisé que les seules cases qui m'intéressent pour la comparaison sont dans la colonne 9. En gros c'est la seule variable le reste on s'en fou un peu puisque la ligne sera copié. Mais si tu veux des données bidons pour que ce soit visuelle pas de soucis je fais ça dès que possible.
Avatar du membre
galopin01
Passionné d'Excel
Passionné d'Excel
Messages : 5'922
Appréciations reçues : 100
Inscrit le : 18 septembre 2008
Version d'Excel : 2016
Téléchargements : Mes applications

Message par galopin01 » 22 mai 2019, 17:41

Je veux aussi et surtout que tu répondes aux questions suivantes :
- La macro est-elle dans le WbA ? (ou dans un classeur tiers, macro complémentaire etc...)
- Au lieu d'insérer les lignes manquantes peut-on les rajouter à la fin puis trier ?
- S'il y a des formules dans le classeur cible il faut les faire apparaitre. (pour vérifier si elles permettent le tri)
A+
Ici c'est un forum Excel/VBA pas Photoshop :
Quand vous amenez votre voiture au garagiste vous lui donnez pas juste la photo ?
T
Tidog117
Jeune membre
Jeune membre
Messages : 20
Inscrit le : 6 décembre 2018
Version d'Excel : 2017

Message par Tidog117 » 23 mai 2019, 10:14

galopin01 a écrit :
22 mai 2019, 17:41
Je veux aussi et surtout que tu répondes aux questions suivantes :
- La macro est-elle dans le WbA ? (ou dans un classeur tiers, macro complémentaire etc...)
La macro est dans le module 1 de mon fichier, je ne sais pas ce qu'est le wba.
galopin01 a écrit :
22 mai 2019, 17:41
- Au lieu d'insérer les lignes manquantes peut-on les rajouter à la fin puis trier ?
Cela ne me dérangerait pas. Je suppose que l'on peut mais cela me paraissait trop compliqué à coder.
galopin01 a écrit :
22 mai 2019, 17:41
- S'il y a des formules dans le classeur cible il faut les faire apparaitre. (pour vérifier si elles permettent le tri)
Il n'y a pas de formule dans les classeurs, uniquement du contenu texte/chiffres.

J'ai préparé les fichiers comme convenu, celui s'appelant "Extractiondutableaudesprojetstest.xlsm" est le fichier de travail ou l'on va remplir les cases de la colonne AE (en rouge) et qui doivent être conservé à chaque mise à jour.
La mise à jour (macro) doit permettre d'ajouter les lignes provenant du fichier "Nouveau.xlsx" qui manquent au fichier de travail.
En jaune les données, en orange les lignes ajoutés dans le fichier "Nouveau.xlsx".
La colonne N° de sous projet me sert à faire la comparaison entre les 2 fichiers. Quand le N° de sous projet n'existe pas dans le fichier de travail mais qu'il est présent dans la MAJ, la ligne doit être copier dans le fichier de travail.

J'ai essayé d'être clair et de fournir tout ce que je pouvais, n'hésite pas à me dire si il manque des infos.

Cdlt
Extractiondutableaudesprojetstest.xlsm
(522.79 Kio) Téléchargé 3 fois
Nouveau.xlsx
(522.74 Kio) Téléchargé 1 fois
Avatar du membre
galopin01
Passionné d'Excel
Passionné d'Excel
Messages : 5'922
Appréciations reçues : 100
Inscrit le : 18 septembre 2008
Version d'Excel : 2016
Téléchargements : Mes applications

Message par galopin01 » 23 mai 2019, 13:10

Bonjour,

J'ai travaillé une partie de la matinée sur ce projet et je vais devoir m'interrompre : Je ne pourrai reprendre qu'en fin d'après midi. Mais d'ors et déjà j'ai une mauvaise nouvelle : Ton projet ne comporte aucun index. Pire la colonne A comporte de nombreux doublons ! Ça veux dire qu'on ne peut faire que comme tu as fais.
Comparer ligne par ligne et insérer au fur à mesure...
Je ferai certainement quelques retouches mais ça sera purement cosmétique. Si tu ne me déniches pas une colonne indexable sans doublon, pas grand chose à espérer en terme d'optimisation.

A+
Ici c'est un forum Excel/VBA pas Photoshop :
Quand vous amenez votre voiture au garagiste vous lui donnez pas juste la photo ?
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message