Problème de rallentissement lors de l'éxécution de Userform

Samy.72

XLDnaute Nouveau
Bonjour à tous,

Votre forum m'a déja très bien aidé sur la création de mon fichier excel ci-joint. Mais là je bloque... Et mes faibles connaissances de VBA m'empêche d'avancer. Je viens donc logiquement posté sur le forum le plus éfficace à mes yeux:)

Mes problèmes :

- Le fichier est très long à s'ouvir
- Lorsque j'éxécute les deux userform (Feuil1 : Saisir une note de frais/Enregistrer une nouvelle vente) le temps d'éxécution est abominablement long...)

J'imagine les deux possibilités :

- Mes macros sont mal choisies et ralentissent l'éxécution
- Le nombre de formules qui attaque les données des Userform ralentissent ma base

Dans tous les cas je ne sais comment résoudre mon problème...


Si je devais abuser un peu plus de vos connaissances, j'aimerai également dans la feuil"Imprimer une note de frais" :
- Permettre l'incrémentation automatique du tableau en fonction des plages dates choisies. Je m'explique :

Je souhaiterais pouvoir imprimer une note de frais d'une période, par exemple que le tableau ce génére automatiquement de toute les note de frais de fevrier 2010 de la Feuil "Historique des notes de frais".

Mes premières recherche ne m'ont pas permis d'aboutir à un résultat concluant.

Un grand merci d'avance et désolé pour mon pavé...

Bonne journée

Le fichier est disponible ici : http://9giga.sfr.fr/n/50-17/share/LNK91204b7121acf3582/
 

job75

XLDnaute Barbatruc
Re : Problème de rallentissement lors de l'éxécution de Userform

Bonjour Samy.72, bienvenue sur XLD,

Je me permet de vous relancer pour savoir si l'un d'entre vous accepterai de m'aider

Bien sûr, si ce n'est pas une usine à gaz où il faut tout reprendre ;)

Mais d'abord il faudrait pouvoir accéder au fichier :confused: vous avez essayé le lien ?

De plus il faudra qu'il soit enregistré en .xls (du moins pour moi qui n'ai pas Excel 2007).

A+
 

Roland_M

XLDnaute Barbatruc
Re : Problème de rallentissement lors de l'éxécution de Userform

bonjour à tous !

je viens de le charger !
sur mon PC, qui n'est pas le dernier cri, plus ou moins 5 secondes !

ça me parait normal pour un classeur de cette importance !
 

Samy.72

XLDnaute Nouveau
Re : Problème de rallentissement lors de l'éxécution de Userform

Re-Bonjour,

Tous d'abord, merci à job75 et Roland_M d'avoir prit le temps de s'interesser à mon problème.

Pour job75 : le fichier au forat xls est ici : http://9giga.sfr.fr/n/50-17/share/LNK36294b72bf88d5851/

Pour Roland_M : L'ouverture du fichier prend en effet quelques secondes, le temps que je trouve anormalement long est celui de l'éxécution des Userform. Je l'ai testé sur trois PC differents et nottement des PC puissant mais il n'y change rien. Je suppose que mon code VBA peut-être amélioré pour gagner du temps, cependant toutes mes recherches en ce sens sont réstées infructueuses.

Encore merci à vous...
 
Dernière édition:

Samy.72

XLDnaute Nouveau
Re : Problème de rallentissement lors de l'éxécution de Userform

a Job75,

Suivant vos recommandations je l'ai mit sur ci-joint : Cijoint.fr - Service gratuit de dépôt de fichiers

En espérant que ce coût ci cela fonctionne...:p

Et encore merci
 

job75

XLDnaute Barbatruc
Re : Problème de rallentissement lors de l'éxécution de Userform

Re,

Merci pour le fichier.

Il n'a pas l'air d'une usine à gaz, mais je n'ai pas trop envie de comprendre comment tout ça marche...

Chez moi les durées d'ouverture du fichier ou des UserForms sont à peu près normales, vous avez sans doute allégé le fichier.

J'ai repéré 2 choses.

1) Dans la feuille Base de données ces formules en C4 et D4 :

Code:
=SOMMEPROD(('GesCom - Commissions'!$H$2:$H$[COLOR="red"]29332[/COLOR]>=EOMONTH(B4;-1))*('GesCom - Commissions'!$H$2:$H$[COLOR="Red"]29332[/COLOR]<=EOMONTH(B4;0))*('GesCom - Commissions'!$G$2:$G$[COLOR="red"]29332[/COLOR]))

Code:
=SOMMEPROD(('Note de Frais - Historique'!$A$2:$A$[COLOR="red"]65535[/COLOR]>=EOMONTH(B4;-1))*('Note de Frais - Historique'!$A$2:$A$[COLOR="red"]65535[/COLOR]<=EOMONTH(B4;0))*('Note de Frais - Historique'!$J$2:$J$[COLOR="red"]65535[/COLOR]))

Vous faites travailler SOMMEPROD sur des plages trop grandes, cela prend beaucoup de temps, il faut les alléger ou utiliser des macros.

2) Dans les macros des boutons Valider des 2 UserForms, il y a erreur de compilation sur :

Code:
If [COLOR="Red"]Modification[/COLOR] Then

Modification est introuvable, il faut définir cette variable...

A+
 

job75

XLDnaute Barbatruc
Re : Problème de rallentissement lors de l'éxécution de Userform

Bonjour Samy.72, le forum,

En plus dans les feuilles GesCom - Commissions et Note de Frais - Historique vous avez des formules jusqu'aux lignes 29332 et 65536 !!!

Si l'on supprime les lignes superflues, le fichier 2003.xls passe de 20 Mo à 400 Ko :)

Quand un fichier est trop gros, aller sur chaque feuille, touche F5 => Cellules => Dernière cellule, ou directement touches Ctrl+Fin.

