Autres accelerer les fonction

  • Initiateur de la discussion Initiateur de la discussion samia89
  • 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 !

samia89

XLDnaute Nouveau
bonjour tt le monde j'ai besoin de votre svp y a t'il un moyen d’accelerer ces fonctions car elle sont très lentes

VB:
=INDEX(Mouvement!$F$1:$F$9959;MIN(SI((Mouvement!$B$7:$B$1000="sortie")*(Mouvement!$C$7:$C$1000=$A$1)*(NB.SI(A$4:A4;Mouvement!$F$7:$F$1000)=0);LIGNE(Mouvement!$F$7:$F$1000))))&""

Code:
=SI($A5="";"";SOMMEPROD((Mouvement!$F$7:$F$1000=$A5)*(Mouvement!$C$7:$C$1000=$A$1)*(Mouvement!$G$7:$G$1000)*(Mouvement!$B$7:$B$1000="sortie")))

voila l'image du tableau sur le quel je travail e je vous joint mon classeur pour bien voir le problème de lenteur au moment d'exécution des fonctions j’espère vous lire bien tôt
image002.jpg
 

Pièces jointes

C'est la première fois que je vois ça. Normalement le message affiche aussi en dessous l'Err.Description. Quelle est elle ?
Si vous tentiez de l'enregistrer manuellement sur votre dossier de complément (donné par Application.UserLibraryPath) comme fichier de type "Complément Excel (*.xlam)" que se passerait-il ?
Instalation abondonnée recommandation ne prenez pas le projet CLsCAs de ce classeur précurseur comme référence dans un autre projet
 
Il faut d'abord régler le problème de l'installation du CBxLCtlA. Ça m'inquiète cette histoire là.
Non, ça c'est après, mais avant quand il fait :
Err.Clear: Me.SaveAs ChNomF, FileFormat:=xlOpenXMLAddIn
If Err Then MsgBox "Impossible d'enregistrer le complément." _
& vbLf & "Erreur " & Err & " :" & vbLf & Err.Description, _
vbCritical, Titre: Exit Function
qu'est-ce qu'il met comme Err.Description ?
C'est d'autant plus bizarre que l'installation du GigIdx avait bien marché, or il procède exactement de la même façon !

Je joins le générateur d'UserForm permettant de créer celui que j'ai montré.
 

Pièces jointes

Il faut d'abord régler le problème de l'installation du CBxLCtlA. Ça m'inquiète cette histoire là.
Non, ça c'est après, mais avant quand il fait :qu'est-ce qu'il met comme Err.Description ?
C'est d'autant plus bizarre que l'installation du GigIdx avait bien marché, or il procède exactement de la même façon !

Je joins le générateur d'UserForm permettant de créer celui que j'ai montré.
y a erreur a l'ouverture du classeur GénérateurUFm excel a rencontre un contenu illisible dans GénérateurUFm......
bon si pas méchant je vais travailler directe avec la premier solution VBA que tu ma proposer tout a l'heur elle fonctionne très bien et merci pour tout
 
Instalation abondonnée recommandation ne prenez pas le projet CLsCAs de ce classeur précurseur comme référence dans un autre projet
Je joins quand même le classeur équipé de l'UserForm, à tout hasard.
Réessa
désolé pour le derangement
voila le message d'erreur a l'ouverture de CBxLCtlA il est impossible d'enregistrer le compliment erreur 1004
la méthode 'SaveAs' de l'objet'_workbook' a échoué
 
Il me vient une idée : dans VBE, faites ALT+OO (Outils/Options…), voyez onglet Général, rubrique Récupération d'erreur.
Si c'est Arrêt sur toutes les erreurs qui est coché, ça explique tout.
Même Arrêt sur les erreurs non gérées n'est pas idéal, je vous conseille de cocher Arrêt dans le module de classe.
Mais dans ce cas pourquoi diable l'installation du GigIdx avait marché ???
Je l'ai refaite chez moi sans problème.
 
