Faire varier une variables dans une boucle.

Signaler
-
Messages postés
7202
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
15 janvier 2021
-
Bonjour,
J'ai beaucoup de petits labels nommés umail1 , umail2, umail3, etc.
J'ai un tableau de données a deux dimentions.
Je ne me sert que de la colonne 1 pour les labels umail...
J'ai donc fait une boucle de ce type :
Dim l As Integer
Dim EMAIL As var
l = 0
Do Until l > 8
EMAIL = "Umail" & l + 1 & ".text"
EMAIL = MAIL(l, 0)
l = l + 1
Loop


J'aimerais pouvoir sélectionner mes labels (umail1, umail2, umail3 .... au moyen de cette boucle et de les remplir avec la cellule du tableau correspondante mais je n'y parvient pas il ne se passe rien ...
Je ne suis pas très doué en VB.
Merci de votre aide !

13 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
EMAIL = "Umail" & l + 1 & ".text"
EMAIL = MAIL(l, 0)

1) Ecrit ainsi : EMAIL est une chaîne de caractères
2) écrire toto = "blabla" puis toto = "bonjour" a pour seul résultat (c'est tellement évident) que toto = "bonjour" !
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Bonjour,
dans :
EMAIL = "Umail" & l + 1 & ".text"
EMAIL = MAIL(l, 0)

ta seconde ligne affecte à EMAIL la valeur du tableau au lieu d'affecter au tableau la valeur de EMAIL !
Devrait être :
 MAIL(l, 0) = EMAIL 


Observation : c'est la le B.A.BA, y compris en logique seule (sans code)
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Je ne veux pas affecter une valeur au tableau ...
Je veux affecter les valeurs du tableau à des labels només umail1, umail 2, umail3, etc.
Et je ne parviens pas à le faire.
je pensais qu'en passant par EMAIL, vb prendrais sa valeur, et utiliserais sa valeur (ex : umail1.text) et modifierai le label du nom umail1.text ...
Mais ce serais trop facile .. :/
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Veux-tu bien t'efforcer d'intervenir ici toujours sous le pseudo Ptitfils (en te connectant avec ce pseudo) ?
Dans l'autre discussion que tu as également ouverte sous "Théo", tu as ensuite répondu sous "Ptitfils", ce qui finit par semer un doute et ce d'autant que :
- Théo disait développer sous VB6
- Ptitfils montrait un code VB.Net
- lorsqu'une discussion est résolue, seul Ptifils peut la libérer (à condition d'avoir ouvert la discussion sous "Ptitfils") en cliquant sur le tag RESOLU au niveau du tout premier message !
Il est important que tu observes cette discipline.

Messages postés
9
Date d'inscription
vendredi 24 janvier 2014
Statut
Membre
Dernière intervention
17 juin 2015

Je ne peu donc pas résoudre la question d'hier ... :/
je me connecterai toujours sous ce pseudo, je n'en n'avais pas lors de mon premier message.
Et c'est en VB.net que je développe, toute mes excuses ! :)
Messages postés
9
Date d'inscription
vendredi 24 janvier 2014
Statut
Membre
Dernière intervention
17 juin 2015

Oui ...
Je souhaite convertir cette chaîne de caractère en le paramètre que je souhaite modifier ...
En gros la chaine : MAIL = "umail1.text"
et je souhaite ensuite que vb comprenne :
umail1.text = MAIL(l,0)
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Je vais marquer moi-même comme résolue ton autre discussion.

En ce qui concerne la présente :
je ne suis pas vb.nettiste
Attends donc qu'un vb.nettiste passe par là.
Entre temps, lis-donc cette discussion. Je pense qu'elle devrait t'intéresser grandement
http://www.commentcamarche.net/forum/affich-18721602-groupe-de-controle-visual-basic-2010
Messages postés
15393
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
16 janvier 2021
500
Bonjour que ce soit pour cette question ou la précédente,

VB.Net est un langage objet, ce qui, quand on s'en sert, simplifie grandement le codage.
Par exemple exit les tableaux à deux dimensions, remplacés par les list (ou autre collection) d'objets, ou une ligne est représentée par un enregistrement, et chaque "colonne" par les propriétés de l'objet.

