Accueil > Forum > > > > Pointer un label de manière dynamique
Pointer un label de manière dynamique
lundi 1 juin 2009 à 17:05:32 |
Pointer un label de manière dynamique

kamagap
|
Bonjour à tous,
J'ai une petite question, ça ne doit pas être bien compliqué mais je cherche depuis un moment et je ne trouve pas. Voilà, j'ai une userform sur laquelle il y a une dizaine d'objets (textbox, button...). Je souhaiterai pouvoir changer la langue d'affichage. Pour simplifier le code, j'ai créé un tableau dans lequel j'ai placé dans la colonne 1 les noms des différents labels (label_1, button_3...), dans la colonne 2 les "captions" correspondants en français (bienvenue), et dans la 3 ceux correspondants en anglais (welcome). Ce que je voudrais faire c'est passer par une variable intermédiaire de type string, pointer sur la première colonne, stocker le nom du label dans ma variable, puis selon la langue sélectionner, modifier le caption du label en allant chercher la valeur dans l'une ou l'autre colonne. Voici le code que j'ai pour le moment et qui ne fonctionne pas:
"If langue = "Fr" Then For i_ = 1 To 10
label = Cells(i_, 1).Value label.Caption = Cells(i_, 2).Value Next Else For i_ = 1 To 10 label = Cells(i_, 1).Value label.Caption = Cells(i_, 3).Value Next End If"
Ce code fonctionne lorsque j'écris le nom du label en dur par exemple "label_1 = cells(i_,3).value" .
Voila, merci d'avance pour vos réponses.
|
|
lundi 1 juin 2009 à 20:25:27 |
Re : Pointer un label de manière dynamique

cyrilremy
|
Si je comprends bien, avec la ligne label = Cells(i_, 1).Value tu cherches à obtenir dans "label" l'objet label dont le nom est représenté par "Cells(i_,1).Value" ?
Le problème, c'est que Label est, justement, un label, et non pas un nom. En fait, label est de type "Label" et Cells(i_, 1).Value de type String (si c'est un nom).
Il te faudrait une boucle de type FOR EACH... NEXT, et vérifier pour chaque label de ton formulaire, si son nom est égal à "TaCellule.Value", et si c'est le cas, stocker ce label dans la variable "Label".
|
|
mardi 2 juin 2009 à 09:07:34 |
Re : Pointer un label de manière dynamique

kamagap
|
Merci de ta réponse cyrilremy! Si je comprends bien, il faut donc que je déclare ma variable "label" en tant que label et non pas en tant que string? D'après ce que tu dis ça donnerai:
if monlabel1.name=cells(i_,1).value then label=monlabel1 endif
Si c'est cela, peut-on alors écrire directement quelque chose du genre:
label.name=cells(i_, 1).value ?
Car en fait sinon je perds l'intérêt d'avoir une liste de labels puisque je dois les tester un par un. Ou bien ai-je mal compris?
Merci.
|
|
mardi 2 juin 2009 à 20:04:08 |
Re : Pointer un label de manière dynamique

cyrilremy
|
il faut donc que je déclare ma variable "label" en tant que label et non pas en tant que string? D'après ce que tu dis ça donnerai:
if monlabel1.name=cells(i_,1).value then label=monlabel1 endif C'est à peu près ça, oui. peut-on alors écrire directement quelque chose du genre: label.name=cells(i_, 1).value ?Hélas non... si tu fais cela, tu ne feras que changer le nom de "label", et tu obtiendras une erreur te disant qu'un objet portant ce nom existe déjà. je perds l'intérêt d'avoir une liste de labels puisque je dois les tester un par un. En réalité, il ne faut pas que tu les testes un par un, mais à l'aide d'une bouche "For Each". Cette boucle parcourt tous les objets d'un type donné dans un collection. En VB.Net, ça donne par exemple : For each l As Label In Me.Controls if l.Name=cells(i_,1).Value Then label=l Exit For End If NextCette boucle va effectuer l'action en italique (If... end If) pour chaque (For each) objet de type label dans la collection 'Me.Controls'. Une fois le bon label trouvé, on le stocke dans ta variable 'label' et on arrête de parcourir les éléments (Exit For). Bon courage à toi  Penser : Réponse acceptée !
|
|
mercredi 3 juin 2009 à 11:37:04 |
Re : Pointer un label de manière dynamique

