[Catégorie modifiée .Net -> VBA] Excel Label créé et supprimé dynamiquement:dépa [Résolu]

Paninak - 5 sept. 2012 à 11:03 - Dernière réponse :  Paninak
- 5 sept. 2012 à 18:32
Bonjour à tous

je crée une dizaine de label (ou plus ou moins selon besoin) dans un UserForm de façon dynamique:
Set bouton = UserForms(usff).MultiPage1.Pages(0).Add("Forms.Label.1", , True)
With bouton

a = Mid(.Name, 6, Len(.Name) - 5) 'N° du Label
End With

je récupère le N°de Label dans "a" et conserve les N° du premier et du dernier label créé:
If NbLabArtDeb 0 Then NbLabArtDeb a
If a < NbLabArtDeb Then NbLabArtDeb = a
If a > NbLabArtFin Then NbLabArtFin = a

j'efface les labels dynamiquement:
For i = NbLabArtD To NbLabArtF
For Each Ctrol In UserForms(usff).Controls
If Ctrol.Name = "Label" & i Then UserForms(usff).Controls.Remove Ctrol.Name
Next Ctrol
Next i
NbLabArtD 0: NbLabArtF 0

et je les crée à nouveau... et c'est là qu'il y a un problème:
Le Nombre de labels créés s'incrémente pour le User jusqu'à arriver a plus de 250.
Ainsi a = Mid(.Name, 6, Len(.Name) - 5) 'N° du Label créé passe de 10 à 20, puis de 20 à 30 etc.

La question est :comment effacer le label sur l'User ET POUR l'User.
Merci pour des suggestions, des liens de discutions. Je ne trouve que des discutions pour effacer dynamiquement un label.
Afficher la suite 

3 réponses

Répondre au sujet
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscriptionModérateurStatut 28 août 2015 Dernière intervention - 5 sept. 2012 à 12:59
+3
Utile
Salut

D'abord, quelques règles simples :
- Choisir la catégorie en rapport avec ta question. Tu fais du VBA, pas du .Net
- Quand tu colles du code, utilise la coloration syntaxique (3ème icone à droite) = plus facile à relire.
Merci

Es-tu sûr que le Remove a bien lieu ?
Pour le savoir, débogage :
- F9 sur une ligne de code; elle change de couleur
Le programme s'y arrêtera au prochain passage
Survole avec la souris tes variables pour visualiser leur contenu, ou va dans la fenêtre de debogage (Ctrl-G) et tape
? maVariable
pour qu'elle s'inscrive dans la fenêtre.
- F8 (VB6) ou F10 (.Net) pour avancer d'une ligne de code
- F5 pour continuer normalement

Si oui, il est possible que Excel ne détruise pas les objets dans sa collection lors du Remove.
Dans ce cas, essaye de conserver tes premiers labels créés et de jouer sur leur propriété .Visible

Je viens de faire l'essai (Excel 2010) d'ajout et de suppression de Label dans un MultiPage : cela fonctionne.
Les labels recréés portent le même n° et son réellement détruits.
J'en ai créé puis détruit une vingtaine et ce, plusieurs fois sans jamais atteindre 250, qui pourrait être une limite plausible du nombre de controls dans une UserForm.

Quelle version de Excel ?

Vala
Jack, =fr MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Jack
NHenry 14133 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 22 avril 2018 Dernière intervention - 5 sept. 2012 à 12:51
0
Utile
Bonjour,

Pourquoi ne pas les rendre simplement invisible avec Controle1.Visible=False ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
Commenter la réponse de NHenry
0
Utile
bonsoir,
merci pour les réponse, je vais tenter de vérifier que les labels sont bien effacé par le debogueur.
et merci pour les conseils du forum, j'y ferai attention.
Je clos la discution car je ne vais pas traiter le problème de suite.
Commenter la réponse de Paninak

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.