Utilisation d'une liste excel comme array vba

Le
Xavier
bonjour à tous,
voilà mon problème : J'ai dans une feuille excel, sur une colonne, une
liste dynamique de valeur (ex: en B2 j'ai 1 , en B3 j'ai 2, en B4 j'ai 3
etc)
A cette liste dynamique (dynamique car le nombre d'enregistrements peut
varier)j'ai affectée affecté un nom "Nombres" avec la formule qui va
bien pour l'ajuster dynamiquement au nombre d'enregistrement
(ÞCALER($B$2;0;0;NBVAL($B:$B)-1) )

Jusque là rien de bien compliqué

maintenant je souhaiterais dans mon vba utiliser cette liste comme un
array. Pour être clair pouvoir extraire une des valeurs de la liste
suivant un index choisi.

Pour ce faire je n'ai trouvé que la solution suivante:

temp = [Nombres]
ReDim VNombres([Nombres].Count)
For i = 0 To [Nombres].Count: VNombres(i) = temp(i + 1, 1): Next

autrement dit j'ai copié toutes les données de "Nombres" dans Vnombres
et maintenant je peux acceder à chacune de mes données
ainsi la première donnée = Vnombre(0) ainsi de suite

Ca marche mais je me demande s'il n'y avait pas plus simple pour accéder
à mes données.

merci de vos avis d'expert
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
JB
Le #19605571
Bonjour,

temp = [Nombres] --> donne un Array Temp(n,1)

Pourquoi un autre Array Vnombres()?

JB
http://boisgontierjacques.free.fr/

On 20 juin, 10:01, Xavier
bonjour à tous,
voilà mon problème : J'ai dans une feuille excel, sur une colonne, un e
liste dynamique de valeur (ex: en B2 j'ai 1 , en B3 j'ai 2, en B4 j'ai 3
etc)
A cette liste dynamique (dynamique car le nombre d'enregistrements peut
varier)j'ai affectée affecté un nom "Nombres" avec la formule qui va
bien pour l'ajuster dynamiquement au nombre d'enregistrement
(ÞCALER($B$2;0;0;NBVAL($B:$B)-1) )

Jusque là rien de bien compliqué

maintenant je souhaiterais dans mon vba utiliser cette liste comme un
array. Pour être clair pouvoir extraire une des valeurs de la liste
suivant un index choisi.

Pour ce faire je n'ai trouvé que la solution suivante:

     temp = [Nombres]
     ReDim VNombres([Nombres].Count)
     For i = 0 To [Nombres].Count: VNombres(i) = temp(i + 1, 1) : Next

autrement dit j'ai copié toutes les données de "Nombres" dans Vnombre s
et maintenant je peux acceder à chacune de mes données
ainsi la première donnée = Vnombre(0) ainsi de suite

Ca marche mais je me demande s'il n'y avait pas plus simple pour accéde r
à mes données.

merci de vos avis d'expert


Xavier
Le #19606011
salut Jacques

