Chercher conseil optimisation calculs!

  • Initiateur de la discussion Initiateur de la discussion kioups
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

kioups

XLDnaute Occasionnel
Bonjour à tous,

j'ai un fichier de gestion de pronostics de foot : une trentaine de joueurs, 38 journées de 10 matchs chacune.

Dès qu'un vote (sous forme de score) ou un résultat est entré, je souhaite qu'une foultitude de calculs se fassent : nombre de fois où le joueur a pronostiqué ce score, nombre de fois où le joueur a trouvé ce score, nombre de joueurs ayant participé, nombre de joueurs ayant le bon score, le bon vainqueur, nombre de points gagnés par un joueur sur une équipe, etc etc.

A l'heure actuelle, se font automatiquement les calculs de points, les classements et c'est tout... J'ai voulu rajouté le nombre de fois où un joueur a pronostiqué tel score, mais dès que je rentre un nouveau résultat, mes formules recalculent pour TOUS les joueurs sur TOUTES les journées (alors que nous n'en sommes qu'à la 4ème).

Voilà la gueule de la formule :

Code:
Public Function Scorespronostiques(Joueur, Colonne, ScoreDom, ScoreExt)

Application.Volatile

If Joueur = "-" Then
    Scorespronostiques = "-"
End If

For i = 0 To 37
    For j = 0 To 9
        If Sheets("Journées").Cells(18 * i + 6 + j, Colonne + 6) = ScoreDom And Sheets("Journées").Cells(18 * i + 6 + j, Colonne + 7) = ScoreExt Then
            If Sheets("Journées").Cells(18 * i + 6 + j, Colonne + 6) <> "" And Sheets("Journées").Cells(18 * i + 6 + j, Colonne + 7) <> "" Then
                Scorespronostiques = Scorespronostiques + 1
            End If
        End If
    Next j
Next i


End Function

J'ai donc voulu essayer des procédures événementielles (Workshett_Change), mais j'ai rencontré deux problèmes : quand je copie-colle un vote (changement de DEUX cellules voire plus, jusqu'à 20), ma procédure événemtielle ne tient compte que de la cellule "activée", de plus, mes calculs se font plus lentement.... et encore, je m'en tiens là juste au calcul des points (pas les classements).

Ca donne ça :

Code:
Private Sub Worksheet_Change(ByVal target As Range)

Dim i As Integer
Dim ligne As Integer
Dim Colonne As Integer
Colonne = target.Column
ligne = target.Row

If ligne > 5 Mod 18 And ligne < 16 Mod 18 Then
    If Colonne Mod 4 = 3 And Colonne < 143 Then
        Cells(ligne, Colonne + 2).Calculate
        For i = 143 To 149
            Cells(ligne, i).Calculate
        Next i
        Cells(ligne, Colonne + 3).Calculate
        ElseIf Colonne Mod 4 = 0 And Colonne < 143 Then
        Cells(ligne, Colonne + 1).Calculate
        For i = 143 To 149
            Cells(ligne, i).Calculate
        Next i
        Cells(ligne, Colonne + 2).Calculate
            
    End If
        
End If

            
End Sub

Du coup, j'ai remis le calcul automatique, et "provisoirement" laissé de côté mes calculs de stats...

Comment faire pour optimiser mes calculs ? Dois-je utiliser uniquement des procédures événementielles ? Dois-je tout bêtement lancé mes calculs de stats à l'aide d'un bouton (pour pas que ça recalcule dès que je rentre un score) ?

Euh... A vos suggestions!

Kioups
 
Re : Chercher conseil optimisation calculs!

Je me permets un petit remontage de post...

J'ai une autre possibilité : dois-je mettre mes calculs de statistiques dans un autre classeur ? Les données seraient alors mises à jour seulement quand j'ouvre le classeur statistiques, non ?
 
Re : Chercher conseil optimisation calculs!

Je viens de me rendre compte que c'est bien ma Fonction personnalisée qui fait tout ralentir.

Dans ma feuille Statistiques, je n'ai mis qu'une seule formule, à savoir celle concernant le nombre de 1-0 pronostiqués par le joueur David. La formule est bonne, quand j'ai rentré la formule, le calcul s'est effectué instantanément.

J'ai mis une balise F9 dans mon code (un point d'arrêt) et quand je modifie une donnée dans ma feuille Journées, quel que soit la cellule concernée, le calcul se fait!!!!

A priori, c'est ma fonction qui merdouille... Mais où ????

Merci d'avance!
 
Re : Chercher conseil optimisation calculs!

bonjour josé,

dans le fichier que tu as reçu, j'ai supprimé la Worksheet_change, les calculs que je demandais (uniquement sur des lignes) se faisant trop lentement (2 secondes, pas plus, mais moins rapide qu'en calcul automatique). En plus, ces calculs ne me posaient pas de soucis particulier, c'est pour ça que j'ai laissé ça de côté.

Par contre, c'est bien l'application.volatile qui me gêne. J'aimerai que les calculs de fonction soient effectués seulement quand les cellules concernées sont modifiées. Est-ce possible d'avoir un calcul automatique pour certaines fonctions et un calcul sur ordre pour d'autres ?

Kioups
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
8
Affichages
466
Réponses
8
Affichages
233
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
479
Réponses
7
Affichages
249
Réponses
7
Affichages
163
Retour