Oui j'y répondrai sans doute. Mais le principe c'est de ne JAMAIS travailler directement avec des cellules individuelles. Toujours passer par des tableaux VBA dynamiques. Il prend pratiquement autant de temps à accéder à une seule cellule qu'à 100000 d'un coup !
Je joins à tout hasard le CBxlCtla au cas ou il aurait subi des dégâts au transfert la 1ère fois.

Si ça ne va toujours pas, est-ce que la tentative manuelle comme décrite au poste #13 indiquerait pourquoi ? Essayez !
Le chemin du dossier de compléments c'est généralement C:\Users\………\AppData\Roaming\Microsoft\AddIns. Vous devez y avoir déjà le GigIdx.xlam
 

Pièces jointes

Dernière édition:
Oui, c'est normal, c'était juste l'UserForm sans encore aucune programmation dedans.
J'ai l'impression que le code indiqué pourrait ce réécrire en utilisant la fonction Gigogne. Voir l'aide, et s'inpirer de l'autre procédure.
 
Dernière édition:
Bonjour à tous,

Une piste pour la réponse à la première question: utilisation d'une fonction personnalisée matricielle : RecapJour(....)
L'utilisation est expliquée dans le fichier. Cela semble être rapide.

Le code de la fonction est dans module1:
VB:
Function RecapJour(xSource As Range, Action As String, leJour As Date)
Dim t, dico, i&, j&, N&, plage, r, res
   t = xSource.Value2
   Set plage = Application.Caller
   ReDim res(1 To plage.Rows.Count, 1 To plage.Columns.Count)
   For i = 1 To UBound(res): For j = 1 To UBound(res, 2): res(i, j) = "": Next j: Next i
   Set dico = CreateObject("scripting.dictionary")
   dico.CompareMode = vbTextCompare
   For i = 1 To UBound(t)
      If LCase(t(i, 1)) = LCase(Action) And t(i, 2) = leJour Then
         If Not dico.Exists(t(i, 5)) Then N = N + 1: dico(t(i, 5)) = N
      End If
   Next i
   If dico.Count = 0 Then RecapJour = res: Exit Function
   ReDim r(1 To dico.Count, 1 To 4)
   For i = 1 To UBound(t)
      If LCase(t(i, 1)) = LCase(Action) And t(i, 2) = leJour Then
         N = dico(t(i, 5))
         r(N, 1) = t(i, 5): r(N, 2) = r(N, 2) + t(i, 6)
         r(N, 3) = t(i, 7): r(N, 4) = r(N, 4) + t(i, 6) * t(i, 7)
      End If
   Next i
   On Error Resume Next
   For i = 1 To UBound(r): For j = 1 To UBound(r, 2): res(i, j) = r(i, j): Next j: Next i
   RecapJour = res
End Function
 

Pièces jointes

Bonjour à tous,

Une piste pour la réponse à la première question: utilisation d'une fonction personnalisée matricielle : RecapJour(....)
L'utilisation est expliquée dans le fichier. Cela semble être rapide.

Le code de la fonction est dans module1:
VB:
Function RecapJour(xSource As Range, Action As String, leJour As Date)
Dim t, dico, i&, j&, N&, plage, r, res
   t = xSource.Value2
   Set plage = Application.Caller
   ReDim res(1 To plage.Rows.Count, 1 To plage.Columns.Count)
   For i = 1 To UBound(res): For j = 1 To UBound(res, 2): res(i, j) = "": Next j: Next i
   Set dico = CreateObject("scripting.dictionary")
   dico.CompareMode = vbTextCompare
   For i = 1 To UBound(t)
      If LCase(t(i, 1)) = LCase(Action) And t(i, 2) = leJour Then
         If Not dico.Exists(t(i, 5)) Then N = N + 1: dico(t(i, 5)) = N
      End If
   Next i
   If dico.Count = 0 Then RecapJour = res: Exit Function
   ReDim r(1 To dico.Count, 1 To 4)
   For i = 1 To UBound(t)
      If LCase(t(i, 1)) = LCase(Action) And t(i, 2) = leJour Then
         N = dico(t(i, 5))
         r(N, 1) = t(i, 5): r(N, 2) = r(N, 2) + t(i, 6)
         r(N, 3) = t(i, 7): r(N, 4) = r(N, 4) + t(i, 6) * t(i, 7)
      End If
   Next i
   On Error Resume Next
   For i = 1 To UBound(r): For j = 1 To UBound(r, 2): res(i, j) = r(i, j): Next j: Next i
   RecapJour = res
