begin process at 2012 02 16 02:26:37
  Trouver un code source :
 
dans
 
Accueil > Forum > 

VB.NET et VB 2005

 > 

Divers

 > 

General

 > 

Pointer un label de manière dynamique


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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

Next


Cette 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 2005
Ce 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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,075 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales