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

Résolu
Paninak - 5 sept. 2012 à 11:03
 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.

3 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
5 sept. 2012 à 12:59
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)
3
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
5 sept. 2012 à 12:51
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
0
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.
0
Rejoignez-nous