Copie d'un Array dans une feuille...

  • Initiateur de la discussion Sylvain123
  • Date de début
S

Sylvain123

Guest
Bonjour à tous,

Un petit problème...

J'ai une macro qui charge diverses données des feuilles excel dans un tableau : Data

Ce tableau est définit comme ceci au début de la macro :

Dim Data(100) As TypeData

Avec le type perso suivant :

Type TypeData
Jour as integer
Valeur as single
Total as long
End Type

Puis la macro fait un traitement et modif des données du tableau.

Et à la fin de la macro, je désire recopier les données Valeur dans une feuille excel dans la colonne A, à partir de A1...

Celà devrait etre un truc du genre :

Range("A1").Resize(100, 1).Value = Data().Jour

Mais celà ne marche pas sous cette syntaxe...

Merci de votre aide, @+
 
Z

Zon

Guest
Salut,

Je pense que ce n'est pas possible(du moins y a longtemps que j'ai laissé tomber car j'ai pas trouvé avec les types personnalisés, il faut passer par une boucle sur ton tableau Data.

A+++
 
S

Sylvain123

Guest
Merci pour ta réponse.

Oui, il y a toujours posibilité de passer par une boucle mais c'est beaucoup plus long à executer qu'un copiage par bloc... (A appliquer sur un très gros fichier)

Par contre, je pense que celà est possible car à ma connaissance, tout ce qui peut être fait sur un type prédéfini est possible avec un type perso.
Le problème, c'est surtout la syntaxe je pense...

Sinon, quel doit être le type d'un tableau qui pourra etre collé sur les cellules ?

Merci, @+
 
F

f.launay

Guest
Bonjour, voila la syntaxe que j'utilise pour retourner les données d'un tableau dans une feuille excel sachant que varows est le nombre de lignes et vartable mon tableau dimensionné sur 5 colonnes
Range("a10", Range("a10").Offset(Varows, 5)) = VarTable
Bon courage
 
S

Sylvain123

Guest
Merci de ta réponse...

Ton exemple marche bien mais est un peut différent.

Ton tableau est un simple tableau de 5 colonnes.
Or le mien, c'est un tableau avec type personnalisé.
Ainsi, je voudrais recopier dans une colonne de cellules une partie de mon tableau :
Les valeurs de .Jour de Data().Jour

Autre idée ?

@+
 
A

Ariel

Guest
Salut!

Je cherche une façon de trouver les nombres qui peuvent composer un autre nombre, exemple 4500. Ayant une base de donnée de disons 10 chiffres.

Exemple 1000, 2000, 450, 25, 469, 3215, 1598 ,1236, 123, 1236
Cette série de chiffers n'est pas la bonne, c'est juste un exemple visuel.

Est-ce possible dans excel de parvenir à trouver une solutuion pratique.

merci beacoup.
 
B

Bricofire

Guest
Bonsoir, Sylvain, zon
je ne suis pas doué en tableaux, peut-être que les données ci-dessous peuvent apporter qqchose à la première question, tu les trouveras dans l'aide VBA à "Array, fonction". (cf exeptions de types définis par l'utilisateur...)


cordialement,

Bfr
=======================

Remarques

La notation utilisée pour faire référence à un élément du tableau est composée du nom de la variable suivi d'un indice entre indiquant l'élément concerné. Dans l'exemple suivant, la première instruction crée une variable appelée A déclarée de type Variant. La deuxième instruction affecte un tableau à la variable A. La dernière instruction affecte à une autre variable la valeur contenue dans le deuxième élément du tableau.
Dim A As Variant
A = Array(10,20,30)
B = A(2)

La limite inférieure d'un tableau créé à l'aide de la fonction Array est déterminée par la limite inférieure spécifiée avec l'instruction Option Base, à moins que le nom de Array soit accompagné de l'intitulé de la bibliothèque de type (par exemple VBA.Array). Si c'est le cas, Array n'est pas affecté par Option Base.

