Optimiser temps d'execusion

Bonjour,

Je travail sur un classeur qui fait contenant des macros et des tableaux issue de PQ d'autres fichiers.

Tous va bien sauf qu'une macro qui sert à ajouter une colonne (copier d'une colonne type ) mets beaucoup de temps. Sur la feuille y abeaucoup de ligne vide que j'essaie de supprimer mais ça marche pas :/

La colonne copiée contient des formules et ça commence un mettre un peu de temps sachant que manuellement c'est beaucoup plus rapide.

Je sais pas si je dois revoir ma macro ou s'il y a quelque chose à changer dans excel pour que ça s’exécute plus rapidement,

Merci d'avance pour vos réponses,

Excelement,

Bonjour,

Si ça va plus vite à la main, c'est que soit votre macro doit être longue à s'exécuter. Pouvons-nous voir le fichier et la macro?

Cindy

bonjour,

voici le code de la macro :

Sub Add_Week()

Application.ScreenUpdating = False
Cells.Select
Selection.EntireColumn.Hidden = False

Dim j As Integer
Sheets("Planning_General").Activate

'j l'indice de la colonne
j = 11
While Cells(4, j + 1) <> ""
    j = j + 1
Wend

Columns(j + 1).Insert
Columns(j + 1).ColumnWidth = Columns(11).ColumnWidth
Columns(11).Copy
Columns(j + 1).Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False

'------------------------Numero semaines et année----------------------------------------
Cells(4, j + 1).Value = (Cells(4, j).Value Mod 52) + 1
'l'année au dessus du mois pour faciliter le reperage
Cells(3, j + 1).Value = Cells(3, j)
'si semaine = 52 , année du mois suivant est incrementée de 1 (nouvelle année)
If Cells(4, j + 1).Value = 1 Then Cells(3, j + 1).Value = Cells(3, j + 1) + 1

'-----------------------------Copier formule de distribution de charge-----------------------------------

der_lin = Range("K5").End(xlDown).Row
For i = 5 To der_lin
    Cells(i, 11).Select
    Selection.AutoFill Destination:=Range(Cells(i, 11), Cells(i, j + 1))
Next

'-----------------------------Cacher colonnes obsolète-------------------------
'cacher les années precedentes ou ne montrer que les 26 dernieres semaines

If Range("k4").Offset(0, 26) <> "" Then
'On vérifie que la cellule k4 decaler de 26 semaines n'est pas vide, i.e que l'on possède plus de 52 semaines
der_col = Range("K4").End(xlToRight).Column
Range("K4", Cells(4, der_col - 26).Address).Select
    Selection.EntireColumn.Hidden = True
End If
Application.ScreenUpdating = True
End Sub

La barre de défilement verticale est trop long et je supprime les lignes vides, la macro est légèrement plus rapide mais si je re-exécute la macro , la barre redevient trop long et aussi l’exécution.

Sans les formules et sans la connexion externe, elle s’exécute instantanément mais maintenant elle devient un peu lente.

Sinon y a t-il pas une méthode pour réajuster la barre de défilement verticale à la fin de l’exécution de la macro de t-elle manière à n'avoir que les 1000 lignes remplie au lien de 1 million et quelques de lignes.

Merci d'avance,

Exelement ,

Bonjour,

On ne peut vraiment pas dire que ce soit le moins du monde optimisé !

De plus, ta numérotation des semaines est pour le moins curieuse, tu fais quoi de la semaine 53 ? Il y a une semaine 53 tous les 5 ou 6 ans !

Je veux bien réécrire ton code, mais il conviendrait que tu fournisses le fichier qui va avec, il y a un certain nombre d'éléments que je voudrais vérifier pour faire quelque chose de cohérent.

Cordialement.

Bonjour,

Merci de joindre un fichier à ta demande !...

Cdlt.

bonjour,

Je reformule ma question, je me suis rendu compte qu'en supprimant les lignes vides le temps s’améliore légèrement, je cherche à insérer à la fin de la macro une commande pour délimiter la zone de défilement.

Chaque colonne à partir de k correspond à une semaine, est chaque case contient un résultat de calcul d'une formule, les données sont issue d'un autre classeurs par une liaison externe.

Je peux pas joindre tout le fichier, et en le simplifiant j'ai plus ce problème donc si vous arriver à me comprendre

Excelement,

Pour ma part, je ne travaillerai pas sans fichier qui me permette d'évaluer ta configuration des données. De plus tu ignores les questions soulevées...

Bonne continuation.

Rebonjour,

Voila un peu prés à quoi ressemble mon fichier.

Les données dans la première feuille sont issu d'une requête PQ (liaison externe dans un autre classeur).

Le fichier fait un peu près 1000 lignes.

Dans cet exemple l'ajout est instantané et la barre de défilement verticale est adaptée. Dans l'autre après ajout la feuille contient tout les lignes vide après mes 1000 lignes, j'ai ajouter une partie pour les effacer mais ça marche pas, même manuellement elle marche pas.