On comprend alors mieux ce qui gonfle le fichier :)

A+
 

Samy.72

XLDnaute Nouveau
Re : Problème de rallentissement lors de l'éxécution de Userform

Bonjour Job75,

Décidement vous êtes une aide précieuses.

D'après vos remarque, j'ai améliorer le fichier et l'éxécution des userform se passe très bien maintenant.

Un grand Merci.

Cependant je bloque toujours sur la création de fiche des notes de frais.

En faites, je souhaite pouvoir générer une note de frais sur la feuille (Note de Frais Impression) avec les informations de la feuille (Note de Frais Historique) en fonction d'une plage de date : Cellules M5 et M6 de (Note de Frais Impression).

Pour être plus clair je souhaite que d'un simple clic sur un bouton je puisse integrer toutes les notes de frais de février (par exemple) et ainsi pouvoir l'imprimer.

J'ai fouillé sur le net mais n'arrive pas à trouver la solution, si vous avez une idée.

Merci d'avance.
 

job75

XLDnaute Barbatruc
Re : Problème de rallentissement lors de l'éxécution de Userform

Re,

Faites en sorte que les colonnes des 2 feuilles Note de Frais - Impression et Note de Frais - Historique soient les mêmes : c'est logique et ce sera tellement plus facile ensuite...

Il suffira de faire une boucle sur la colonne des dates de la feuille Historique, et quand la ligne convient de copier les valeurs de la ligne dans la feuille Impression (à la suite les unes des autres bien sûr).

Pour copier les valeurs d'une plage1 sur une plage2 de mêmes dimensions, il suffit du code :

plage2 = plage1.Value

Dans tout ça, il n'y aura rien à sélectionner, Select est à éviter en VBA.

Si vous n'y arrivez pas, revenez, mais après avoir modifié le fichier comme je l'ai dit, car je suis flemmard ;)

A+
 

Samy.72

XLDnaute Nouveau
Re : Problème de rallentissement lors de l'éxécution de Userform

job75,

Comme vous l'avez si bien préssentit je n'y arrive pas :mad:

Ce n'est pas faute d'avoir essayer mais mes connaissances en VBA sont bien trop minces.

J'ai corrigé le fichier et est dispo ici : Cijoint.fr - Service gratuit de dépôt de fichiers

Encore mille merci
 

job75

XLDnaute Barbatruc
Re : Problème de rallentissement lors de l'éxécution de Userform

Bonsoir Samy.72,

La macro pour l'impression :

Code:
Sub Imprimer()
Dim F As Worksheet, datmin As Date, datmax As Date, lig As Byte, cel As Range
Set F = Sheets("Note de Frais - Historique")
Sheets("Note de Frais - Impression").Activate
If Not IsDate(Range("J5")) Then Range("J5").Select: MsgBox "Entrez une date...": Exit Sub
If Not IsDate(Range("J6")) Then Range("J6").Select: MsgBox "Entrez une date...": Exit Sub
datmin = Application.Min(Range("J5"), Range("J6"))
datmax = Application.Max(Range("J5"), Range("J6"))
lig = 11
Range("A12:I26") = ""
For Each cel In Range(F.Range("A2"), F.Range("A65536").End(xlUp))
  If cel >= datmin And cel <= datmax Then
    If lig = 26 Then MsgBox "La note de frais ne peut comporter plus de 15 lignes !", 48: Exit For
    lig = lig + 1
    Cells(lig, 1).Resize(, 9) = cel.Resize(, 9).FormulaR1C1
  End If
Next
ActiveSheet.PrintOut Copies:=1
End Sub

Et le fichier : Cijoint.fr - Service gratuit de dépôt de fichiers

A noter qu'une référence VBA est manquante : mDF_XLcalendar.xla

A+
 

job75

XLDnaute Barbatruc
Re : Problème de rallentissement lors de l'éxécution de Userform

Re,

Peut-être est-il souhaitable, pour s'y retrouver si le nombre maximum de 15 lignes est dépassé, de trier la feuille historique par date croissantes.

La macro en sera d'ailleurs accélérée :

Code:
Sub Imprimer()
Dim F As Worksheet, datmin As Date, datmax As Date, lig As Byte, cel As Range
Set F = Sheets("Note de Frais - Historique")
Sheets("Note de Frais - Impression").Activate
If Not IsDate(Range("J5")) Then Range("J5").Select: MsgBox "Entrez une date...": Exit Sub
If Not IsDate(Range("J6")) Then Range("J6").Select: MsgBox "Entrez une date...": Exit Sub
datmin = Application.Min(Range("J5"), Range("J6"))
datmax = Application.Max(Range("J5"), Range("J6"))
lig = 11
Range("A12:I26") = ""
[COLOR="Red"]F.Range("A:J").Sort Key1:=F.Range("A1"), Order1:=xlAscending, Header:=xlYes ' tri[/COLOR]
For Each cel In Range(F.Range("A2"), F.Range("A65536").End(xlUp))
  If cel >= datmin Then
    [COLOR="red"]If cel > datmax Then Exit For[/COLOR]
    If lig = 26 Then MsgBox "La note de frais ne peut comporter plus de 15 lignes !", 48: Exit For
    lig = lig + 1
    Cells(lig, 1).Resize(, 9) = cel.Resize(, 9).FormulaR1C1
  End If
Next
[COLOR="red"]If lig = 11 Then MsgBox "Aucune date trouvée pour cette période": Exit Sub[/COLOR]
ActiveSheet.PrintOut Copies:=1
End Sub

Le fichier : Cijoint.fr - Service gratuit de dépôt de fichiers

A+
 

Statistiques des forums

Discussions
312 321
Messages
2 087 243
Membres
103 497
dernier inscrit
JP9231