OVH Cloud OVH Cloud

tableaux dans VBA

4 réponses
Avatar
Bourby
bonjour,
je ne suis pas familier des tableaux, voici mon problème:
j'ai une plage nommée "numéro" (A2:A65536), dont un assez grand nombre de
lignes sont remplies, nombre variable (p.ex. 1000).
Je veux récupérer dans un tableau les valeurs contenues dans cette plage.
J'y arrive avec une boucle, mais c'est trop long à l'exécution, car ma
fonction est employée une fois sur chacune des 1000 lignes.... Je pense qu'il
y a moyen de le faire en une seule instruction du genre: monTableau =
maPlage, mais je ne trouve pas la syntaxe.
Qui peut m'aider? D'avance merci.

Bourby

Voici mon code:
Sub essai()

Dim Tableau(), rgREF As Range, nbLignes As Long
Set rgREF = [numéro]
nbLignes = rgREF.Cells(rgREF.Rows.Count, 1).End(xlUp).Row - rgREF.Row + 1
ReDim Tableau(nbLignes)
For i = 1 To nbLignes
Tableau(i) = CStr(rgREF(i).Value)
Next i
(ces 3 dernières lignes marchent, mais ça prend trop de temps et je voudrais
les remplacer par quelque chose du genre:
Set rgREF = Range(rgREF(1), rgREF(nbLignes))
Tableau() = rgREF()

4 réponses

Avatar
Pierre Fauconnier
Bonjour

y a moyen de le faire en une seule instruction du genre: monTableau > maPlage, mais je ne trouve pas la syntaxe.


ET pourtant ...
Dim Tableau
Tableau = range("a1:a65536")

Cela étant, tu aurais intérêt à trouver une plage plus petite, car je
suppose que ta feuille n'est pas remplie jusqu'à la ligne 65536...
Dès lors, je suggère plutôt
Tableau = range("a1:&" & range("a65536").end(xlup).row)

Cela convient-il?


--
Pierre Fauconnier ()
Les sept laids tuent ( Lewis Carol )
Remplacez nospam.nospam par pfi.be pour répondre. Merci

"Bourby" a écrit dans le message de
news:
bonjour,
je ne suis pas familier des tableaux, voici mon problème:
j'ai une plage nommée "numéro" (A2:A65536), dont un assez grand nombre de
lignes sont remplies, nombre variable (p.ex. 1000).
Je veux récupérer dans un tableau les valeurs contenues dans cette plage.
J'y arrive avec une boucle, mais c'est trop long à l'exécution, car ma
fonction est employée une fois sur chacune des 1000 lignes.... Je pense
qu'il

y a moyen de le faire en une seule instruction du genre: monTableau > maPlage, mais je ne trouve pas la syntaxe.
Qui peut m'aider? D'avance merci.

Bourby

Voici mon code:
Sub essai()

Dim Tableau(), rgREF As Range, nbLignes As Long
Set rgREF = [numéro]
nbLignes = rgREF.Cells(rgREF.Rows.Count, 1).End(xlUp).Row - rgREF.Row + 1
ReDim Tableau(nbLignes)
For i = 1 To nbLignes
Tableau(i) = CStr(rgREF(i).Value)
Next i
(ces 3 dernières lignes marchent, mais ça prend trop de temps et je
voudrais

les remplacer par quelque chose du genre:
Set rgREF = Range(rgREF(1), rgREF(nbLignes))
Tableau() = rgREF()




Avatar
Bourby
bonjour Pierre et merci de m'avoir consacré du temps;

ce qu'il me faut exactement, c'est, pour i = 1 à ...End(xlUp).Row :
Tableau(i) = CStr(rgREF(i).Value)

Et justement, comme dans ta suggestion, avec une seule instruction,j'arrive
uniquement à récupérer une plage; tandis qu'il me faudrait un tableau de
strings....

Que puis-je faire?

D'avance merci

Bourby

"Pierre Fauconnier" wrote:

Bonjour

y a moyen de le faire en une seule instruction du genre: monTableau > > maPlage, mais je ne trouve pas la syntaxe.


ET pourtant ...
Dim Tableau
Tableau = range("a1:a65536")

Cela étant, tu aurais intérêt à trouver une plage plus petite, car je
suppose que ta feuille n'est pas remplie jusqu'à la ligne 65536...
Dès lors, je suggère plutôt
Tableau = range("a1:&" & range("a65536").end(xlup).row)

Cela convient-il?


--
Pierre Fauconnier ()
Les sept laids tuent ( Lewis Carol )
Remplacez nospam.nospam par pfi.be pour répondre. Merci

"Bourby" a écrit dans le message de
news:
bonjour,
je ne suis pas familier des tableaux, voici mon problème:
j'ai une plage nommée "numéro" (A2:A65536), dont un assez grand nombre de
lignes sont remplies, nombre variable (p.ex. 1000).
Je veux récupérer dans un tableau les valeurs contenues dans cette plage.
J'y arrive avec une boucle, mais c'est trop long à l'exécution, car ma
fonction est employée une fois sur chacune des 1000 lignes.... Je pense
qu'il

y a moyen de le faire en une seule instruction du genre: monTableau > > maPlage, mais je ne trouve pas la syntaxe.
Qui peut m'aider? D'avance merci.

Bourby

Voici mon code:
Sub essai()

Dim Tableau(), rgREF As Range, nbLignes As Long
Set rgREF = [numéro]
nbLignes = rgREF.Cells(rgREF.Rows.Count, 1).End(xlUp).Row - rgREF.Row + 1
ReDim Tableau(nbLignes)
For i = 1 To nbLignes
Tableau(i) = CStr(rgREF(i).Value)
Next i
(ces 3 dernières lignes marchent, mais ça prend trop de temps et je
voudrais

les remplacer par quelque chose du genre:
Set rgREF = Range(rgREF(1), rgREF(nbLignes))
Tableau() = rgREF()









Avatar
michdenis
Bonjour Bourby,

Si tu écris :

Dim RgRef as range
Dim Tblo as variant

set RgRef = range("A1:A50")
Tblo = rgRef

Pour une valeur de i = 1 à N

tu peux utiliser l'une de ces manières :

For i =1 ton ubound(tblo)
Msgbox tblo(i,1)
next

OU

For i = 1 to RgRef.rows.count
msgbox RgRef(1)
next


Salutations!


"Bourby" a écrit dans le message de news:

bonjour Pierre et merci de m'avoir consacré du temps;

ce qu'il me faut exactement, c'est, pour i = 1 à ...End(xlUp).Row :
Tableau(i) = CStr(rgREF(i).Value)

Et justement, comme dans ta suggestion, avec une seule instruction,j'arrive
uniquement à récupérer une plage; tandis qu'il me faudrait un tableau de
strings....

Que puis-je faire?

D'avance merci

Bourby

"Pierre Fauconnier" wrote:

Bonjour

y a moyen de le faire en une seule instruction du genre: monTableau > > maPlage, mais je ne trouve pas la syntaxe.


ET pourtant ...
Dim Tableau
Tableau = range("a1:a65536")

Cela étant, tu aurais intérêt à trouver une plage plus petite, car je
suppose que ta feuille n'est pas remplie jusqu'à la ligne 65536...
Dès lors, je suggère plutôt
Tableau = range("a1:&" & range("a65536").end(xlup).row)

Cela convient-il?


--
Pierre Fauconnier ()
Les sept laids tuent ( Lewis Carol )
Remplacez nospam.nospam par pfi.be pour répondre. Merci

"Bourby" a écrit dans le message de
news:
bonjour,
je ne suis pas familier des tableaux, voici mon problème:
j'ai une plage nommée "numéro" (A2:A65536), dont un assez grand nombre de
lignes sont remplies, nombre variable (p.ex. 1000).
Je veux récupérer dans un tableau les valeurs contenues dans cette plage.
J'y arrive avec une boucle, mais c'est trop long à l'exécution, car ma
fonction est employée une fois sur chacune des 1000 lignes.... Je pense
qu'il

y a moyen de le faire en une seule instruction du genre: monTableau > > maPlage, mais je ne trouve pas la syntaxe.
Qui peut m'aider? D'avance merci.

Bourby

Voici mon code:
Sub essai()

Dim Tableau(), rgREF As Range, nbLignes As Long
Set rgREF = [numéro]
nbLignes = rgREF.Cells(rgREF.Rows.Count, 1).End(xlUp).Row - rgREF.Row + 1
ReDim Tableau(nbLignes)
For i = 1 To nbLignes
Tableau(i) = CStr(rgREF(i).Value)
Next i
(ces 3 dernières lignes marchent, mais ça prend trop de temps et je
voudrais

les remplacer par quelque chose du genre:
Set rgREF = Range(rgREF(1), rgREF(nbLignes))
Tableau() = rgREF()









Avatar
PMO
Bonjour,

Voici la technique Lucky Luke (qui tire plus vite que son ombre) avec
l'exemple de code ci-dessous.

'******************************
Option Explicit
Sub VariantTableau()
Dim var As Variant
Dim i& 'boucle les lignes
Dim j& 'boucle les colonnes
Dim nbLig&
Dim nbCol&
'---- Emulation d'un tableau dans un variant ----
'---- Récupère toute la feuille d'un seul coup ----
var = ActiveSheet.UsedRange
'---- Nombre de lignes ----
nbLig& = UBound(var, 1)
'---- Nombre de colonnes ----
nbCol& = UBound(var, 2)
'---- Voir les 10 premières lignes ----
For i& = 1 To 10 '10 ou pour toutes nbLig&
For j& = 1 To nbCol&
Debug.Print var(i&, j&)
Next j&
Next i&
End Sub
'******************************

Cordialement.

PMO
Patrick Morange





bonjour,
je ne suis pas familier des tableaux, voici mon problème:
j'ai une plage nommée "numéro" (A2:A65536), dont un assez grand nombre de
lignes sont remplies, nombre variable (p.ex. 1000).
Je veux récupérer dans un tableau les valeurs contenues dans cette plage.
J'y arrive avec une boucle, mais c'est trop long à l'exécution, car ma
fonction est employée une fois sur chacune des 1000 lignes.... Je pense qu'il
y a moyen de le faire en une seule instruction du genre: monTableau =
maPlage, mais je ne trouve pas la syntaxe.
Qui peut m'aider? D'avance merci.

Bourby

Voici mon code:
Sub essai()

Dim Tableau(), rgREF As Range, nbLignes As Long
Set rgREF = [numéro]
nbLignes = rgREF.Cells(rgREF.Rows.Count, 1).End(xlUp).Row - rgREF.Row + 1
ReDim Tableau(nbLignes)
For i = 1 To nbLignes
Tableau(i) = CStr(rgREF(i).Value)
Next i
(ces 3 dernières lignes marchent, mais ça prend trop de temps et je voudrais
les remplacer par quelque chose du genre:
Set rgREF = Range(rgREF(1), rgREF(nbLignes))
Tableau() = rgREF()