Table à 2 valeurs [Résolu]

Signaler
Messages postés
887
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
22 février 2021
-
Messages postés
887
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
22 février 2021
-
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

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
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
Messages postés
887
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
22 février 2021
2
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.

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...
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
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
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Salut

les index commencent par 0 non ?
dim tableau(a,1)
for i = 0 to a-1
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
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
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
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.
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
re-redimensionner, mais uniquement le premier indice.
Le second doit rester fixe.



[] Ce qui va sans dire. va mieux en le disant.
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
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.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
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
Messages postés
887
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
22 février 2021
2
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
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
Messages postés
887
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
22 février 2021
2
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 ?
Messages postés
887
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
22 février 2021
2
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
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
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.
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
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.
Messages postés
887
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
22 février 2021
2
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
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
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.
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
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.