Il est ensuite très simple d'affecter le contenu d'une donnée à un contrôle, soit par le code, soit par binding.

Mais pour comprendre tout ça, il faut commencer par apprendre ce qu'est VB.Net. Pour cela je t'invite à suivre ce cours.
http://plasserre.developpez.com/cours/vb-net/

Tu pourras ensuite regarder cet exemple de serialisation xml (export vers un fichier xml) avec Linq et une classe Personne
http://codes-sources.commentcamarche.net/forum/affich-10041677-modifier-des-donnees-dans-une-ligne-datagridview#7 pour ta question précédente.

et celui-ci pour le binding
http://codes-sources.commentcamarche.net/faq/1291-utilisation-du-binding-au-travers-de-l-objet-databindingsource
Messages postés
7202
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
15 janvier 2021
118
Bonjour,

Voici un exemple de boucle sur des contrôles(Label):

  Dim i As Integer
        For Each ctrl As Control In Me.Controls
            If TypeOf ctrl Is Label Then
                i = ctrl.TabIndex
                ctrl.Text = "EMAIL" & i
            End If
        Next


Tu remplace EMAIL par les données de ton tableau
Messages postés
9
Date d'inscription
vendredi 24 janvier 2014
Statut
Membre
Dernière intervention
17 juin 2015

Et si mes tabIndex ne se suivent pas correctement ?
je souhaite seulement arriver à :

umail1.text = MAIL(0,0)

MAIS umail1.text c'est la VALEUR de EMAIL
EMAIL = "Umail" & i + 1 & ".text"

Comment utiliser la VALEUR de EMAIL comme objet ou comme prpriété à modifier ?

Parce que dans ton code je ne vois pas comment on identifie le label à modifier ...
Messages postés
7202
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
15 janvier 2021
118
Pour identifier le label par son nom:

 Dim nom As String
        For Each ctrl As Control In Me.Controls
            If TypeOf ctrl Is Label Then
                nom = ctrl.Name
                MsgBox(nom)
            End If
        Next


Et si mes tabIndex ne se suivent pas correctement ?

c'est à toi de les mettre correctement!

Mais là je commence a avoir du mal à te suivre
Messages postés
9
Date d'inscription
vendredi 24 janvier 2014
Statut
Membre
Dernière intervention
17 juin 2015

Je ne comprend toujours pas d'ou sort le ctrl ...

Mes labels existent déjà ! il sont nomé Umail1, umail2, umail3

Pour modifier leurs textes il faut taper :

Umail1.text = MAIL(0,0)
Umail2.text = MAIL(1,0)
Umail3.text = MAIL(2,0)

Le problème : C'est que j'ai beaucoup de labels qui doivent prendre les valeurs du tableau MAIL(40,5)

Donc j'ai voulu passer par une boucle étant donné qu'il n'y à qu'un chiffre qui change, 1,2,3,4, ...

Je veux donc : faire :
("Umail" & (i+1)).text = MAIL(i,0)

Puis répéter l'opération avec le i toujours supérieur de 1 à chaque boucle jusque la fin.

Seulement je ne parvient pas à faire ça !

J'ai tout essayé !

EMAIL = "Umail" & i+1
EMAIL.text = MAIL(i,0)

Me.controls(EMAIL).text = MAIL(i,0)

Pas moyen ...
c'est moi qui vous ne suit plus la ...
Messages postés
7202
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
15 janvier 2021
118
Je ne comprend toujours pas d'ou sort le ctrl ...


Il faut quand même savoir lire un code:

ctrl As Control

c'est un contrôle, il est déclaré en tant que tel

dans la ligne suivante

If TypeOf ctrl Is Label Then

si ce contrôle est un Label on boucle sur tous les Label

C'est le B A BA

Donc voici ta boucle, a condition que tes labels soient bien répertoriés :

 Dim i As Integer
        For Each ctrl As Control In Me.Controls
            If TypeOf ctrl Is Label Then
                i = ctrl.TabIndex
                ctrl.Text = "MAIL(" & i - 1 & ", 0)"
            End If
        Next