Code excel ralenti par une ligne :(

Lauradu57

XLDnaute Nouveau
Bonjour à tous,
Je viens aujourd’hui vers vous afin de vous quémander de l’aide dans mon code VBA. Tout d’abbord, j’utilise EXCEL v2003.

Voici en quelques mots le principe du code :
Je réalise un formulaire permettant d’enregistrer dans une Base De Données (feuille EXCEL cachée). Le but de ce formulaire est de référencer les bons hôtels et restaurants en Europe pour nos futurs déplacements.

Principe du code :
Ajout, recherche et modification des lieux selon des critères (pays, ville, nom, …)

Mon problème :
J’utilise dans deux UserForm différents exactement le même module de code (pour l’ajout et la modification). J’ai donc voulu faire une variable donnant le nom de l’UserForm tel que :

Code:
 Dim frm As Object

if Search_details.visible = True
     Set frm = Search_details_modify
Else :  Set frm = BASIC_Fr
End if

frm.ville = sheets("BDD").cells(ID,1).value
frm.nom = sheets("BDD").cells(ID,2).value
frm.pays = sheets("BDD").cells(ID,3).value

Le soucis est que le code est fortement ralenti avec ceci. Si je met le code ci-dessus, l’execution du code est de plus de 1 secondes. Sans ce code, avec celui ci-dessous, l’execution est inférieure à 500ms :

VB:
BASIC_Fr.ville = sheets("BDD").cells(ID,1).value
BASIC_Fr.nom = sheets("BDD").cells(ID,2).value
BASIC_Fr.pays = sheets("BDD").cells(ID,3).value

Quelqu’un pourrait-il m’aider afin de me dire pourquoi celà se produit?
Je peux vous mettre a disposition le fichier EXCEL si vous voulez, néanmoins je devrais l’envoyer par mail car il est >1Mo…

Ci-joint le code. Le code dont je vous parle se trouve dans le module "a_CRITERES_TYPE". Ceci s'execute tel que :
1. Lancer BASIC_Fr
2. Cliquer sur ajouter
3. Choisir un type

Bonne soirée à tous,
Laura
 

Pièces jointes

  • Guide.zip
    289.2 KB · Affichages: 28
  • Guide.zip
    289.2 KB · Affichages: 32
  • Guide.zip
    289.2 KB · Affichages: 26
Dernière édition:

néné06

XLDnaute Accro
Re : Code excel ralenti par une ligne :(

Bonsoir Laura et bienvenue sur le Forum,

Dans ton code figure une instruction que je ne connais pas ?

sheest("BDD").cells(ID,1).value

Je connais sheets ("Le nom de feuille") ,mais sheest correspond à quoi ?

Cordialement
René
 

Lauradu57

XLDnaute Nouveau
Re : Code excel ralenti par une ligne :(

Bonsoir,
Milles excuses, erreur de frappe de ma part, c'est bel et bien "sheets".

Voici le code, j'ai réussi a réduire la taille.

Le code dont je vous parle se trouve dans le module "a_CRITERES_TYPE". Celui-ci s'execute tel que :
1. Lancer BASIC_Fr
2. Cliquer sur ajouter
3. Choisir un type

Merci,
Laura.
 

Pièces jointes

  • Guide.zip
    289.2 KB · Affichages: 46
  • Guide.zip
    289.2 KB · Affichages: 49
  • Guide.zip
    289.2 KB · Affichages: 46
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Code excel ralenti par une ligne :(

Bonsoir à tous

Lauradu57
Au fait il faut dire bonsoir Lauradu57 ou Fabdu57? :rolleyes:

Sinon heureusement que ton fichier exemple est un fichier simplifié ;)
(On a rarement besoin du fichier original qui contiennent souvent des cochoncetés comme des images ou des couleurs qui ne servent pas à grand chose lorsqu'on teste un code VBA ;))

J’utilise dans deux UserForm différents exactement le même module de code (pour l’ajout et la modification).
Suggestion: Personnellement j'utiliserai un seul userform avec des contrôles superposés (visible ou pas) selon qu'on soit en mode ajout ou en mode modification
 

néné06

XLDnaute Accro
Re : Code excel ralenti par une ligne :(

Bonsoir Laura,Staple1600


Dans ton fichier j'ai repéré cette instruction qui plante

If Search_details.Visible = True Then
Set frm = Search_details_modify
Else: Set frm = BARIC_Fr
End If

Recherche de BARIC_FR ????

A+
 

Lauradu57

XLDnaute Nouveau
Re : Code excel ralenti par une ligne :(

Bonsoir à tous
B]Suggestion[/B]: Personnellement j'utiliserai un seul userform avec des contrôles superposés (visible ou pas) selon qu'on soit en mode ajout ou en mode modification
Malheureusement ceci compliquerai la chose car le formulaire à ce stade actuel. Je n'ai d'autres choix que passer par des variables comme ci-dessus, ou alors recopier le code dans un autre module.

Bonsoir Laura,Staple1600
Recherche de BARIC_FR ????

Erreur de recopie de ma part de l'instruction que j'avais noté sur le Forum. C'est pas BARIC_Fr mais BASIC_Fr.

Désolé.
L'instruction qui ralenti le tout est celle ci :

VB:
Dim frm As Object
    If Search_details.Visible = True Then
         Set frm = Search_details_modify
    Else:   Set frm = BASIC_Fr
    End If

Mais je ne comprends pas pourquoi finalement, car c'est quelque chose de "tout bête"

Merci,
Laura.
 

Lauradu57

XLDnaute Nouveau
Re : Code excel ralenti par une ligne :(

Bonsoir à nouveau le Forum,

Aprés quelques essais, la partie ralentissant mon code est donc la suivante :

If Search_details.Visible = True Then

J'ai donc feinté d'une autre manière :
VB:
    Dim frm As Object
    
    If Sheets("BDD").Range("AC6").Value = 1 Then
         Set frm = Search_details_modify
    Else:   Set frm = BASIC_Fr
    End If

En clair, quand je demande une modification, je met la case AC6 de ma feuille BDD a la valeur de 1. Ainsi, ca dit "Je lance la modification".

Cependant, je ne comprends pas en quoi dire a mon code "Vérifie si tel UserForm est visible ou non" peut ralentir de cette manière mon code...

Merci d'avance,
Laura.
 

Lauradu57

XLDnaute Nouveau
Re : Code excel ralenti par une ligne :(

Néanmoins, une question. Je trouve la taille de mon fichier excel (>700ko) trés importante.
Pourtant les images sont trés petites (<20ko chacunes).

Une idée de comment je pourrais alléger encore plus le code? De 200ko ou plus par exemple...

J'ai fais un test :

Taille du fichier : 820Ko
Supression des UserForms et des modules : Taille fichier => 400Ko
Supression des UserForms, modules et feuilles : Taille fichier => 34Ko

En clair j'ai un 50/50 pour la taille...

Merci d'avance,
Laura.
 

Lauradu57

XLDnaute Nouveau
Re : Code excel ralenti par une ligne :(

Bonjour,

Je veux bien que Visible soit Boolean, néanmoins je ne comprends pas la lenteur du code, que je mettes " If Search_details.Visible = True" ou " If Search_details.Visible" le code est aussi lent...

D'où la feinte que j'ai fait lol.

Bonne journée,
Laura.
 

Discussions similaires

Réponses
12
Affichages
623
Réponses
17
Affichages
1 K

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 963
Messages
2 093 996
Membres
105 906
dernier inscrit
aifa