Table à 2 valeurs

Résolu
Herve_be Messages postés 1015 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 10 mars 2024 - 19 mars 2012 à 13:42
Herve_be Messages postés 1015 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 10 mars 2024 - 28 avril 2012 à 16:50
Bonjour,
Je cherche un moyen de saisir un tableau à 2 valeurs comme ceci

1 x y
2 x y
3 x y
4 x y
...

Le nombre de lignes est variable.
L'utilisateur a le choix entre 3 valeurs pour x et 2 valeurs pour y.
Une idée ?
Merci d'avance

33 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
20 mars 2012 à 11:44
Il en existe, certes === >>
Entre autres : listview, MSFlexGrid, ...
Mais pour ce qui est de "dérouler", il va te falloir gérer toi-même, car ne se comportent pas comme une combobox.
Et par ailleurs : les comboboxes de VB6 ne se comportent, elles, pas comme celles de VBA (qui acceptent plusieurs vraies colonnes). Les "colonnes" des combos VB6 ne sont que des colonnes de disposition d'affichage, sans pouvoir traiter et distinguer les articles relevant d'une colonne et correspondant à l'autre).


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
19 mars 2012 à 13:52
Bonjour,
Une idée ?

Oui : un bon million.
Nous les exposerons volontiers lorsque tu auras exposé clairement ta demande.
Dans l'état actuel des choses :
- une listbox pour lex x
- une listbox pour les y
- un commandbutton
à chaque clic sur le commandbutton === >>> redim preserve pour le tableau et y ajouter x en colonne 1 et y en colonne 2
Ppour ce qui est de Redim Préserve : lire ce dont il s'agit dans ton aide VB6

Reviens avec un bout de code mettant en oeuvre tout cela.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Herve_be Messages postés 1015 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 10 mars 2024 2
19 mars 2012 à 14:56
Merci pour la réponse.
Redim preserve permet de redimensionner un tableau sans modifier les données qui s'y trouvent déjà.
En fait je souhaite le redimensionner une seule fois : on entre dans une zone le nombre de lignes et ça ne change plus.
Une fois la dimension établie, le tableau est initialisé par exemple comme ceci

Ensuite, l'utilisateur peut modifier : dans la 1ère colonne il a le choix entre A et B, dans la seconde entre X, Y ou Z.
0
Utilisateur anonyme
19 mars 2012 à 16:42
Bonjour,

De mémoire. (Cela fait une mèche que je n'ai pas programmé en VB6)

sub TableauEnMemire()
a = inputbox("Combien de lignes ?")
dim tableau(a,2)
for i = 1 to a
tableau(i,1)="A"
tableau (i,2) = "X")
next
Ajouter ce qui manque pour gérer chaque adresse du tableau
end sub

Ceci dit, pour modifier une cellule en particulier, et pour pouvoir la modifier, là, cela prendra probablement un datagrid, un flexgrid ou quelque chose du genre. Et là, je ne réinstallerai pas VB6 pour le seul plaisir de me rafraîchir la mémoire...
0

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

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
19 mars 2012 à 16:47
on entre dans une zone le nombre de lignes et ça ne change plus.

et déjà plus précis que
Le nombre de lignes est variable

Donc : plus besoin d'un redim preserve ! un simple Redim
C'est quoi, le "graphique" que tu montres ?
- une représentation "imagée" d'une matrice ?
- autre chose ? (et quoi ?)

Montre-nous le bout de code que tu as tenté (il nous "parlera" peut-être un peu).

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
19 mars 2012 à 20:19
Salut

les index commencent par 0 non ?
dim tableau(a,1)
for i = 0 to a-1
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
19 mars 2012 à 20:30
Bonjour, ShayW
Pas forcément .
Existe Option Base (avec un choix entre 0 et 1)
Existe également la possibilité de démarrer à 1 par (exemple) Dim toto(1 to 10, 1 to 4)


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
20 mars 2012 à 00:06
Bonsoir,

En plus,
Dim tableau(a,1) requiert une constante.

Autre solution que celle proposée par ucfoutu,

Dim tableau() As Integer
a = inputbox("Combien de lignes ?")
Redim Preserve tableau(a,2)

Avantage de cette dernière,tableau peut être re-redimensionner.


[] Ce qui va sans dire. va mieux en le disant.
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
20 mars 2012 à 00:13
re-redimensionner, mais uniquement le premier indice.
Le second doit rester fixe.



[] Ce qui va sans dire. va mieux en le disant.
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
20 mars 2012 à 01:54
Je viens de vérifier,

Dim tableau() As Integer
a = inputbox("Combien de lignes ?")
Redim Preserve tableau(a,2)

tableau ne peut être re-redimensionner
que sur le deuxième indice.

Redim Preserve tableau(a,4)

Alors que :

Dim tableau() As Integer
a = inputbox("Combien de lignes ?")
Redim tableau(a,2)

Peut l'être pour les deux indice, (avec perte de données bien sûr)

Redim tableau(a+4,4)
Redim tableau(a+7,8)

[] Ce qui va sans dire. va mieux en le disant.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
20 mars 2012 à 06:56
Ne nous égarons pas.
Son problème n'est plus celui du dimensionnement du tableau (et un simple redim, y compris avec variable) fera l'affaire.
Il peut même se payer le luxe d'un redim preserve d'un tableau de structures à une seule dimension, où chaque élément de l'unique colonne est composé de deux membres de la structure.
Le problème demeure entier pour ce qui suit et que l'on ne comprendra que lorsqu'une réponse aura été apportée à la question que je posais, à savoir :
C'est quoi, le "graphique" que tu montres ?
- une représentation "imagée" d'une matrice ?
- autre chose ? (et quoi ?)

