|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : mai 2007 Messages : 17 ![]() |
Bonjour,
Malgrès pas mal de recherches, je n'ai pas trouvé de réponses à mon problème. J'ai une variable publique de type personnalisé. J'aimerais pouvoir la réinitialiser car je dois l'utiliser plusieurs fois et je n'arrive pas à utiliser les instructions 'redim' ou 'dim ... as new (type)' ou 'set...=nothing'. J'ai à chaque fois un message d'erreur. Merci pour votre aide |
|
|
00
|
|
|
#2 |
![]() ![]() Alain GerardConsultant informatique Inscription : mai 2005 Messages : 3 677 ![]() |
Ce serait trop de le donner, ce message?
Accessoirement avec la ligne de code qui le provoque. Et, tant qu'on y est, tout le code qui concerne cette variable (déclaration...).
__________________
N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres! Pensez aussi à voter pour les réponses qui vous ont aidés. ------------ Je dois beaucoup de mes connaissances à mes erreurs! |
|
|
00
|
|
|
#3 | ||||
|
Invité régulier
![]() Inscription : mai 2007 Messages : 17 ![]() |
Bonjour,
Mon code ressemble à ça: Dans un premier module de déclaration de variables, je déclare mon type et une variable de ce type avec la portée publique: Code :
J'ai essayé les instructions suivantes au début de ma procèdure:
Pour l'instant, j'ai contourné le problème en utilisant la méthode suivante: Code :
Merci pour votre aide |
||||
|
|
00
|
|
|
#4 | |||
|
En attente de confirmation mail
Inscription : février 2005 Messages : 1 731 ![]() |
Bonjour,
Citation:
Mais pour répondre à ta question, il n'y a pas de façon "simple" de réinitialiser une variable de type défini par l'utilisateur. Une méthode simple et "brutale" consiste à créer une nouvelle variable du type, donc initialisée "à vide", et à la recopier sur la variable à réinitialiser grâce à l'instruction LSet du VBA: Code :
Il n'y a pas de souci tant qu'il ne s'agit que de types simples (numérique, booléen) ou de types "incorporés" (chaîne de caractères dimensionnée, tableau dimensionné et de type simple). En revanche, pour des références sur des objets, des chaînes de caractères dynamiques, des tableaux dynamiques... je me méfierai des problèmes du genre "fuite de mémoire". _ |
|||
|
|
00
|
|
|
#5 |
|
Invité régulier
![]() Inscription : mai 2007 Messages : 17 ![]() |
Merci beaucoup pour ta réponse JBO.
Je vais essayer ta méthode, c'est vrai que ça peut-être bien dans certains cas, mais j'ai aussi des types personnalisés ou des classes contenant à la fois des objets, entités autocad, tableaux dynamiques... Pour la déclaration de ma variable, dans certains cas précis, je suis contraint d'avoir des variables publiques. (C'est vrai que pour d'autres variables du type personnalisé, je préfére les déclarations à l'intérieur des procèdures) Sinon, pour contourner le problème, j'ai fait une fonction "Réinitialiser" dans laquelle je réinitialise chaque variable une à une. J'ai fait la même chose pour mes classes en faisant une fonction de réinitialisation à l'intérieur de ma classe. Merci |
|
|
00
|
|
|
#6 | ||||
|
En attente de confirmation mail
Inscription : février 2005 Messages : 1 731 ![]() |
Bonjour,
Citation:
Citation:
![]() Donc la réinitialisation d'une variable de type personnalisé par LSet effectue des Set ... = Nothing sur les membres de type objet. Maintenant, je ne vois qu'un bémol: il faut faire attention à utiliser l'instruction LSet avec de même type personnalisé. Mais ce n'est pas un vrai problème. Au-delà de ta question initiale, je trouve que ce comportement est assez remarquable et peut être pratique. Dorénavant, quand l'occasion se présentera, je réfléchirais à son utilisation. P.S. Si c'est résolu, alors dis le en éditant ton premier message au bas duquel tu trouveras le bouton Résolu, merci. _ |
||||
|
|
00
|
|
|
#7 |
|
Invité régulier
![]() Inscription : mai 2007 Messages : 17 ![]() |
Merci JBO.
![]() En effet, le LSET fonctionne bien (alors qu'un de mes types personnalisés contient des variables classiques, des objets et aussi des tableaux de variables de type personnalisé à l'intérieur du 1er type) Egalement, juste pour info, j'utilise la fonction 'Erase' dans certaines parties de mon code lorsque j'utilise un tableaux dynamiques de type personnalisé (cela permet de réinitialiser correctement le tableau, par contre, lorsqu'il s'agit d'une variable simple de type personnalisé, le vba génére l'erreur 'tableau attendu'). Par exemple: Code :
Public P_typ_ParamPlsAcroteres() As ParametresAcrotere 'Tableau de variables de type ParametresAcrotere |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com