kamagap
|
Merci pour tes réponses complètes! J'ai essayé un peu ça, mais je ne vois pas à quoi correspond le "me" de "me.controls"? J'ai un problème avec ton code car je ne peut pas déclarer directement "l" dans le "For Each". Je l'ai donc déclaré comme label en tête de programme mais ça ne marche pas. En cherchant dans l'aide, j'ai vu que "l" devait être déclaré en tant que "control" puisqu'il n'y a pas que des labels dans ma userform (il y aussi des boutons etc). J'ai donc essayé tout un tas de chose grâce à l'aide, mais il y une erreur récurrente pour le code suivant: "label.caption=cells(i_,3)" C'est une erreur 91 mais je ne comprends pas pourquoi. J'ai déclaré label comme un label, ça ne marche pas, comme un control, ça ne marche pas non plus, et j'ai ajouté un "Set label=l" au lieu de "label=l", mais toujours rien. As-tu une idée? Je suis désolé, j'ai un peu de mal! J'a déjà fait pas mal de programmation en C, C++ mais le VBA je débute vraiment! Merci pour ton aide et ta patience en tout cas! 
|
|
mercredi 3 juin 2009 à 16:31:38 |
Re : Pointer un label de manière dynamique

cyrilremy
|
Ah, c'est en VBA... Vous êtes ici : Thèmes / VB.NET et VB 2005Ce que je te donnais était du VB.Net... en VBA je sais pas trop comment faire. En ce qui concerne l'erreur 91, je sais pas du tout. As-tu plus de détails sur cette erreur ? (Texte affiché) ?
|
|
jeudi 4 juin 2009 à 08:51:47 |
Re : Pointer un label de manière dynamique

kamagap
|
Oui effectivement c'est VBA, j'ai oublié de le préciser! Mais ce n'est pas grave car en fait mon application fonctionne! Je n'y ai pas retouché mais le fait de la relancer ce matin ça a marché! Voilà le code final:
"Private Sub but_fr_en_Click() Dim langue As String Dim i_ As Integer Dim l As Control Dim label As Object 'Ouverture de la page Worksheets("Fra_En").Activate 'Reconnaissance de la langue actuelle langue = Range("d1").Value 'Modification de la langue sélectionnée If langue = "Fr" Then langue = "En" Else langue = "Fr" End If 'Enregistrement de la langue Range("d1").Value = langue 'Passage des labels et buttons en français If langue = "Fr" Then For i_ = 2 To Controls.Count 'Recherche des labels de la collection dans la page Fra_En For Each l In Controls If l.Name = Cells(i_, 1).Value Then Set label = l Exit For End If Next 'Modification du caption du label sélectionné par la valeur en français label.Caption = Cells(i_, 2).Value Next 'Même procédé pour le passage à l'anglais Else For i_ = 2 To Controls.Count For Each l In Controls If l.Name = Cells(i_, 1).Value Then Set label = l Exit For End If Next label.Caption = Cells(i_, 3).Value Next End If End Sub"
En tout cas merci beaucoup pour ton aide!!! Bonne journée!!!
|
|
jeudi 4 juin 2009 à 14:14:10 |
Re : Pointer un label de manière dynamique

kamagap
|
C'est encore moi! Cela fonctionne effectivement correctement, mais je ne sais pas comment faire pour appliquer ce changement à tout les userforms de l'application! Cela fonctionnerai-t-il si je crée une collection qui engloberait tous les labels et buttons de l'application?
Merci.
|
|
dimanche 25 avril 2010 à 10:41:55 |
Re : Pointer un label de manière dynamique

