Vous n'êtes pas identifié(e).

  • Contributions :
  • Vos boîtes de messages privés sont vides.

🟣 Macro Excel, performance


#1 2015-06-10 06:39:16

Mention Mitsu
🥉 Grade : Scout

AuxiliaireIngénieur webStratège1000 messagesMembre Hospitalier
Inscription : 2014-11-17
Messages : 2 012
Likes : 8

Développement PHP
Développement JS
Audit et Analyse
Netlinking
Site Web

Macro Excel, performance

Bonjour,

J'ai pas bien l'habitude des macro sur Excel, j'en ai fait une petite très simple et ça me pose un gros problème de performance, alors si certain d'entre vous peuvent m'aider là dessus.

Bon j'ai un fichier excel de 7 000 lignes d'urls sur une première colonne, sur la seconde j'ai le h1 correspondant à chaque url.
Sur une 3ème colonne mon besoin était de récupérer les x premiers mots du h1. J'ai fait une fonction xWords que voici :


Function STR_SPLIT(str, sep, n) As String
    Dim V() As String
    V = Split(str, sep)
    NbOccur = UBound(V) + 1
    If NbOccur < n Then
        STR_SPLIT = ""
    Else
        STR_SPLIT = V(n - 1)
    End If
   
End Function

Function xWords(c, n) As String
    Retour = ""
    For i = 1 To n
        If i > 1 Then Retour = Retour + " "
        Retour = Retour + STR_SPLIT(c, " ", i)
    Next
   
    xWords = Trim(Retour)
End Function
 

C'est pas un calcul bien compliqué, et bref ça marche niquel.

Le problème c'est que ça met beaucoup de temps à calculer, normal, il y a 7 000 lignes. Cela dit si je fais des opération avec des formule excel native type "SUBSTITUE, NBCAR..." le résultat est instantanné, il n'y a pas moyen d'arriver au même genre de perf avec des fonction aussi simple ?

Le second problème, est que dès lors que je fait un tri sur une de mes colonnes pour change l'alignement de chaque ligne, il me recalcule toute la colonne des xWords, donc à la moindre opération sur mon tableau, j'attend que ça charge, c'est plutôt chiant. Il n'y a pas moyen quitte à ne pas pouvoir améliorer les perf des macro, de dire à excel de ne pas recalculer toutes mes ligne dès lors que je change le tri ou que je met un filtre ? D'ailleurs sur les fonction native j'ai pas l'impression qu'il s'amuse à tout recalculer.

La seul solution viable que je trouve pour le moment c'est de recopié en brut le retour de mes formule une fois que je les ai génerer pour faire des tri sur des valeur brut ensuite mais c'est dommage de perdre mes formules je trouve...

Il doit y avoir un truc à faire, sinon je me dit que ceux qui travaille sur des plus gros fichier avec plusieurs macro doivent péter un cable !

0
J'aime ❤️

🔴 Hors ligne

#2 2015-06-10 06:57:31

Mention Mitsu
🥉 Grade : Scout

AuxiliaireIngénieur webStratège1000 messagesMembre Hospitalier
Inscription : 2014-11-17
Messages : 2 012
Likes : 8

Développement PHP
Développement JS
Audit et Analyse
Netlinking
Site Web

Re : Macro Excel, performance

Bon j'ai régler mon problème en fait, désolé pour le double post, au pire ca pourras servir à quelqu'un.

Fichier->options->Formules -> Calcul du classeur -> Cocher "Manuel" comme ça ça passe niquel...

Ensuite pour forcer le calcul d'une feuille c'est shift+F9, sur tout le classeur c'est F9 et sur une cellule faut la sélectionner et faire "f2" puis entrer. J'ai pas trouver moyen de recalculer avec un raccourci sur une plage de cellule par contre c'est dommage mais bon ça me change déjà bien la vie.

EDIT :
J'ai fais une macro pour recalculer une plage active, j'ai mis un raccourci clavier sur cette macro (ctrl w pour moi)

Sub Calcul()
'
' Calcul Macro
'
' Touche de raccourci du clavier: Ctrl+w
'
Selection.Calculate
End Sub

Du coup je sélectionne ma plage ctrl+w et c'est bon.

Dernière modification par Mitsu (2015-06-10 07:02:24)

0
J'aime ❤️

🔴 Hors ligne

Pied de page des forums