|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Nouveau Membre du Club
![]() Inscription : mai 2009 Messages : 124 ![]() |
bonjour voici mon code
Code :
|
||
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() Pierre GONZALEZDéveloppeur Office VBA Inscription : août 2005 Messages : 3 412 ![]() |
Bonjour.
Tu as combien d'éléments dans collec? Collec.count vaut combien? PGZ
__________________
pluritas non est ponenda sine necessitate - Le rasoir d'Okham Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon |
|
|
00
|
|
|
#3 | ||
![]() ![]() Denis Développeur informatique Inscription : août 2004 Messages : 3 205 ![]() |
Salut Rominou et Pgz,
Il me semble qu'il te faut libérer ta variable après chaque passage de boucle : Code :
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp. Bon développement ! Mes tutoriels et contributions sur ma page perso: Ma page personnelle |
||
|
00
|
|
|
#4 |
|
Nouveau Membre du Club
![]() Inscription : mai 2009 Messages : 124 ![]() |
mon collec.count vaut 68
|
|
|
00
|
|
|
#5 | ||
![]() ![]() Maintenance données produits Inscription : décembre 2005 Messages : 3 939 ![]() |
Bonsoir,
Tu n'as pas de ligne dans ta boucle. Donc dans ta collection tu ajoutes 68 fois la même référence (pointeur) au même objet. Moi, j'écris plutôt de cette façon : Code :
|
||
|
|
00
|
|
|
#6 | |||
|
Expert Confirmé Sénior
![]() Développeur informatique Inscription : novembre 2006 Messages : 4 215 ![]() |
Bonjour,
Citation:
Sur une boucle de 100 éléments ça peut passer par contre sur 100 000 d'une grosse bdd commerciale ça risque de poser des problèmes.
__________________
Alea Jacta Est |
|||
|
|
00
|
|
|
#7 | |
|
Expert Confirmé Sénior
![]() Développeur informatique Inscription : novembre 2006 Messages : 4 215 ![]() |
Citation:
D'abord éviter MsgBox et utiliser debug.print chaine_de_caracteres. Ensuite si utilises des boucles imbriquées avec des recordset c'est que l'analyse du problème n'est pas optimale. As-tu entendu parler des jointures en SQL pour un SELECT ? Avec une bonne jointure tu n'utilises qu'un recordset.
__________________
Alea Jacta Est |
|
|
|
00
|
|
|
#8 | |
![]() ![]() Maintenance données produits Inscription : décembre 2005 Messages : 3 939 ![]() |
Citation:
De plus set adsa=nothing avant Loop ne libère rien, puisqu'avant on a collec.Add adsa. A+ |
|
|
|
00
|
|
|
#9 | |||
![]() ![]() Denis Développeur informatique Inscription : août 2004 Messages : 3 205 ![]() |
Salut Christophe,
Dans l'aide Access ils parlent de supprimer la référence en cours : Citation:
Code :
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp. Bon développement ! Mes tutoriels et contributions sur ma page perso: Ma page personnelle |
|||
|
00
|
|
|
#10 | |
|
Expert Confirmé Sénior
![]() Développeur informatique Inscription : novembre 2006 Messages : 4 215 ![]() |
Citation:
le fait de déclare une variable de type classe quelconque avec une instruction Dim n'alloue pas du tout une instance de classe. Sauf si tu déclare Dim nom_class as New ...comme le montre Denis. Il faut faire new ensuite pour l'instancier. Lorsque tu fais set nom_variable avec un new on incrémente une sorte de compteur de référence. On peut omettre le set nom_variable=nothing parce que VBA détruit automatiquement les objets instanciés mais il est recommendé de le faire soi-même
__________________
Alea Jacta Est |
|
|
|
00
|
|
|
#11 |
|
Nouveau Membre du Club
![]() Inscription : mai 2009 Messages : 124 ![]() |
merci beaucoup c'est bien le set adsa = new adh_sal qu'il me manqué
|
|
|
00
|
|
|
#12 |
![]() ![]() Maintenance données produits Inscription : décembre 2005 Messages : 3 939 ![]() |
Salut Denis,
Oui, c'est à cause du mot-clé optionnel New dans la déclaration de la variable objet. Lorsque New est dans la déclaration, l'instanciation se fait de manière implicite. C'est à dire que lorsque la variable objet (Inst) est utilisée, si elle ne pointe sur aucun objet (Nothing), un Set Inst = New Class1 est fait de manière transparente. C'est dans l'aide en ligne du mot-clé Dim. L'exemple de l'aide Access exploite cette sorte de "régénération automatique" (ou instanciation automatique). Dans mon code, la variable est déclarée sans le mot-clé New. De ce fait, j'instancie de manière explicite avec Set MaVariable = New ClasseObjet . A noter, qu'au passage suivant dans la boucle, cette même ligne de code ... - crée un nouvel objet - affecte la référence (pointeur) à ce nouvel objet à la variable objet. - entraine la destruction de l'objet qui était précédemment référencé par la variable objet, à la condition que plus aucune référence à cet objet existe. Dans le cas de rominous41, l'objet précédemment référencé n'est pas détruit car la Collection possède un élément avec une référence à cet objet. D'une manière générale, je ne déclare jamais mes variables objets avec As New TypeObjet, car cela m'empêche d'effectuer le test If MaVariableObjet Is Nothing . Le fait de tester la variable objet instancie un nouvel objet si la variable est à Nothing. A+ |
|
|
00
|
|
|
#13 |
![]() ![]() Denis Développeur informatique Inscription : août 2004 Messages : 3 205 ![]() |
ok, merci,
Je ne connaissais pas toutes ces subtilités
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp. Bon développement ! Mes tutoriels et contributions sur ma page perso: Ma page personnelle |
|
00
|
|
|
#14 |
![]() ![]() Maintenance données produits Inscription : décembre 2005 Messages : 3 939 ![]() |
Salut Denis,
Tiens, je te mets un lien sur une discussion où Tofalu donne son avis et des explications sur la différence entre le New utilisé avec Dim ou avec Set. A la base je voulais te répondre par ce lien, mais j'ai mis deux jours pour le retrouver. Ce qui me rassure c'est que mon explication a l'air correcte. Le lien vers la citation de Tofalu : Compare the speed of using Dim versus Dim As New. Et un, vers une discussion sur Dim As New versus Set = New Les deux méthodes ont leurs avantages et leur inconvénients, et c'est aussi fonction des préférences du programmeur. Au fait, ton code était bon. La différence avec le mien est que tu utilises l'instanciation implicite et moi l'instanciation explicite. A+ |
|
|
00
|
|
|
#15 | |
![]() ![]() Denis Développeur informatique Inscription : août 2004 Messages : 3 205 ![]() |
Salut Christophe,
Donc d'après Tofalu la solution avec set serait plus rapide en terme d'exécution. Citation:
d'autant que comme tu le dis une nouvelle instanciation entraine la destruction de l'objet qui était précédemment référencé par la variable objet. Mais là pour répondre à la discussion j'ai voulu me baser sur l'exemple de l'aide.
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp. Bon développement ! Mes tutoriels et contributions sur ma page perso: Ma page personnelle |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com