Montre-nous le bout de code que tu as tenté (il nous "parlera" peut-être un peu).


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Herve_be Messages postés 1015 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 10 mars 2024 2
20 mars 2012 à 09:15
Bonjour,
Effectivement, ma question ne concerne pas la structure du tableau mais sa présentation à l'écran.
Je ne peux pas vous montrer un bout de code puisque c'est justement ce que je cherche à écrire.
Je vais essayer d'expliciter ma question avec un exemple concret, simplifié toutefois.

Il s'agit de calculer certaines caractéristiques d'un luminaire constitué de LED.
Ce programme existe mais dans sa version actuelle, toutes les LED ont les mêmes caractéristiques; voici un exemple d'écran


L'utilisateur indique le nombre total de LED dans une zone, disons n.
Là, je peux construire ma table, pas de problème.
Ensuite, pour chaque LED, l'utilisateur doit pouvoir choisir 2 éléments : la couleur (bleue ou blanche) et l'angle d'ouverture (60°, 90° ou 120°).

Une première possibilité est de prévoir un nombre max de lignes, disons N et autant de zones sur une form.
Il est facile de masquer les zones qui ne peuvent pas être utilisées (N-n).
Ceci m'oblige cependant à construire une form relativement haute dont la plus grande partie sera en général vide.
Pas très élégant.

Je pensais donc pouvoir dérouler le tableau comme ceci

et permettre à l'utilisateur de modifier les 2è et 3è colonnes en autorisant un nombre limité de valeurs.
Voilà pourquoi je cherche des idées.
Merci pour votre aide
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
20 mars 2012 à 09:56
Effectivement, ma question ne concerne pas la structure du tableau mais sa présentation à l'écran.

Commence donc par choisir le contrôle qui te permettra cet affichage, parmi ceux que t'offre VB6 !
Je ne peux pas vous montrer un bout de code puisque c'est justement ce que je cherche à écrire.

Car cette partie-là dépendra de ton choix, précisément !
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Herve_be Messages postés 1015 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 10 mars 2024 2
20 mars 2012 à 10:04
Commence donc par choisir le contrôle qui te permettra cet affichage, parmi ceux que t'offre VB6 !
Je pose la question autrement :
existe-t-il un contrôle VB6 qui me permet de dérouler une table comme une ComboBox
cette table étant constituée de plusieurs colonnes dont les valeurs sont modifiables individuellement ?
0
Herve_be Messages postés 1015 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 10 mars 2024 2
21 mars 2012 à 12:36
Bonjour
Merci pour votre aide : j'ai utilisé MSFlexgrid que je ne connaissais pas (il y en a tellement ...).
J'ai trouvé un exemple qui utilise 2 images pour simuler des zones checked et unchecked.
Pour la dérouler, c'est très simple : je joue sur la hauteur du contrôle quand il reçoit le focus, voir exemple ci-dessous (le contrôle de gauche est déroulé, celui de droite pas : on voit seulement les titres).

Le seul petit problème que j'ai encore est pour centrer les images dans les colonnes : je ne sais pas pourquoi ceci ne fonctionne pas
For T = 0 To 5
Grid(Index).ColAlignment(T) = flexAlignCenterCenter
Next T
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
21 mars 2012 à 12:51
Bonjour,

Déjà :
For T = 0 To 5
Grid( T ).ColAlignment(T) = flexAlignCenterCenter
Next T
Mais ça c' est pour le texte.

Pour les images c' est:
Grid(T).CellPictureAlignment = flexAlignCenterCenter

[] Ce qui va sans dire. va mieux en le disant.
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
21 mars 2012 à 12:56
OUPS! désolé .
C' est bien Grid(Index)...
J'ai confondu index de la collection
et T index de la colonne. [] Ce qui va sans dire. va mieux en le disant.
0
Herve_be Messages postés 1015 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 10 mars 2024 2
21 mars 2012 à 13:03
Pour les images c'est ceci alors ?
Grid(Index).CellPictureAlignment(T) = flexAlignCenterCenter


Mais pourquoi le texte des titres n'est-il pas centré avec
Grid(Index).ColAlignment(T) = flexAlignCenterCenter
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
21 mars 2012 à 13:52
essaies avec:

With Grid(Index)
For T = 0 To 5
.Col=T
Grid(Index).ColAlignment(T) = flexAlignCenterCenter
For i=0 to .Rows-1
.Row=i
.CellPictureAlignment = flexAlignCenterCenter
Next i
Next T
End With [] Ce qui va sans dire. va mieux en le disant.
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
21 mars 2012 à 14:06
essaies aussi :

With Grid(Index)
For T = 0 To 5
.Col=T
For i=0 to .Rows-1
.Row=i
.CellAlignment(T) = flexAlignCenterCenter
.CellPictureAlignment = flexAlignCenterCenter
Next i
Next T
End With

cela perment de passer en revue, une à une, toutes les cellules à partir de la première ligne (ligne en-tête)


[] Ce qui va sans dire. va mieux en le disant.
0
Rejoignez-nous