temps d'éxécution différent entre excel 2010 et 2007

loureed

XLDnaute Junior
Bonjour à tous,

une petite question : j'ai une application avec macro sous excel 2007.
Une des macros fait un ajout de ligne + trie alphabétique sur 200 feuilles.

Sous excel 2007 elle met environ 12 secondes, mais sous excel 2010 elle met presque 3 minutes !

A quoi cela peut-il être du ?

Je ne me suis pas penché sur les ordis, mais ils sont récents tous les deux.

2010 a-t-il des fonctions de "contrôle" qui tournent en arrière plan ?

Merci de votre réponse

A bientôt

Loureed
 

Staple1600

XLDnaute Barbatruc
Re : temps d'éxécution différent entre excel 2010 et 2007

Re

Merci pour le fichier et mes amitiés à l'adjudant Jou***nd
(Heureusement que la charte stipule d'anonymiser les fichiers exemples ;)
(Pour un fichier exemple allgé, j'oserai dire qu'il y a encore un léger surpoids ;))

Et je vais de ce pas tester tes codes.

EDITION:
1) Personnellement je commencerai par modifier les variables déclarées As Integer en As Long

Tu peux tester si cela change quelque chose ?

2) Target est un mot réservé part VBA
Sub mise_a_jour_affichage(target)
Je suggère de le renommer dans ta procédure en vTarget
donc faire les modfis nécessaires dans toute la procédure
(et je la déclarerai As Range)
Sub mise_a_jour_affichage(vTarget As Range)
 
Dernière édition:

loureed

XLDnaute Junior
Re : temps d'éxécution différent entre excel 2010 et 2007

target est VBA c'est ok et c'est normal, sur chaque feuille personnel un contrôle événementiel "change" avec target puis call "mise a jour" avec target en argument, afin d'éviter d'avoir 200 fiches à modifier si je décide de modifier le code...

J'ai mis "integer" car le nombre de feuille de ligne de colonne ne dépasseront pas 32000 et des poussières, est-ce que integer est plus lourd à gérer que que le "long" ?

le recherche de valeur "directe" avec les crochets est-ce plus lourd que le faite de mettre les valeurs dans une variables en début de code ?

Mais le hic c'est la "copie-insert/colle" de ligne lors de l'ajout d'opération qui coince, si peu sur un classeur de 6 personnel, mais avec 178 tout de suite ça ce voit...
 

loureed

XLDnaute Junior
Re : temps d'éxécution différent entre excel 2010 et 2007

Le soucis Excel 2010 au boulot et moi j'ai excel 2007 et le fait de mettre Long à la place de Integer, l'ajout d'opération dure environ 10 secondes, comme avant. Mais je ne peux tester sur 2010 !

Et pour le target, c'est bien celui de VBA que j'utilise
 

Staple1600

XLDnaute Barbatruc
Re : temps d'éxécution différent entre excel 2010 et 2007

Re

Je suis pas d'accord avec ta syntaxe concernant Target (qui est un mot réservé par VBA)
(d'ou ma modif, car ta variable target (que j'ai remplacée par vTarget) n'était pas déclarée as Range)
Je trouverai plus orthodoxe de faire et je te laisse tester ces modifs.
Mettre dans ThisWorkBook
(et donc supprimer les procédures événementielles dans toutes les feuilles
Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
nom_feuille = Sh.Name
End Sub

Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Call mise_a_jour_affichage(Sh.Target)
End Sub

Et modifier ta procédure ainsi dans ton Module1
Code:
Sub mise_a_jour_affichage(vTarget As Range)
With Application
    .ScreenUpdating = False
    .EnableEvents = False
    .Calculation = xlManual
End With
If Not Intersect(vTarget, Range("E1:M1")) Is Nothing Then
    ActiveSheet.Calculate
    ' on sélectionne toutes les lignes et on montre
    Range(Cells([décalage] + 1, [décalage] + 1), Cells([nb_opérations] + [décalage] + 2, [nb_opérations] + [décalage] + 2)).EntireRow.Hidden = False
    ' on boucle toutes les lignes qui contiennes des opérations
    Range("AB" & [décalage] + 2 & ":AB" & [nb_opérations] + [décalage] + 1).Value = Range("W" & [décalage] + 2 & ":W" & [nb_opérations] + [décalage] + 1).Value
    Range("AB" & [décalage] + 2 & ":AB" & [nb_opérations] + [décalage] + 1).SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
End If
'ici je trouve ton If pour le moins bizarre, non ??
If Not Intersect(vTarget, Range("E4:M4")) Is Nothing Then
    If vTarget.Value = "Unique" Then
        Range("E4:M4").Value = ""
        vTarget.Value = "Unique"
    Else
        Range("E4:M4").Value = ""
    End If
    ActiveSheet.Calculate
    ' on sélectionne toutes les lignes et on montre
    Range(Cells([décalage] + 1, [décalage] + 1), Cells([nb_opérations] + [décalage] + 2, [nb_opérations] + [décalage] + 2)).EntireRow.Hidden = False
    ' on boucle toutes les lignes qui contiennes des opérations
    Range("AB" & [décalage] + 2 & ":AB" & [nb_opérations] + [décalage] + 1).Value = Range("W" & [décalage] + 2 & ":W" & [nb_opérations] + [décalage] + 1).Value
    Range("AB" & [décalage] + 2 & ":AB" & [nb_opérations] + [décalage] + 1).SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
    
End If
With Application
    .ScreenUpdating = True
    .EnableEvents = True
    .Calculation = xlAutomatic
End With
End Sub
 
Dernière édition:

loureed

XLDnaute Junior
Re : temps d'éxécution différent entre excel 2010 et 2007

au fait il n'y a pas de private message ? car je n'avais pas mis à jour internet explorer et je n'avais pas vue votre réponse...
Les grands esprist se rencontre ;-)
 

loureed

XLDnaute Junior
Re : temps d'éxécution différent entre excel 2010 et 2007

Une réponse quant au "if un peu bizard" :
Si on met "unique" sur une qualification pour une personne, cela inhibe les autres, et si on retourne à l'accueil, alors les qualifications inhibées n'apparaissent plus, donc lorsque l'on quitte la feuille personnel, je supprime l'éventuel "unique" affiché.

Deuxième effet : il ne peut y avoir qu'un seul unique affiché, donc lors d'une sélection d'un deuxième unique on efface l'autre...
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 509
Messages
2 089 145
Membres
104 050
dernier inscrit
Pepito93100