Decharger un tableau 2 dimensions dans un uf ou msgbox

vmatthieu

XLDnaute Occasionnel
Bonsoir le forum,
je ne sais pas si ma demande et possible.
Je vais parcourir une feuille très lourde et prendre de ci de là des valeurs que je rentre dans un tableau de x lignes et (pour l'exemple) 6 colonnes (redim preserve).

je souhaiterais décharger ce tableau dans une msgbox ou un uf ( le plus pratique) mais ce d'une façon assez élégante (qui se rapproche d'une feuille excel).

je vois bien une boucle en reprenant une variable string mais déjà il faut refaire x fois la boucle, empilé tout ça proprement enfin ce me semble difficile.

ou sinon un uf mais la difficulté (outre que je ne vois pas du tout comment faire) et de le dimensionner puisque je ne sais pas par avance la valeur de x

voyez vous une solution ??

Merci d'avoir déjà lu la question et d'avance merci au téméraire qui voudrat répondre

bonne soirée
 

Dranreb

XLDnaute Barbatruc
Re : Decharger un tableau 2 dimensions dans un uf ou msgbox

Bonjour.
Le plus simple et stable serait d'utiliser un contrôle ListBox.
Le plus sympa mais moins stable (mises à jour Windows qui le fusillent, problèmes de portabilité du à des dossiers de demeure différents) c'est le ListView.
Le plus proche d'une présentation Excel c'est un SpreadSheet. Jamais utilisé, autant afficher une feuille Excel à ce compte là à mon avis.
 

job75

XLDnaute Barbatruc
Re : Decharger un tableau 2 dimensions dans un uf ou msgbox

Bonjour vmatthieu, Dranreb,

Une ListBox paraît bien adaptée pour restituer un tableau.

Sachez quand même qu'on peut organiser correctement une MsgBox avec les caractères de tabulation - Chr(9) - et de renvoi à la ligne - Chr(10) ou vbLf.

Fichier joint avec cette macro :

Code:
Private Sub Worksheet_Calculate()
Dim t, col%, i&, j%, mes$
t = [A1:F21] 'à adapter...
col = UBound(t, 2)
For i = 1 To UBound(t)
  For j = 1 To col
    mes = mes & Chr(9) & t(i, j)
  Next
  mes = mes & Chr(9) & vbLf
Next
MsgBox mes, , "Résultats"
End Sub
A+
 

Pièces jointes

  • MsgBox(1).xls
    39.5 KB · Affichages: 81
  • MsgBox(1).xls
    39.5 KB · Affichages: 86
  • MsgBox(1).xls
    39.5 KB · Affichages: 84

vmatthieu

XLDnaute Occasionnel
Re : Decharger un tableau 2 dimensions dans un uf ou msgbox

bonjour le forum, Dranreb,Job75,

merci de vos réponses.
Job 75, ta solution est bien si la longueur de chaine est identique mais elle pose problème si la longueur de chaine change (voir fichier joint) aurait tu une autre astuce?

Dranreb, tes solutions permettent elles de visualiser tout le tableau ?
j'essayerai de bricoler mais si tu as un petit exemple je suis un heureux preneur
encore merci de vos réponses.
bonne fin de journée
 

Pièces jointes

  • MsgBox(1).xls
    33 KB · Affichages: 61
  • MsgBox(1).xls
    33 KB · Affichages: 67
  • MsgBox(1).xls
    33 KB · Affichages: 66

job75

XLDnaute Barbatruc
Re : Decharger un tableau 2 dimensions dans un uf ou msgbox

Re,

mais elle pose problème si la longueur de chaine change

Bien sûr une MsgBox n'est pas faite pour y faire du traitement de texte, mais quand on veut on peut.

La macro adaptée au fichier (2) :

Code:
Private Sub Worksheet_Calculate()
Dim t, col%, i&, j%, x%, mes$
t = [A1:F22] 'à adapter...
col = UBound(t, 2)
For i = 1 To UBound(t)
  x = Len(t(i, 1))
  For j = 1 To col
    mes = mes & Chr(9) & t(i, j) & String((j = 1) * (Int(x / 10) - 2), Chr(9))
  Next
  mes = mes & Chr(9) & vbLf