Note Une variable de type Variant non déclarée comme tableau peut cependant en contenir un. Une variable de type Variant peut contenir tout type de tableau, à l'exception des chaînes de longueur fixe et de types définis par l'utilisateur. Bien que le concept de variable de type Variant contenant un tableau diffère d'un tableau contenant des éléments de type Variant, la manière d'accéder aux éléments du tableau est identique.
---------
type défini par l'utilisateur
Tout type de données défini à l'aide de l'instruction Type. Les types de données définis par l'utilisateur peuvent contenir un ou plusieurs éléments de tout type de données. Les tableaux de type défini par l'utilisateur et d'autres types de données sont créés à l'aide de l'instruction Dim. Des tableaux de tout type peuvent être inclus dans des types définis par l'utilisateur.
 
T

Ti

Guest
Voici comment je m'y prendrais pour renvoyer assez simplement un des champs d'un type perso.
La boucle ne se fait pas sur la plage de données, mais sur le tableau de Data lui-même, ce qui est quasi immédiat.
Le défaut de cette méthode c'est que la fonction ArrayData doit être adaptée à chaque fois en fonction du type de données qu'on a créé, donc si tu veux injecter des données venant de plusieurs types persos différents, tu dois créer autant de fonctions ArrayData adaptées à chaque type.

Note que si ton Type contenait, disons, plus de 10 champs, tu pourrais ne préciser dans le Enum associé que les champs à injecter dans la feuille, ça éviterait ainsi une longue série de Case dans la fonction ArrayData, et ça permettrait aussi de clarifier les intentions de ton programme.

Option Explicit
'Ti http://veriti.free.fr

Type TypeData
Jour As Integer
Valeur As Single
Total As Long
End Type

Enum eItemData
Jour
Valeur
Total
End Enum

'si tu mets simplements Data(100) tu as 101 valeurs
'ou alors il faut écrire Data(99) ou Data(0 to 99) ou Data(1 to 100)
'personnellement je précise toujours l'indice inférieur, comme ça il
'n'y a jamais d'ambigüité
Dim Data(1 To 100) As TypeData

Function ArrayData(Datas() As TypeData, Item As eItemData)
Dim Bcle&
ReDim Tabl(LBound(Datas) To UBound(Datas), 1 To 1)
For Bcle = LBound(Datas) To UBound(Datas)
Select Case Item
Case Jour
Tabl(Bcle, 1) = Datas(Bcle).Jour
Case Valeur
Tabl(Bcle, 1) = Datas(Bcle).Valeur
Case Total
Tabl(Bcle, 1) = Datas(Bcle).Total
End Select
Next Bcle
ArrayData = Tabl
End Function

Sub Test()
Dim Bcle%, NbVal%
'génération des valeurs de test
For Bcle = LBound(Data) To UBound(Data)
Data(Bcle).Jour = Int(Rnd * 30 + 1)
Data(Bcle).Valeur = Rnd * 1000
Data(Bcle).Total = Int(Rnd * 1000 + 1)
Next Bcle

Feuil1.Cells.Clear

NbVal = UBound(Data) - LBound(Data) + 1
With Feuil1
'copie en horizontal
.Range("A1").Resize(1, NbVal).Value = WorksheetFunction.Transpose(ArrayData(Data, Jour))
'et en vertical
.Range("B1").Resize(NbVal, 1).Value = ArrayData(Data, Valeur)
.Range("C1").Resize(NbVal, 1).Value = ArrayData(Data, Total)
End With
End Sub
 
A

Ariel

Guest
nombre à trouver

Salut!

Je cherche une façon de trouver les nombres qui peuvent composer un autre nombre, exemple 4500. Ayant une base de donnée de disons 10 chiffres.

Exemple 1000, 2000, 450, 25, 469, 3215, 1598 ,1236, 123, 1236
Cette série de chiffers n'est pas la bonne, c'est juste un exemple visuel et le 4500 également

Est-ce possible dans excel de parvenir à trouver une solutuion pratique.

merci beacoup.
 

Discussions similaires

Réponses
16
Affichages
573

Statistiques des forums

Discussions
312 550
Messages
2 089 523
Membres
104 202
dernier inscrit
khaledscenic