Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Utilisation d'une liste excel comme array vba

4 réponses
Avatar
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
(=DECALER($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

4 réponses

Avatar
JB
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 wrote:
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


Avatar
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 wrote:
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





Avatar
JB
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" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://boisgontierjacques.free.fr/pages_site/tableaux.htm#extractionLigne

JB

On 20 juin, 17:09, Xavier wrote:
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 wrote:
>> 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 -


Avatar
Xavier
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" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://boisgontierjacques.free.fr/pages_site/tableaux.htm#extractionLigne

JB

On 20 juin, 17:09, Xavier wrote:
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 wrote:
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 -