Next
MsgBox mes, , "Résultats"
End Sub
A+
 

Pièces jointes

  • MsgBox(2).xls
    33.5 KB · Affichages: 61
Dernière édition:

vmatthieu

XLDnaute Occasionnel
Re : Decharger un tableau 2 dimensions dans un uf ou msgbox

encore merci de vos deux réponses
Dranreb, je n'ai pas encore essayer de tester.
Job75,merci de ta réponse, je changerais simplement ta phrase "quand on veut on peut " par "quand on sait et qu'on veut , on peut";)
pour ma part je ne savais pas, et je vais essayer de comprendre ce que tu as fait.
merci encore de votre aide
bonne fin de journée
 

job75

XLDnaute Barbatruc
Re : Decharger un tableau 2 dimensions dans un uf ou msgbox

Re,

La détermination du nombre de tabulations Chr(9) en se basant sur le nombre de caractères ne va pas avec des caractères de faible largeur (i).

Il faut se baser sur la largeur du texte en points (pixels).

Dans ce fichier (3) j'y arrive en utilisant un Label auxiliaire.

Je n'ai pas essayé d'utiliser les API Windows.

Edit : je retire 2 points à la largeur du Label (les marges).

A+
 

Pièces jointes

  • MsgBox(3).xls
    39.5 KB · Affichages: 80
Dernière édition:

vmatthieu

XLDnaute Occasionnel
Re : Decharger un tableau 2 dimensions dans un uf ou msgbox

Bonsoir le forum,
Job75, merci pour cette réponse, mais je ne comprends pas ton code (du moins l'utilisation du label et l'usage du string)
quand a Dranreb, j'essaye de bricoler tout de suite pour tester ces solutions (même si j'en ai une autre sous le coude avec un usage de label, enfin bricolons, bricolons)
Bonne soirée
 

vmatthieu

XLDnaute Occasionnel
Re : Decharger un tableau 2 dimensions dans un uf ou msgbox

re,
après bricolage:), et après avoir testé la listview (surtout après avoir trouvé qu'il fallait activer des controles supplémentaires)
il me semble que la listbox est la plus pratique mais dans ce cas deux question

par défaut avec la taille de police de départ , un caractère correspond à combien de pixel (enfin je suppose que ce sont des pixels la valeur qui définie la largeur de la listbox)

deuxièmement , et un peu plus compliqué, est ce qu'il est possible de mettre une barre de défilement à une listbox et encore plus dur, lorsque l'on en actionne une , on les actionne toutes en même temps

et une dernière, (cela fait trois) comment définir la largeur de chaque colonne en ligne de code plutot que dans la propriété de la listebox, j'ai essayé avec ColumnWidths =10;20;30 mais cela ne marche pas

merci d'avance aux courageux qui se pencheront sur le problème
bonne soirée
 

Dranreb

XLDnaute Barbatruc
Re : Decharger un tableau 2 dimensions dans un uf ou msgbox

Bonsoir
par défaut avec la taille de police de départ , un caractère correspond à combien de pixel (enfin je suppose que ce sont des pixels la valeur qui définie la largeur de la listbox)
Aucune idée. Je règle ça au pif par des essais.
Une ListBox est équipée de barres de défilements horizontale et verticale. Elle sont affichées dès que le contenu ne tient plus dans sa taille.
j'ai essayé avec ColumnWidths =10;20;30 mais cela ne marche pas
Alors essayez avec ColumnWidths = "10;20;30"
Mais personnellement je préfère définir ça dans la fenêtre de propriétés, c'est plus simple.
Il suffit de s'arranger pour qu'elle soit très garnie par l'Userform_Initialize pour les tests, et de faire une série de rectifications puis de F5 pour afficher l'Userform.
 
Dernière édition:

Discussions similaires

Réponses
4
Affichages
630

Statistiques des forums

Discussions
312 388
Messages
2 087 872
Membres
103 672
dernier inscrit
ammarhouichi