End Function

bonjour mapomme merci pour ton aide oui le code fonction très bien il affiche les resultats rapidement
Bonjour à tous,

Une piste pour la réponse à la première question: utilisation d'une fonction personnalisée matricielle : RecapJour(....)
L'utilisation est expliquée dans le fichier. Cela semble être rapide.

Le code de la fonction est dans module1:
VB:
Function RecapJour(xSource As Range, Action As String, leJour As Date)
Dim t, dico, i&, j&, N&, plage, r, res
   t = xSource.Value2
   Set plage = Application.Caller
   ReDim res(1 To plage.Rows.Count, 1 To plage.Columns.Count)
   For i = 1 To UBound(res): For j = 1 To UBound(res, 2): res(i, j) = "": Next j: Next i
   Set dico = CreateObject("scripting.dictionary")
   dico.CompareMode = vbTextCompare
   For i = 1 To UBound(t)
      If LCase(t(i, 1)) = LCase(Action) And t(i, 2) = leJour Then
         If Not dico.Exists(t(i, 5)) Then N = N + 1: dico(t(i, 5)) = N
      End If
   Next i
   If dico.Count = 0 Then RecapJour = res: Exit Function
   ReDim r(1 To dico.Count, 1 To 4)
   For i = 1 To UBound(t)
      If LCase(t(i, 1)) = LCase(Action) And t(i, 2) = leJour Then
         N = dico(t(i, 5))
         r(N, 1) = t(i, 5): r(N, 2) = r(N, 2) + t(i, 6)
         r(N, 3) = t(i, 7): r(N, 4) = r(N, 4) + t(i, 6) * t(i, 7)
      End If
   Next i
   On Error Resume Next
   For i = 1 To UBound(r): For j = 1 To UBound(r, 2): res(i, j) = r(i, j): Next j: Next i
   RecapJour = res
End Function



bonjour mapomme merci pour ton aide oui le code fonction bien il affiche les résultats rapidement
ma 2eme question et ce que en peut associer un autre critère de recherche a 'A1'date' on ajoutent la cellule 'E1' pour inséré par ex des nom client' et le résultat finale doit être de cette façon:

quand j'ajoute un nom 'qui se trouve dans ma base de donné' dans la cellule ' E1' le résultat doit afficher uniquement ' le détail des sortie pour le nom 'E1' de la date inséré dans 'A1'




et merci encor une fois
 
Oui, c'est normal, c'était juste l'UserForm sans encore aucune programmation dedans.
J'ai l'impression que le code indiqué pourrait ce réécrire en utilisant la fonction Gigogne. Voir l'aide, et s'inpirer de l'autre procédure.
Oui, c'est normal, c'était juste l'UserForm sans encore aucune programmation dedans.
J'ai l'impression que le code indiqué pourrait ce réécrire en utilisant la fonction Gigogne. Voir l'aide, et s'inpirer de l'autre procédure.

merci comme meme pour ton aide Dranreb
 
Re,

Pour le critère 'Client", on a ajouté un 4ème argument à la fonction RecapJour(...)
Voir fichier joint.

rebonjour mapomme tt fonction bien mais y a un petit problème j'ai oublier de le souligner dans le poste précédent si que quand la cellule 'E1' et vide le résultat doit être tout de même afficher tout les résultat des sortie de la date inséré dans "A1'
toutes mes excuses et merci encor une fois
 
- 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
5
Affichages
474
Réponses
3
Affichages
271
  • Question Question
Microsoft 365 VBA sur outlook
Réponses
14
Affichages
949
Réponses
7
Affichages
704
Retour