Automatisation d'une petite fonction

romanosky35 Messages postés 50 Date d'inscription samedi 16 janvier 2010 Statut Membre Dernière intervention 23 juin 2011 - 5 avril 2009 à 16:02
troxsa Messages postés 553 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 2 octobre 2016 - 8 avril 2009 à 22:59
Bonjour,

Connaissez-vous un moyen d'automatiser une fonction ?
Je vous explique.. j'ai des données dans un tableau à 2 dimensions -> Tabdonnees(Années,Pays).
J'ai mi les années dans un combobox, et je voudrai qu'en cliquant sur une année, il m'affiche dans des textbox le chiffre correspondant à chaque pays.
Sauf que j'ai 29 Pays...

Ce qui m'oblige à écrire (si possible avec un Select Case):

Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
        '
        '  
        Dim i As Integer = ComboBox1.SelectedIndex
        Select i
            Case 0
           TextBox1.Text = Tabdonnees(1, 1)
           TextBox2.Text = Tabdonnees(1, 2)
           TextBox3.Text = Tabdonnees(1, 3)
           TextBox4.Text = Tabdonnees(1, 4)
           ...
            Case 1
           TextBox1.Text = Tabdonnees(1, 1)
           TextBox2.Text = Tabdonnees(1, 2)
           TextBox3.Text = Tabdonnees(1, 3)
           TextBox4.Text = Tabdonnees(1, 4)
           ...
        End Select
    End Sub

Mais j'ai 16 années (donc 16 cas) et 29 pays !!

Donc je voudrais savoir comment automatiser cette commande.. j'ai tenté ceci :

Dim i As Integer = ComboBox1.SelectedIndex
   Select i
     Case 0
        For Each num As Integer
           TextBox(num).Text = Tabdonnees(1, num)
        Next num

   End Select

Mais il souligne "Integer".. et.; bah je suis coincé.
De même le premier indice, je me dit que c'est Case + 1..
Ca donnerait quelque chose comme ca :

Case 0 To 16

        For Each num As Integer

           TextBox(num).Text = Tabdonnees(Case+1, num)

        Next num

Mais bon, c'est pareil je ne sais pas comment écrire ça.

Si jamais quelqu'un a une idée elle est la bienvenue !

Merci d'avance :)

12 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
5 avril 2009 à 16:44
En supposant que tes textbox soient posés directement sur la form, et non pas sur un panel ou groupbox, ....
En supposant que ton tableau Année va de 1 à 16 et non pas de 0 à 15
En supposant que ton tableau Pays va de 1 à 29 et non pas de 0 à 28

Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
  Dim i As Integer = ComboBox1.SelectedIndex +1

  For j as integer = 1 to 29
    Me.Controls("TextBox" & j.ToString).Text = Tabdonnees(i, j)
  next
End Sub

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
romanosky35 Messages postés 50 Date d'inscription samedi 16 janvier 2010 Statut Membre Dernière intervention 23 juin 2011
5 avril 2009 à 17:02
Arf.; ca ne fonctionne pas.

Je me suis mal expliqué, désolé !

Mon tableau est à double dimension, ca donne :

Année      Allemagne      Autriche   ....   Suède

1991           142                  201              87

1992          

1993

...

2006

Et je me suis trompé ! il y a bien 16 lignes ("Année" + les 15 ans)
(mais j'ai mi que les 15 années dans le Combobox.. donc y'a 15 item)
mais il n'y a que 28 colonnes ("Année" + les 27 pays de l'UE)

Voilà.. désolé mon énoncé manquait de précision.

Du coup si je sélectionne 1991 (1er item du Combobox) il me faut :
dans le textbox1 : Tabdonnees (1,1)
dans le textbox1 : Tabdonnees (1,2)
dans le textbox1 : Tabdonnees (1,3)
...

Tu crois que tu pourrais me redonner des lignes des codes en prenant en compte ceci ???
Pendant ce temps là.. jvé "tenter" de trouver la solution..

Merci d'avance.
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
5 avril 2009 à 17:05
Les lignes de codes sont les mêmes sauf que pour j tu ira de 1 à 27

Si ça marche pas, indique le message d'erreur que tu obtiens.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
romanosky35 Messages postés 50 Date d'inscription samedi 16 janvier 2010 Statut Membre Dernière intervention 23 juin 2011
5 avril 2009 à 17:05
J'ai mi ceci :

