Créer variables à la volée

Le
josephb
Bonsoir à tous,

dans le cas où on ne connaît pas à l'avance les dimensions d'un tableau
à traiter, quelle est la syntaxe pour créer dans une boucle autant de
variables que de valeurs à stocker ?
genre :

for i = 1 to nbColonnes
temp & i = cells(1,i).value
next

qui retournerait A1 dans temp1, A2 dans temp2, etc.
évidemment ça ne marche pas, mais j'imagine qu'il existe une manière de
le faire ?

Merci de vos lumières


--
J. B.
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
Daniel.C
Le #20170661
Bonsoir.
Non, mais tu peux utiliser une variable de type tableau :

temp = Application.Transpose(Range("A1", _
Cells(1, nbColonnes)))

et utiliser temp(1) pour A1, temp(2) pour B1...
Cordialement.
Daniel

Bonsoir à tous,

dans le cas où on ne connaît pas à l'avance les dimensions d'un tableau
à traiter, quelle est la syntaxe pour créer dans une boucle autant de
variables que de valeurs à stocker ?
genre :

for i = 1 to nbColonnes
temp & i = cells(1,i).value
next

qui retournerait A1 dans temp1, A2 dans temp2, etc.
évidemment ça ne marche pas, mais j'imagine qu'il existe une manière de
le faire ?

Merci de vos lumières


michdenis
Le #20170721
Bonjour Joseph,

2 façons de travailler avec des tableaux (array) et
des plages de cellules :

'---------------------------------------------
Sub test()

'Cela crée un tableau a 2 dimensions de base 1
'le premier élément du tableau est :
'y = x(1,1)

Dim X As Variant
Dim A As Integer, B As Integer
With Worksheets("Feuil1")
X = .Range("A1:C5")
End With

For A = 1 To UBound(X, 1) ' Lignes
For B = 1 To UBound(X, 2) 'Colonnes
MsgBox X(A, B)
Next
Next

End Sub
'------------------------------------

Sub Test1()

'Le tableau sera de base 0, c'est à dire que le premier
'élément du tableau aura comme index 0
' y = temp(0)

Dim Temp(), A As Integer, C As Range
With Worksheets("Feuil1")
For Each c In .Range("A1:C5")
'Le tableau est redimensionné sans perdre ce
'qu'il y a dedans déjà !
ReDim Preserve Temp(A)
Temp(A) = c.Value
A = A + 1
Next
End With
End Sub
'------------------------------------



"Joseph B." 1j67mtu.3zancjk0s1gN%
Bonsoir à tous,

dans le cas où on ne connaît pas à l'avance les dimensions d'un tableau
à traiter, quelle est la syntaxe pour créer dans une boucle autant de
variables que de valeurs à stocker ?
genre :

for i = 1 to nbColonnes
temp & i = cells(1,i).value
next

qui retournerait A1 dans temp1, A2 dans temp2, etc.
évidemment ça ne marche pas, mais j'imagine qu'il existe une manière de
le faire ?

Merci de vos lumières


--
J. B.
josephb
Le #20171001
Bonsoir Daniel,

Daniel.C

Non, mais tu peux utiliser une variable de type tableau :

temp = Application.Transpose(Range("A1", _
Cells(1, nbColonnes)))

et utiliser temp(1) pour A1, temp(2) pour B1...



Hum, peux-tu me donner un exemple plus scolaire, parce que je ne sais
pas si c'est l'heure avancée de la nuit, mais j'ai les neurones
embrumés : je ne vois pas comment mettre en ½uvre temp(1)... temp(n)
pour leur attribuer la valeur de A1... N1
Et là on reste en dimension 1, n'est-ce pas ?

Merci

Cordialement,
--
J. B.
josephb
Le #20170991
Bonjour (nuit) MichDenis

michdenis
2 façons de travailler avec des tableaux (array) et
des plages de cellules :

'---------------------------------------------
Sub test()

'Cela crée un tableau a 2 dimensions de base 1
'le premier élément du tableau est :
'y = x(1,1)

Dim X As Variant
Dim A As Integer, B As Integer
With Worksheets("Feuil1")
X = .Range("A1:C5")
End With

For A = 1 To UBound(X, 1) ' Lignes
For B = 1 To UBound(X, 2) 'Colonnes
MsgBox X(A, B)
Next
Next

End Sub
'------------------------------------



je vais tâcher de tirer parti de cette méthode qui, ne répond que
partiellement à l'idée que j'avais en tête.
L'explorateur d'objet de mon Excel 98 ignore la fonction UBound() dont
je n'ai pas la description ni la syntaxe, mais le principal est que ça
fonctionne.

Sub Test1()

'Le tableau sera de base 0, c'est à dire que le premier
'élément du tableau aura comme index 0
' y = temp(0)

Dim Temp(), A As Integer, C As Range
With Worksheets("Feuil1")
For Each c In .Range("A1:C5")
'Le tableau est redimensionné sans perdre ce
'qu'il y a dedans déjà !
ReDim Preserve Temp(A)
Temp(A) = c.Value
A = A + 1
Next
End With
End Sub
'------------------------------------



Oui, ça marche mais tout le traitement doit se faire dans la boucle,
et sa dimension 1 oblige à un traitement incrémental très contraignant.

Merci de ton aide
Cordialement
--
J. B.
michdenis
Le #20175161
| Hum, peux-tu me donner un exemple plus scolaire

Seulement si tu définis quelle est la nature du problème
que tu tentes de solutionner en utilisant la notion de
"Tableau". Je ne veux pas t'écrire tout un chapitre de
volume sur le sujet ici.
josephb
Le #20178881
Bonsoir Michdenis

michdenis
Seulement si tu définis quelle est la nature du problème
que tu tentes de solutionner en utilisant la notion de
"Tableau". Je ne veux pas t'écrire tout un chapitre de
volume sur le sujet ici.



Merci de ta proposition mais pour l'instant ce ne sera pas la peine.
Il s'agissait de regrouper par "famille" au sein de cellules uniques (et
dans une autre feuille), les contenus de cellules multiples, depuis un
tableau saisi chronologiquement (je ne sais pas si je suis très
clair...). Avec pour contrainte accessoire que Le tableau original soit
rendu intact à la fin.
Pas très à l'aise avec ce que tu m'avais indiqué comme méthode, je me
suis résolu à appliquer classiquement deux boucles imbriquées (lignes x
colonnes) pour récupérer/associer/transférer les données et ça a marché.
Mais cette histoire d'Array, il va bien falloir que je m'y penche un
jour ;-)

Cordialement
--
J. B.
Publicité
Poster une réponse
Anonyme