Franchement je sais pas d'ou vient le problème

Même si vous voyer rien dans le fichier mais que vous voyer une amélioration pour le code je suis preneur, toute amélioration est la bienvenue

Excelement,

Re,

Il faudrait qu'on comprenne ce qu'on ne peut voir dans ce fichier. Ton histoire de ScrollBar verticale adaptée : si on descend, on s'arrête pile à la ligne 129, dernière ligne utilisée, j'interprète que c'est la raison pour laquelle tu la qualifies d'adaptée (?). J'en déduis donc que ta manoeuvre d'import t'introduis un lot de lignes vides à la suite de la zone utile ?

Est-ce le cas ?

Il faudrait savoir pourquoi alors ?

On peut certes détruire les lignes inutiles mais c'est toujours intriguant de ne pas déceler l'origine.

Re,

Je vais essayer l’élaborer un exemple avec les importations et tout les macro qui vont avec et je reviens vers vous

Cordialement,

D'accord !

La partie importée couvre quelles colonnes ?

Et est-ce qu'elle s'ajoute à ton tableau existant ?

edit poiur précision : parce que je verrais bien la suppression des formules :

1) ta formule en G est inutilement compliquée : =ARRONDI.SUP((I7-H7+1)/7;0) fournirait le même résultat

2) ta date début me semble être systématiquement un lundi, et ta date de fin un vendredi, si c'est bien le cas, tu distribues ta charge sur un nombre de semaines entières (nonobstant les fériés...), en arrondissant la charge distribuée par semaine au supérieur, la somme sera supérieure au total en F : est-ce volontaire de ne pas ajuster la dernière semaine de charge pour que la somme égale le total en F ?

3) si des lignes sont ajoutées lorsque tu planifies de nouvelles opérations, je verrais bien que l'on ne traite que les lignes ajoutées : le nb de semaines en G serait inséré sans formule, l'extension du planning à droite se ferait sur la date de fin si celle-ci est encore hors planning (insertion du nb de semaines nécessaires) et les semaines de la date de début à la date de fin seraient immédiatement servies avec les charges distribuées (élimination des formules).

Bonjour, MFerrand

Merci pour vos remarques

Voici le fichier d'exemple, bizarrement la macro s’exécute instantanément et ne crée pas des lignes vides après mes 1000 lignes .

J'ai mis un exemple, le fichier originale contient exactement la même feuille et même macro.

1) la formule en G je l'ai changer, je veux m'approcher au plus à des nombre entier, je l'ai remplacer par arrondi.aumultiple.

2) La charge totale doit être le plus proche de la charge donnée, c'est pas volontaire d'avoir plus c'est juste que j'ai pas su faire

Les dates de début et de fin sont issues d'un autre classeurs rempli par une autre personne, je reprend ses données donc je sais pas si les férié sont pris en compte ou pas, ou si les début sont des lundis.

3) lorsque des lignes sont ajoutées dans la source, je réactualise (bouton mise à jour) et ça les ajoute dans ma feuille.

Dans l'extrait ci-joint tout semble marché, peut être je vais changer de classeurs et le reconstruire à nouveau, ça fait plus de 2 mois que je travail sur le même fichier et que j'essaie des trucs.

Espérant que c'est plus claire

Je ne suis pas sûr de suivre complètement le fil...

Si je regarde ta macro d'autoremplissage, tu rafraîchis tes données externes. Je suppose que c'est Feuil1 qui s'actualise ?

PQ_Prod c'est quoi ? Je ne le vois qu'en commentaire.

Tu évalues ensuite le nombre de lignes, je suppose sur Feuil1 ?

Si c'est le cas :

[En_cours_production].Rows.Count

pouvait te le fournir exactement immédiatement (nb de lignes de données, en-tête exclue).

Ensuite tu passes sur Planning_General :

si par exemple n est ton nombre de lignes de données, ta plage destinataire de l'AutoFill se définissait

....Range("A5").Resize(n, 4)

(plus facile de redimensionner à partir de la première cellule).

Mais avec ton AutoFill sur A:D et G:K, tu étends en fait des formules, qui conduisent à substituer le contenu de Feuil1 aux données préexistantes du Planning.

C'est là que je décroches, car ton premier modèle fourni présentait une mise en forme différente de cette feuille, et sans formules (hormis G et K).

Avec cette méthode, effectivement, tes formules en G et en K et suivantes assureront la mise à jour, mais te laisseront une feuille bourrée de formules.

Par contre, je ne vois pas là de raison à générer des lignes supplémentaires parasites.

Re MFerrand,

Merci pour vos retours.

Je vais tenir compte de vos remarques . Les lignes parasites j'ai réglé le problème c'est le fichier de base qui est louche, j'ai reconstruit le même fichier et ça marche normalement. Je suis débutant en VBA, mon code n'est pas forcement mais je vais l’améliorer avec vos commandes suggérées.

Merci pour le temps que vous avez pris pour résoudre mon problème

Exelement ,

Rechercher des sujets similaires à "optimiser temps execusion"