Dim i As Integer = ComboBox1.SelectedIndex
(j'ai donc enlevé le +1)

        For j As Integer = 0 To 27
            Me.Controls("TextBox" & j.ToString).Text = Tabdonnees(i, j)
        Next
(j'ai mi 0 To 27.. ca fait 28 colonnes ca nan ?)

Je lance, il me marque :
"La référence d'objet n'est pas définie à une instance d'un objet"
en soulignant ce que j'ai mi en bleu..
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
romanosky35 Messages postés 50 Date d'inscription samedi 16 janvier 2010 Statut Membre Dernière intervention 23 juin 2011
5 avril 2009 à 17:07
j'ai mi de 1 à 27.. j'ai les noms des pays qui s'affichent dans les textbox..

on y est presque.. :)
0
romanosky35 Messages postés 50 Date d'inscription samedi 16 janvier 2010 Statut Membre Dernière intervention 23 juin 2011
5 avril 2009 à 17:10
Bon bah en fait c'était bien ca :

        Dim i As Integer = ComboBox1.SelectedIndex + 1

        For j As Integer = 1 To 27
            Me.Controls("TextBox" & j.ToString).Text = Tabdonnees(i, j)
        Next

MERCI BEAUCOUP POUR TON AIDE !!
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
5 avril 2009 à 17:12
Si tu as le nom du pays qui s'affiche c'est que tu es sur la première ligne du tableau (index 0) correspondante à la première ligne du combo (index 0)

C'est pour cela que j'avais rajouter 1 à l'index du combo pour tomber sur le bonne ligne du tableau

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
romanosky35 Messages postés 50 Date d'inscription samedi 16 janvier 2010 Statut Membre Dernière intervention 23 juin 2011
5 avril 2009 à 17:22
Oui c'est vrai, désolé.. j'ai... "tenté" ! :)

Et... euh.. Excuses moi je te dérange encore...


Si je veux afficher dans un enième TextBox la moyenne des 27 chiffres, je fais comment ?


Moi évidemment j'ai :


Somme = TextBox1 + Text Box 2....+ text Box 27

Moyenne = Somme / 27

TextBox30.Text = Moyenne


mais.. en automatisé ca donne quoi ??

Et pareil.. j'ai un bouton à côté.. jveu qu'en cliquant dessus, mon PictureBox affiche le graphique associé à l'année (j'ai fai les 15, je les ai enregistrés en image sous le nom "1991.jpg" , "1992.jpg")
Jme di qu'on doit pouvoir aussi faire une boucle genre :

Button_Click
Dim i As Integer = ComboBox1.SelectedIndex + 1990
picture.Load(i.ToString).jpg

qu'en pesnes-tu ?

dsl.. j'dois te saouler avec toutes mes questions.. !
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
5 avril 2009 à 17:31
Toujours dans la même boucle :

Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
  Dim i As Integer = ComboBox1.SelectedIndex +1
  Dim somme as Integer

  For j as integer = 1 to 29
    Me.Controls("TextBox" & j.ToString).Text = Tabdonnees(i, j)
    somme += Tabdonnees(i,j)
  next
  TextBox30.Text = (somme/27).ToString
 
End Sub

.....
picture.Load(i.ToString & ".jpg" )
note que d'écrire a +1 revient à écrire a a+1

---- Sevyc64  (alias Casy) ----<hr size ="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
romanosky35 Messages postés 50 Date d'inscription samedi 16 janvier 2010 Statut Membre Dernière intervention 23 juin 2011
5 avril 2009 à 17:38
Dim i As Integer = ComboBox1.SelectedIndex + 1
        PictureBox1.Load("img" & i.ToString & ".jpg")

Il me dit qu'il ne trouve pas le fichier 1.jpg..
Normal, il n'existe pas.

Comment faire pour que ComboBox1.SelectedIndex soit égal à l'item ?
(et donc ici à 1991)

Ah bah..oui j'ai fait un autre bouton juste pour le graphique..

Donc en fait ca serait plutôt :
Dim i As Integer = ComboBox1.SelectedIndex (sans le + 1 puisque là j'ai la date que je veux)

        PictureBox1.Load("img" & i.ToString & ".jpg")

...
0
romanosky35 Messages postés 50 Date d'inscription samedi 16 janvier 2010 Statut Membre Dernière intervention 23 juin 2011
5 avril 2009 à 17:41
Trouvé !

Dim i As Integer = ComboBox1.SelectedItem
        PictureBox1.Load("img" & i.ToString & ".jpg")

tout simplement...

Bon et bien je vais pouvoir finir mon projet.. (normalement)
Merci encore pour ton aide !
Ca fait 2 années de suite que tu me rends bien service.
MERCI pour le code, les explications.. C'est vraiment sympa de ta part d'aider les autres comme ça.

Romain.
0
troxsa Messages postés 553 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 2 octobre 2016 1
8 avril 2009 à 22:59
Bonjour,

je vois que j'arrive trop tard :)
pense a chaque fois que tu poste un message a mettre le bout de code et le message erreur et/ou exception

Cordialement,
0
Rejoignez-nous