Kikouyou1080
|
Bonjour, je me permet de faire remonter ce post car j'ai le meme genre de soucis en vb.net.
Je souhaiterai modifier la visibilités de labels a l'aide d'une boucle "pour".
L'idée est d'avoir des coordonnées au label (avec les index j'imagine)du genre
lbl11 lbl21 lbl31 ...
lbl12 lbl22 lbl32 ...
... ... ...
étant donné que le nombre maximal de label pouvant être affiché est connu, je les ai tous créé en invisible et je voudrais rendre certains labels visible comme suit :
Code Visual Basic :
Dim xy As Integer
For i = 1 To nbLettreChoisi
For j = 1 To NbMaxProposition
xy = CUInt(CStr(i & j))
lbl(xy).Visible = True
Next j
Next i
En recherchant sur le net, j'ai cru comprendre qu'il fallait ajouter un controle avec des "name" identiques pour chaque label et les index souhaités alors, j'ai tenté de créer un control pour mettre tout mes labels indexé manuellement 11, 12, 13, ... Mais ensuite je n'arrivais pas a donner le même nom a tous ni a appeler le control.
Merci pour votre précieuse aide!
|
|
dimanche 25 avril 2010 à 12:46:44 |
Re : Pointer un label de manière dynamique

cyrilremy
|
Eh bin, pour ce qui est de VB.Net, tu peux appliquer ce qu'on disait dans les posts précédents, par exemple créer une fonction GetLabelByName qui prend en paramètres le nom du label et qui retourne le label lui-même :
pour chaque label (tous contenus dans l'objet Me.Controls)
si le nom du label est le paramètre,
alors on retourne le label et on quitte la fonction.
tu utilises la fonction pour obtenir un objet "label" dont tu modifies ensuite la propriété Visible.
Voilà voilà 
|
|
Cette discussion est classée dans : label, colonne, cells, langue, pointer
Répondre à ce message
Sujets en rapport avec ce message
largeur de colonne sous excell [ par saib ]
salutvoila je veut redimensionner des cellules et des lignes dans une feuille excell via une macro (donc vba), j'utilise donc cells(x,y).rowheight et
Label en diagonale [ par Damdamdeo ]
Salut,G un flexgrid. Je n'ai pas mis de 1ère ligne fixe pour une question de place.Pourtant, je voudrais donner un titre à chaque colonne. Pour ça, G
Récupérer les données filtrées sous Excel [ par Erkan73 ]
Bonjour,Dans Excel, J'ai un tableau avec 4 colonnes. Je veux pouvoir récupérer le résutat (qui se trouve dans la 4ème colonne) du filtrage des 3 prem
Sélection de plusieurs plages en excel avec VB6 [ par ndsaerith ]
Coucou tout le mondeVoila g un petit pb de sélection de plages.En fait g un grand tableau, et je doit faire un graphique par colonne, je dois dc pour
correction de la conversion numerique automatique dexcel [ par la_bavaroise ]
Bonjour a tous, Voici mon probleme: dans une base de donnees sur excel, des noms en colonne C correspondent a des dates en colonne B et a des chiffres
[VBA Excel] recuperer la lettre d'une colonne [ par tof008 ]
Hello! Voila mon problème : Je dois ajouter automatiquement sur une ligne un nouveau mois, puis remplir la colonne de données...Je fais donc une boucl
problème avec procédure .find [ par etoumat ]
Bonjour à tous.J'ai un petit souci avec une procédure find.En effet je veux que vba recherche une lettre, un mots ou tout autre chose dans une feuille
je ne comprenda pas la fonction cells [ par raphael_george ]
Salutje n'arrive pas a utiliser la fonction cells.je voudrais pouvoir aller dans la colonne suivante.j'ouvre un userform par un double clic sur une ce
récupérer la valeur de l?unique cellule colorée d?une colonne [ par ludo_wob ]
bonjour je veux créer une FONCTION, où je selectionnerais une colonne et la fonction me donnerait la valeur de la cellule qui est colorée en jaune da
Comment puis-je placer le contenu de la seconde colonne de ma combobox multicolonne dans un label ? [ par VB_PtitCat ]
Bonjours, voilà comme je n'est reçu aucune réponse pour l'affichage de toutes les colonne d'une combobox, je supose que celà est impossible, puisque j
Livres en rapport
|
Derniers Blogs
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
ACCES ODBCACCES ODBC par yannickcottin
Cliquez pour lire la suite par yannickcottin
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|