effectivement, mais j'aurais souhaité (pour des raisons purement
"esthétiques" le passer en une seule dimension (temp(1) au lieu de temp
(1,1)

Xavier

JB a écrit :
Bonjour,

temp = [Nombres] --> donne un Array Temp(n,1)

Pourquoi un autre Array Vnombres()?

JB
http://boisgontierjacques.free.fr/

On 20 juin, 10:01, Xavier
bonjour à tous,
voilà mon problème : J'ai dans une feuille excel, sur une colonne, une
liste dynamique de valeur (ex: en B2 j'ai 1 , en B3 j'ai 2, en B4 j'ai 3
etc)
A cette liste dynamique (dynamique car le nombre d'enregistrements peut
varier)j'ai affectée affecté un nom "Nombres" avec la formule qui va
bien pour l'ajuster dynamiquement au nombre d'enregistrement
(ÞCALER($B$2;0;0;NBVAL($B:$B)-1) )

Jusque là rien de bien compliqué

maintenant je souhaiterais dans mon vba utiliser cette liste comme un
array. Pour être clair pouvoir extraire une des valeurs de la liste
suivant un index choisi.

Pour ce faire je n'ai trouvé que la solution suivante:

temp = [Nombres]
ReDim VNombres([Nombres].Count)
For i = 0 To [Nombres].Count: VNombres(i) = temp(i + 1, 1): Next

autrement dit j'ai copié toutes les données de "Nombres" dans Vnombres
et maintenant je peux acceder à chacune de mes données
ainsi la première donnée = Vnombre(0) ainsi de suite

Ca marche mais je me demande s'il n'y avait pas plus simple pour accéder
à mes données.

merci de vos avis d'expert





JB
Le #19606161
a = [A1:H10] ' tableau à 2 dimensions
b = Application.Index(a, 2) ' tableau à 1 dimension
MsgBox b(1)

http://boisgontierjacques.free.fr/pages_site/tableaux.htm#extractionLigne

JB

On 20 juin, 17:09, Xavier
salut Jacques

effectivement, mais j'aurais souhaité (pour des raisons purement
"esthétiques" le passer en une seule dimension (temp(1) au lieu de temp
(1,1)

Xavier

JB a écrit :



> Bonjour,

>  temp = [Nombres]  --> donne un Array Temp(n,1)

> Pourquoi un autre Array Vnombres()?

> JB
>http://boisgontierjacques.free.fr/

> On 20 juin, 10:01, Xavier >> bonjour à tous,
>> voilà mon problème : J'ai dans une feuille excel, sur une colonne, une
>> liste dynamique de valeur (ex: en B2 j'ai 1 , en B3 j'ai 2, en B4 j'ai 3
>> etc)
>> A cette liste dynamique (dynamique car le nombre d'enregistrements peu t
>> varier)j'ai affectée affecté un nom "Nombres" avec la formule qui va
>> bien pour l'ajuster dynamiquement au nombre d'enregistrement
>> (ÞCALER($B$2;0;0;NBVAL($B:$B)-1) )

>> Jusque là rien de bien compliqué

>> maintenant je souhaiterais dans mon vba utiliser cette liste comme un
>> array. Pour être clair pouvoir extraire une des valeurs de la liste
>> suivant un index choisi.

>> Pour ce faire je n'ai trouvé que la solution suivante:

>>      temp = [Nombres]
>>      ReDim VNombres([Nombres].Count)
>>      For i = 0 To [Nombres].Count: VNombres(i) = temp(i + 1, 1): Next

>> autrement dit j'ai copié toutes les données de "Nombres" dans Vnom bres
>> et maintenant je peux acceder à chacune de mes données
>> ainsi la première donnée = Vnombre(0) ainsi de suite

>> Ca marche mais je me demande s'il n'y avait pas plus simple pour acc éder
>> à mes données.

>> merci de vos avis d'expert- Masquer le texte des messages précéden ts -

- Afficher le texte des messages précédents -


Xavier
Le #19606931
effectivement si les données sont sur plusieurs lignes et plusieurs
colonne ça marche,
hélas ce n'est pas mon cas puisque dans les faits mes données sont dans
le range [G3:G9]

si je fais
a = [G3:G9]

Avec G3=1 ; G4=2; G5=3 ; G6=4; G7=5 ; G8=6; G9=7


b = Application.Index(a, 2)
je n'obtiens que la la valeur de G4 (donc B=2) alors que j'aurais
souhaité avoir b=(1;2;3;4;5;6;7;8) et donc pouvoir choisir plus
simplement l'élément à afficher

Par exemple pour afficher le deuxième élément de la liste j'aurais
souhaité faire b(2) et non Application.Index(a, 2) ou a(2,1)




JB a écrit :
a = [A1:H10] ' tableau à 2 dimensions
b = Application.Index(a, 2) ' tableau à 1 dimension
MsgBox b(1)

http://boisgontierjacques.free.fr/pages_site/tableaux.htm#extractionLigne

JB

On 20 juin, 17:09, Xavier
salut Jacques

effectivement, mais j'aurais souhaité (pour des raisons purement
"esthétiques" le passer en une seule dimension (temp(1) au lieu de temp
(1,1)

Xavier

JB a écrit :



Bonjour,
temp = [Nombres] --> donne un Array Temp(n,1)
Pourquoi un autre Array Vnombres()?
JB
http://boisgontierjacques.free.fr/
On 20 juin, 10:01, Xavier
bonjour à tous,
voilà mon problème : J'ai dans une feuille excel, sur une colonne, une
liste dynamique de valeur (ex: en B2 j'ai 1 , en B3 j'ai 2, en B4 j'ai 3
etc)
A cette liste dynamique (dynamique car le nombre d'enregistrements peut
varier)j'ai affectée affecté un nom "Nombres" avec la formule qui va
bien pour l'ajuster dynamiquement au nombre d'enregistrement
(ÞCALER($B$2;0;0;NBVAL($B:$B)-1) )
Jusque là rien de bien compliqué
maintenant je souhaiterais dans mon vba utiliser cette liste comme un
array. Pour être clair pouvoir extraire une des valeurs de la liste
suivant un index choisi.
Pour ce faire je n'ai trouvé que la solution suivante:
temp = [Nombres]
ReDim VNombres([Nombres].Count)
For i = 0 To [Nombres].Count: VNombres(i) = temp(i + 1, 1): Next
autrement dit j'ai copié toutes les données de "Nombres" dans Vnombres
et maintenant je peux acceder à chacune de mes données
ainsi la première donnée = Vnombre(0) ainsi de suite
Ca marche mais je me demande s'il n'y avait pas plus simple pour accéder
à mes données.
merci de vos avis d'expert- Masquer le texte des messages précédents -




- Afficher le texte des messages précédents -





Publicité
Poster une réponse
Anonyme