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 » 23 mai 2019, 14:12

Tout d'abord merci pour le temps accordé.
Oui exact c'est ce qui me pose problème, ce fichier provient d'une extraction d'un logiciel dont je ne peux pas modifier le contenu. Donc je ne peux pas, actuellement, ajouter une colonne index c'est pour cela que je me suis tourné vers ce programme.
Avec 4134 lignes j'arrive à faire le "tri" en à peu près 3-4 minutes, ce n'est pas parfait mais comme c'est une opération hebdomadaire ce n'est pas la fin du monde... J'aurais aimé raccourcir ce délai autant que possible surtout car ce fichier ne fera que grossir et je ne veux pas devoir tout recommencer dans quelques mois.

PS: Cela fonctionne mais je ne sais pas pourquoi j'ai des lignes ne contenant que la première colonne (les dates) qui s'ajoutent, comment ne plus les avoir?
Avatar du membre
galopin01
Passionné d'Excel
Passionné d'Excel
Messages : 6'014
Appréciations reçues : 105
Inscrit le : 18 septembre 2008
Version d'Excel : 2016
Téléchargements : Mes applications

Message par galopin01 » 23 mai 2019, 16:21

Je vais gratter dessus ce soir et je te dis.
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, 16:45

Ok super merci!
Avatar du membre
galopin01
Passionné d'Excel
Passionné d'Excel
Messages : 6'014
Appréciations reçues : 105
Inscrit le : 18 septembre 2008
Version d'Excel : 2016
Téléchargements : Mes applications

Message par galopin01 » 23 mai 2019, 19:25

Bon finalement ça me semble moins pire que je ne pensais à première vue.
En effet j'avais regardé et lu un peu rapidement mais en fait ta macro n'a pas besoin d'insérer : Elle ne fait qu'AJOUTER des lignes. à l'existant.
Aussi c'est très simple. YAKA remplacer ta macro par celle-cj :
Sub MAJ()
Dim WbS As Workbook 'fichier servant pour la mise a jour "Source"
Dim WbC As Workbook 'fichier à mettre à jour "Cible"
Dim WsS As Worksheet
Dim WsC As Worksheet 'feuilleCible

Dim ArrS, ArrC, iR&, iC%, iLRC&, iLRS&, rng As Range

Application.ScreenUpdating = False

Workbooks.Open Filename:="C:\Users\Jeremy.Caseteuble\Desktop\EDV\Nouveau.xlsx"
'instanciation des fichiers et des feuilles et des variables Array
Set WbS = Workbooks("Nouveau.xlsx")
Set WbC = ThisWorkbook
Set WsS = WbS.Worksheets("Extractiondutableaudesprojetste")
Set WsC = WbC.Worksheets("Extractiondutableaudesprojetste")

'WbS est le classeur actif
With WsS
   iLRS = .Range("A" & .Rows.Count).End(xlUp).Row
   Set rng = .Range("A8:AE" & iLRS) 'Tableau source
End With
ArrS = rng.Value
With WsC
   iLRC = .Range("A" & .Rows.Count).End(xlUp).Row
   Set rng = Range("A8:AE" & iLRS) 'La cible doit être dimensionnée comme la source
End With
ArrC = rng.Value
iC = 31 'Le nombre de colonnes est 31
For iR = LBound(ArrS) To UBound(ArrS)  'On parcourt toute les lignes du tableau source
   If Not ArrS(iR, 9) = ArrC(iR, 9) Then  'Si l'une d'elle est différente...
      iLRC = iLRC + 1                     'Alors on la recopie dans le tableau cible
      For iC = 1 To 31                    'de la première colonne à la dernière
         ArrC(iLRC, iC) = ArrS(iR, iC)
      Next
   End If
Next
Range("A8:AE" & iLRS) = ArrC        'A la fin on recopie le tableau complété dans le classeur cible
WbS.Close  SaveChanges:=False 'Et on ferme le classeur source
End Sub
Bon c'est pas très optimisé, on pourrait encore faire mieux (pas besoin de parcourir les premières lignes, on pourrait commencer directement par les dernières...) mais comme ça ne prend que quelques secondes je pense que ça suffira amplement.
S'agissant d'ajouts, il n'y a même pas besoin de trier puisque ça s'inscrit dans l'ordre...
Tu me diras.
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 » 24 mai 2019, 09:23

Merci, cela me semble parfaitement adapté! Cependant j'ai copié le code dans mon fichier mais il ne se passe absolument rien, hormis l'ouverture et la fermeture du fichier source, une idée?
Avatar du membre
galopin01
Passionné d'Excel
Passionné d'Excel
Messages : 6'014
Appréciations reçues : 105
Inscrit le : 18 septembre 2008
Version d'Excel : 2016
Téléchargements : Mes applications

Message par galopin01 » 24 mai 2019, 10:04

Pas de message d'erreur... RAS ?

Dans ton fichier source (le fichier que tu avais joint) j'ai du renommer la feuille car elle s'appelait "Feuil1"
Bon moi je peux pas deviner... Si les classeurs ne comportent qu'une feuille tu peux écrire Worksheets(1) à la place du nom à rallonge...

Je te donne mon fichier de test...

A+
Extractiondutableaudesprojetstest VG.xlsm
(550.48 Kio) Téléchargé 3 fois
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 » 24 mai 2019, 10:29

Nan aucun message d'erreur cela ne fait qu'ouvrir puis fermer le fichier source.
J'ai bien sûr vérifié le nom des fichiers ainsi que des feuilles mais RAS.
J'ai aussi fais le test avec le fichier que tu m'a envoyé et il ne se passe rien de plus.
Chez toi cela fonctionne?
T
Tidog117
Jeune membre
Jeune membre
Messages : 20
Inscrit le : 6 décembre 2018
Version d'Excel : 2017

Message par Tidog117 » 24 mai 2019, 10:45

J'ai mis des Msgbox dans chaque boucle, elles s'executent toutes a priori mais il n'y a rien dans le fichier cible.

Je me trompe peut -être mais il me semble qu'il manque l'instruction de copier coller la ligne?

For iR = LBound(ArrS) To UBound(ArrS) 'On parcourt toute les lignes du tableau source
If Not ArrS(iR, 9) = ArrC(iR, 9) Then 'Si l'une d'elle est différente...
iLRC = iLRC + 1 'Alors on la recopie dans le tableau cible
Avatar du membre
galopin01
Passionné d'Excel
Passionné d'Excel
Messages : 6'014
Appréciations reçues : 105
Inscrit le : 18 septembre 2008
Version d'Excel : 2016
Téléchargements : Mes applications

Message par galopin01 » 24 mai 2019, 12:43

Pfff... Sorry !
Modifie cette ligne :
WsC.Range("A8:AE" & iLRS) = ArrC 'A la fin...
Autre possibilité : Intervertir les 2 dernières lignes :
...
WbS.Close SaveChanges:=False        'on ferme le classeur source
Range("A8:AE" & iLRS) = ArrC        'Et on recopie le tableau complété dans le classeur cible
End Sub
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 » 27 mai 2019, 09:19

En modifiant la ligne cela effectue bien la copie du tableau, cependant il y a un soucis majeur c'est que cela ne garde pas les commentaires (dates) de la colonne AE. J'ai modifié le code pour que la copie s'arrète en AD mais cela ne décale pas les commentaires quand des lignes sont ajoutés
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message