![]() |
| Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé. | |||||||
|
|||||||
| Général VBA Forum général VBA . Pour les logiciels spécifiques (Access, Excel, Word, ...), postez dans les bons sous forums. |
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) |
|
Invité régulier
![]() Date d'inscription: mai 2007
Messages: 10
|
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 |
|
|
|
|
|
#2 (permalink) |
![]() |
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...).
__________________
Si on vous donne une info qui marche, DITES-LE!!!! Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! N'oubliez pas de cliquer sur quand vous avez obtenu la réponse à votre question.------------ Je dois beaucoup de mes connaissances à mes erreurs! |
|
|
|
|
|
#3 (permalink) |
|
Invité régulier
![]() Date d'inscription: mai 2007
Messages: 10
|
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 :
Public Type ListeParametres 'Type param1 as integer param2 as boolean .... End Type Public typ_ParametresMur As ListeParametres 'Variable 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 :
With typ_ParametresMur .param1=empty .param2=empty .... end with Merci pour votre aide |
|
|
|
|
|
#4 (permalink) | |
|
Membre émérite
![]() Date d'inscription: février 2005
Localisation: France - Drôme
Messages: 942
|
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 :
Dim typ_Empty As ListeParametres LSet typ_ParametresMur = typ_Empty 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". _
__________________
Les bons réflexes VB/VBA: __ Option Explicit ___ Toujours compiler le code avant de tester ! (dans l'EDI, menu Débogage, commande Compiler) |
|
|
|
|
|
|
#5 (permalink) |
|
Invité régulier
![]() Date d'inscription: mai 2007
Messages: 10
|
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 |
|
|
|
|
|
#6 (permalink) | ||
|
Membre émérite
![]() Date d'inscription: février 2005
Localisation: France - Drôme
Messages: 942
|
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. _
__________________
Les bons réflexes VB/VBA: __ Option Explicit ___ Toujours compiler le code avant de tester ! (dans l'EDI, menu Débogage, commande Compiler) Dernière modification par =JBO= ; 18/11/2008 à 22h11 |
||
|
|
|
|
|
#7 (permalink) |
|
Invité régulier
![]() Date d'inscription: mai 2007
Messages: 10
|
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 Code :
Erase P_typ_ParamPlsAcroteres
|
|
|
|
![]() |
![]() |
||
Réinitialiser une variable de type personnalisé
|
||
Offres d'
emploi informatique
sur Lesjeudis.com
|
| Outils de la discussion | |
|
|