Comment faire pour concaténer (simplement) des tableaux par VBA ?
Mettons que j'aie 3 tableaux :
Dim Table1()
Dim Table2()
Dim Table3()
Je m'arrange pour les remplir de constantes de type STRING avec :
Table1 = Array ("string1", "string2", "string3", "string4", "string5")
Table2 = Array ("string6", "string7", "string8")
Table3 = Array ("string9", "string10")
(Déjà là, je ne parviens pas à déclarer directement un tableau de constantes de
type STRING, je suis obligé de passer par du code pour remplir le tableau, ce
qui me paraît lourdingue, mais bon).
Je voudrais les concaténer PAR CODE VBA, pour obtenir un nouveau tableau, -- qui
aurait pu être déclaré par :
NouvelleTable = Array ("string1", "string2", "string3", "string4", "string5",
"string6", "string7", "string8", "string9", "string10"),
-- dont on puisse accéder aux éléments par :
NouvelleTable (i)
J'ai essayé :
NouvelleTable = Array (Table1, Table2, Table3)
mais l'accès est malaisé : pour accéder à "string 8" par exemple, il faut :
NouvelleTable (2) (3).
Ou alors :
For i = 1 to Ubound (Table1)
NouvelleTable (i) = Table1 (i)
Next i
For i = 1 to Ubound (Table2)
NouvelleTable (i + Ubound (Table1)) = Table2 (i)
Next i
For i = 1 to Ubound (Table3)
NouvelleTable (i + Ubound (Table1) + Ubound (Table2)) = Table3 (i)
Next i
mais c'est super lourd !
Il doit bien y avoir plus simple ? Avez-vous une idée ?
Merci d'avance.
P.S. : pour info, les STRING sont les noms des feuilles de calcul d'un classeur,
feuilles que l'on peut regrouper par catégories logiques prédéfinies; et selon
le bouton cliqué par l'opérateur, on masque / affiche telles ou telles
catégories de feuilles (de nombreux boutons, de nombreuses catégories, de
nombreuses combinaisons possibles). D'où l'idée de concaténer, selon l'action
opérateur, les différents groupes de feuilles prédéfinis en : tout ce qui est à
masquer et tout ce qui est à afficher
For I = 0 To UBound(Table1) J = J + 1 ReDim Preserve NouvelleTable(1 To J) NouvelleTable(J) = Table1(I) Next I
For I = 0 To UBound(Table2) J = J + 1 ReDim Preserve NouvelleTable(1 To J) NouvelleTable(J) = Table2(I) Next I
For I = 0 To UBound(Table3) J = J + 1 ReDim Preserve NouvelleTable(1 To J) NouvelleTable(J) = Table3(I) Next I 'résultat For I = 1 To UBound(NouvelleTable) Debug.Print NouvelleTable(I) Next I
"Quetzalcoatl" a écrit dans le message de news: 430a1fef$0$5398$
Bonsoir,
Comment faire pour concaténer (simplement) des tableaux par VBA ?
Mettons que j'aie 3 tableaux : Dim Table1() Dim Table2() Dim Table3() Je m'arrange pour les remplir de constantes de type STRING avec : Table1 = Array ("string1", "string2", "string3", "string4", "string5") Table2 = Array ("string6", "string7", "string8") Table3 = Array ("string9", "string10") (Déjà là, je ne parviens pas à déclarer directement un tableau de constantes de
type STRING, je suis obligé de passer par du code pour remplir le tableau, ce
qui me paraît lourdingue, mais bon).
Je voudrais les concaténer PAR CODE VBA, pour obtenir un nouveau tableau, -- qui
aurait pu être déclaré par : NouvelleTable = Array ("string1", "string2", "string3", "string4", "string5",
"string6", "string7", "string8", "string9", "string10"), -- dont on puisse accéder aux éléments par : NouvelleTable (i)
J'ai essayé : NouvelleTable = Array (Table1, Table2, Table3) mais l'accès est malaisé : pour accéder à "string 8" par exemple, il faut :
NouvelleTable (2) (3).
Ou alors : For i = 1 to Ubound (Table1) NouvelleTable (i) = Table1 (i) Next i For i = 1 to Ubound (Table2) NouvelleTable (i + Ubound (Table1)) = Table2 (i) Next i For i = 1 to Ubound (Table3) NouvelleTable (i + Ubound (Table1) + Ubound (Table2)) = Table3 (i) Next i
mais c'est super lourd !
Il doit bien y avoir plus simple ? Avez-vous une idée ? Merci d'avance.
P.S. : pour info, les STRING sont les noms des feuilles de calcul d'un classeur,
feuilles que l'on peut regrouper par catégories logiques prédéfinies; et selon
le bouton cliqué par l'opérateur, on masque / affiche telles ou telles catégories de feuilles (de nombreux boutons, de nombreuses catégories, de nombreuses combinaisons possibles). D'où l'idée de concaténer, selon l'action
opérateur, les différents groupes de feuilles prédéfinis en : tout ce qui est à
masquer et tout ce qui est à afficher
-- So long
Bonsoir,
Une piste :
Sub Concatener()
'de type variant obligatoire
Dim Table1, Table2, Table3
Dim NouvelleTable() As String
Dim I As Long, J As Long
For I = 0 To UBound(Table1)
J = J + 1
ReDim Preserve NouvelleTable(1 To J)
NouvelleTable(J) = Table1(I)
Next I
For I = 0 To UBound(Table2)
J = J + 1
ReDim Preserve NouvelleTable(1 To J)
NouvelleTable(J) = Table2(I)
Next I
For I = 0 To UBound(Table3)
J = J + 1
ReDim Preserve NouvelleTable(1 To J)
NouvelleTable(J) = Table3(I)
Next I
'résultat
For I = 1 To UBound(NouvelleTable)
Debug.Print NouvelleTable(I)
Next I
"Quetzalcoatl" <razleboldesspams@free.fr.invalid> a écrit dans le message de
news: 430a1fef$0$5398$8fcfb975@news.wanadoo.fr...
Bonsoir,
Comment faire pour concaténer (simplement) des tableaux par VBA ?
Mettons que j'aie 3 tableaux :
Dim Table1()
Dim Table2()
Dim Table3()
Je m'arrange pour les remplir de constantes de type STRING avec :
Table1 = Array ("string1", "string2", "string3", "string4", "string5")
Table2 = Array ("string6", "string7", "string8")
Table3 = Array ("string9", "string10")
(Déjà là, je ne parviens pas à déclarer directement un tableau de
constantes de
type STRING, je suis obligé de passer par du code pour remplir le tableau,
ce
qui me paraît lourdingue, mais bon).
Je voudrais les concaténer PAR CODE VBA, pour obtenir un nouveau
tableau, -- qui
aurait pu être déclaré par :
NouvelleTable = Array ("string1", "string2", "string3", "string4",
"string5",
"string6", "string7", "string8", "string9", "string10"),
-- dont on puisse accéder aux éléments par :
NouvelleTable (i)
J'ai essayé :
NouvelleTable = Array (Table1, Table2, Table3)
mais l'accès est malaisé : pour accéder à "string 8" par exemple, il faut
:
NouvelleTable (2) (3).
Ou alors :
For i = 1 to Ubound (Table1)
NouvelleTable (i) = Table1 (i)
Next i
For i = 1 to Ubound (Table2)
NouvelleTable (i + Ubound (Table1)) = Table2 (i)
Next i
For i = 1 to Ubound (Table3)
NouvelleTable (i + Ubound (Table1) + Ubound (Table2)) = Table3 (i)
Next i
mais c'est super lourd !
Il doit bien y avoir plus simple ? Avez-vous une idée ?
Merci d'avance.
P.S. : pour info, les STRING sont les noms des feuilles de calcul d'un
classeur,
feuilles que l'on peut regrouper par catégories logiques prédéfinies; et
selon
le bouton cliqué par l'opérateur, on masque / affiche telles ou telles
catégories de feuilles (de nombreux boutons, de nombreuses catégories, de
nombreuses combinaisons possibles). D'où l'idée de concaténer, selon
l'action
opérateur, les différents groupes de feuilles prédéfinis en : tout ce qui
est à
For I = 0 To UBound(Table1) J = J + 1 ReDim Preserve NouvelleTable(1 To J) NouvelleTable(J) = Table1(I) Next I
For I = 0 To UBound(Table2) J = J + 1 ReDim Preserve NouvelleTable(1 To J) NouvelleTable(J) = Table2(I) Next I
For I = 0 To UBound(Table3) J = J + 1 ReDim Preserve NouvelleTable(1 To J) NouvelleTable(J) = Table3(I) Next I 'résultat For I = 1 To UBound(NouvelleTable) Debug.Print NouvelleTable(I) Next I
"Quetzalcoatl" a écrit dans le message de news: 430a1fef$0$5398$
Bonsoir,
Comment faire pour concaténer (simplement) des tableaux par VBA ?
Mettons que j'aie 3 tableaux : Dim Table1() Dim Table2() Dim Table3() Je m'arrange pour les remplir de constantes de type STRING avec : Table1 = Array ("string1", "string2", "string3", "string4", "string5") Table2 = Array ("string6", "string7", "string8") Table3 = Array ("string9", "string10") (Déjà là, je ne parviens pas à déclarer directement un tableau de constantes de
type STRING, je suis obligé de passer par du code pour remplir le tableau, ce
qui me paraît lourdingue, mais bon).
Je voudrais les concaténer PAR CODE VBA, pour obtenir un nouveau tableau, -- qui
aurait pu être déclaré par : NouvelleTable = Array ("string1", "string2", "string3", "string4", "string5",
"string6", "string7", "string8", "string9", "string10"), -- dont on puisse accéder aux éléments par : NouvelleTable (i)
J'ai essayé : NouvelleTable = Array (Table1, Table2, Table3) mais l'accès est malaisé : pour accéder à "string 8" par exemple, il faut :
NouvelleTable (2) (3).
Ou alors : For i = 1 to Ubound (Table1) NouvelleTable (i) = Table1 (i) Next i For i = 1 to Ubound (Table2) NouvelleTable (i + Ubound (Table1)) = Table2 (i) Next i For i = 1 to Ubound (Table3) NouvelleTable (i + Ubound (Table1) + Ubound (Table2)) = Table3 (i) Next i
mais c'est super lourd !
Il doit bien y avoir plus simple ? Avez-vous une idée ? Merci d'avance.
P.S. : pour info, les STRING sont les noms des feuilles de calcul d'un classeur,
feuilles que l'on peut regrouper par catégories logiques prédéfinies; et selon
le bouton cliqué par l'opérateur, on masque / affiche telles ou telles catégories de feuilles (de nombreux boutons, de nombreuses catégories, de nombreuses combinaisons possibles). D'où l'idée de concaténer, selon l'action
opérateur, les différents groupes de feuilles prédéfinis en : tout ce qui est à
masquer et tout ce qui est à afficher
-- So long
michdenis
Bonjour Quetzalcoatl,
| (Déjà là, je ne parviens pas à déclarer directement un tableau de constantes de | type STRING, je suis obligé de passer par du code pour remplir le tableau, ce | qui me paraît lourdingue, mais bon).
La fonction array renvoie une variable de type variant ... le reste est dans l'aide de Excel
Un exemple pour le type de déclaration de tableau que tu désires ! '-------------------------------- Sub Exemple() Dim Arr() As String * 15 Dim Z As Integer, Nb As Integer Nb = 12
ReDim Arr(1 To Nb) 'Tableau de base 1
For Z = 1 To Nb Arr(Z) = Format(DateSerial(2005, Z, 1), "mmmm") Next MsgBox Arr(3) End Sub '--------------------------------
Une solution à ta problématique : '------------------------------ Sub ConcatenerTableau()
Dim Table1(), C As Integer Dim Table2(), A As Integer Dim Table3() Dim nouveauTableau()
For Each arr In Array(Table1, Table2, Table3) For A = 0 To UBound(arr) ReDim Preserve nouveauTableau(C) nouveauTableau(C) = arr(A) Next Next
Msgbox NouveauTableau(5)
End Sub '------------------------------
Salutations!
"Quetzalcoatl" a écrit dans le message de news: 430a1fef$0$5398$ Bonsoir,
Comment faire pour concaténer (simplement) des tableaux par VBA ?
Mettons que j'aie 3 tableaux : Dim Table1() Dim Table2() Dim Table3() Je m'arrange pour les remplir de constantes de type STRING avec : Table1 = Array ("string1", "string2", "string3", "string4", "string5") Table2 = Array ("string6", "string7", "string8") Table3 = Array ("string9", "string10") (Déjà là, je ne parviens pas à déclarer directement un tableau de constantes de type STRING, je suis obligé de passer par du code pour remplir le tableau, ce qui me paraît lourdingue, mais bon).
Je voudrais les concaténer PAR CODE VBA, pour obtenir un nouveau tableau, -- qui aurait pu être déclaré par : NouvelleTable = Array ("string1", "string2", "string3", "string4", "string5", "string6", "string7", "string8", "string9", "string10"), -- dont on puisse accéder aux éléments par : NouvelleTable (i)
J'ai essayé : NouvelleTable = Array (Table1, Table2, Table3) mais l'accès est malaisé : pour accéder à "string 8" par exemple, il faut : NouvelleTable (2) (3).
Ou alors : For i = 1 to Ubound (Table1) NouvelleTable (i) = Table1 (i) Next i For i = 1 to Ubound (Table2) NouvelleTable (i + Ubound (Table1)) = Table2 (i) Next i For i = 1 to Ubound (Table3) NouvelleTable (i + Ubound (Table1) + Ubound (Table2)) = Table3 (i) Next i
mais c'est super lourd !
Il doit bien y avoir plus simple ? Avez-vous une idée ? Merci d'avance.
P.S. : pour info, les STRING sont les noms des feuilles de calcul d'un classeur, feuilles que l'on peut regrouper par catégories logiques prédéfinies; et selon le bouton cliqué par l'opérateur, on masque / affiche telles ou telles catégories de feuilles (de nombreux boutons, de nombreuses catégories, de nombreuses combinaisons possibles). D'où l'idée de concaténer, selon l'action opérateur, les différents groupes de feuilles prédéfinis en : tout ce qui est à masquer et tout ce qui est à afficher
-- So long
Bonjour Quetzalcoatl,
| (Déjà là, je ne parviens pas à déclarer directement un tableau de constantes de
| type STRING, je suis obligé de passer par du code pour remplir le tableau, ce
| qui me paraît lourdingue, mais bon).
La fonction array renvoie une variable de type variant ... le reste est dans l'aide de Excel
Un exemple pour le type de déclaration de tableau que tu désires !
'--------------------------------
Sub Exemple()
Dim Arr() As String * 15
Dim Z As Integer, Nb As Integer
Nb = 12
ReDim Arr(1 To Nb) 'Tableau de base 1
For Z = 1 To Nb
Arr(Z) = Format(DateSerial(2005, Z, 1), "mmmm")
Next
MsgBox Arr(3)
End Sub
'--------------------------------
Une solution à ta problématique :
'------------------------------
Sub ConcatenerTableau()
Dim Table1(), C As Integer
Dim Table2(), A As Integer
Dim Table3()
Dim nouveauTableau()
For Each arr In Array(Table1, Table2, Table3)
For A = 0 To UBound(arr)
ReDim Preserve nouveauTableau(C)
nouveauTableau(C) = arr(A)
Next
Next
Msgbox NouveauTableau(5)
End Sub
'------------------------------
Salutations!
"Quetzalcoatl" <razleboldesspams@free.fr.invalid> a écrit dans le message de news: 430a1fef$0$5398$8fcfb975@news.wanadoo.fr...
Bonsoir,
Comment faire pour concaténer (simplement) des tableaux par VBA ?
Mettons que j'aie 3 tableaux :
Dim Table1()
Dim Table2()
Dim Table3()
Je m'arrange pour les remplir de constantes de type STRING avec :
Table1 = Array ("string1", "string2", "string3", "string4", "string5")
Table2 = Array ("string6", "string7", "string8")
Table3 = Array ("string9", "string10")
(Déjà là, je ne parviens pas à déclarer directement un tableau de constantes de
type STRING, je suis obligé de passer par du code pour remplir le tableau, ce
qui me paraît lourdingue, mais bon).
Je voudrais les concaténer PAR CODE VBA, pour obtenir un nouveau tableau, -- qui
aurait pu être déclaré par :
NouvelleTable = Array ("string1", "string2", "string3", "string4", "string5",
"string6", "string7", "string8", "string9", "string10"),
-- dont on puisse accéder aux éléments par :
NouvelleTable (i)
J'ai essayé :
NouvelleTable = Array (Table1, Table2, Table3)
mais l'accès est malaisé : pour accéder à "string 8" par exemple, il faut :
NouvelleTable (2) (3).
Ou alors :
For i = 1 to Ubound (Table1)
NouvelleTable (i) = Table1 (i)
Next i
For i = 1 to Ubound (Table2)
NouvelleTable (i + Ubound (Table1)) = Table2 (i)
Next i
For i = 1 to Ubound (Table3)
NouvelleTable (i + Ubound (Table1) + Ubound (Table2)) = Table3 (i)
Next i
mais c'est super lourd !
Il doit bien y avoir plus simple ? Avez-vous une idée ?
Merci d'avance.
P.S. : pour info, les STRING sont les noms des feuilles de calcul d'un classeur,
feuilles que l'on peut regrouper par catégories logiques prédéfinies; et selon
le bouton cliqué par l'opérateur, on masque / affiche telles ou telles
catégories de feuilles (de nombreux boutons, de nombreuses catégories, de
nombreuses combinaisons possibles). D'où l'idée de concaténer, selon l'action
opérateur, les différents groupes de feuilles prédéfinis en : tout ce qui est à
masquer et tout ce qui est à afficher
| (Déjà là, je ne parviens pas à déclarer directement un tableau de constantes de | type STRING, je suis obligé de passer par du code pour remplir le tableau, ce | qui me paraît lourdingue, mais bon).
La fonction array renvoie une variable de type variant ... le reste est dans l'aide de Excel
Un exemple pour le type de déclaration de tableau que tu désires ! '-------------------------------- Sub Exemple() Dim Arr() As String * 15 Dim Z As Integer, Nb As Integer Nb = 12
ReDim Arr(1 To Nb) 'Tableau de base 1
For Z = 1 To Nb Arr(Z) = Format(DateSerial(2005, Z, 1), "mmmm") Next MsgBox Arr(3) End Sub '--------------------------------
Une solution à ta problématique : '------------------------------ Sub ConcatenerTableau()
Dim Table1(), C As Integer Dim Table2(), A As Integer Dim Table3() Dim nouveauTableau()
For Each arr In Array(Table1, Table2, Table3) For A = 0 To UBound(arr) ReDim Preserve nouveauTableau(C) nouveauTableau(C) = arr(A) Next Next
Msgbox NouveauTableau(5)
End Sub '------------------------------
Salutations!
"Quetzalcoatl" a écrit dans le message de news: 430a1fef$0$5398$ Bonsoir,
Comment faire pour concaténer (simplement) des tableaux par VBA ?
Mettons que j'aie 3 tableaux : Dim Table1() Dim Table2() Dim Table3() Je m'arrange pour les remplir de constantes de type STRING avec : Table1 = Array ("string1", "string2", "string3", "string4", "string5") Table2 = Array ("string6", "string7", "string8") Table3 = Array ("string9", "string10") (Déjà là, je ne parviens pas à déclarer directement un tableau de constantes de type STRING, je suis obligé de passer par du code pour remplir le tableau, ce qui me paraît lourdingue, mais bon).
Je voudrais les concaténer PAR CODE VBA, pour obtenir un nouveau tableau, -- qui aurait pu être déclaré par : NouvelleTable = Array ("string1", "string2", "string3", "string4", "string5", "string6", "string7", "string8", "string9", "string10"), -- dont on puisse accéder aux éléments par : NouvelleTable (i)
J'ai essayé : NouvelleTable = Array (Table1, Table2, Table3) mais l'accès est malaisé : pour accéder à "string 8" par exemple, il faut : NouvelleTable (2) (3).
Ou alors : For i = 1 to Ubound (Table1) NouvelleTable (i) = Table1 (i) Next i For i = 1 to Ubound (Table2) NouvelleTable (i + Ubound (Table1)) = Table2 (i) Next i For i = 1 to Ubound (Table3) NouvelleTable (i + Ubound (Table1) + Ubound (Table2)) = Table3 (i) Next i
mais c'est super lourd !
Il doit bien y avoir plus simple ? Avez-vous une idée ? Merci d'avance.
P.S. : pour info, les STRING sont les noms des feuilles de calcul d'un classeur, feuilles que l'on peut regrouper par catégories logiques prédéfinies; et selon le bouton cliqué par l'opérateur, on masque / affiche telles ou telles catégories de feuilles (de nombreux boutons, de nombreuses catégories, de nombreuses combinaisons possibles). D'où l'idée de concaténer, selon l'action opérateur, les différents groupes de feuilles prédéfinis en : tout ce qui est à masquer et tout ce qui est à afficher
-- So long
michdenis
Désolé, j'ai omis une ligne incrémentant la variable du tableau :
Voici le corrigé : '-------------------------------- Sub ConcatenerTableau()
Dim Table1(), C As Integer Dim Table2(), A As Integer Dim Table3() Dim nouveauTableau()
For Each arr In Array(Table1, Table2, Table3) For A = 0 To UBound(arr) ReDim Preserve nouveauTableau(C) nouveauTableau(C) = arr(A) C = C + 1 ' La ligne oubliée. Next Next MsgBox nouveauTableau(6) End sub '--------------------------------
Salutations!
"michdenis" a écrit dans le message de news: % Bonjour Quetzalcoatl,
| (Déjà là, je ne parviens pas à déclarer directement un tableau de constantes de | type STRING, je suis obligé de passer par du code pour remplir le tableau, ce | qui me paraît lourdingue, mais bon).
La fonction array renvoie une variable de type variant ... le reste est dans l'aide de Excel
Un exemple pour le type de déclaration de tableau que tu désires ! '-------------------------------- Sub Exemple() Dim Arr() As String * 15 Dim Z As Integer, Nb As Integer Nb = 12
ReDim Arr(1 To Nb) 'Tableau de base 1
For Z = 1 To Nb Arr(Z) = Format(DateSerial(2005, Z, 1), "mmmm") Next MsgBox Arr(3) End Sub '--------------------------------
Une solution à ta problématique : '------------------------------ Sub ConcatenerTableau()
Dim Table1(), C As Integer Dim Table2(), A As Integer Dim Table3() Dim nouveauTableau()
For Each arr In Array(Table1, Table2, Table3) For A = 0 To UBound(arr) ReDim Preserve nouveauTableau(C) nouveauTableau(C) = arr(A) Next Next
Msgbox NouveauTableau(5)
End Sub '------------------------------
Salutations!
"Quetzalcoatl" a écrit dans le message de news: 430a1fef$0$5398$ Bonsoir,
Comment faire pour concaténer (simplement) des tableaux par VBA ?
Mettons que j'aie 3 tableaux : Dim Table1() Dim Table2() Dim Table3() Je m'arrange pour les remplir de constantes de type STRING avec : Table1 = Array ("string1", "string2", "string3", "string4", "string5") Table2 = Array ("string6", "string7", "string8") Table3 = Array ("string9", "string10") (Déjà là, je ne parviens pas à déclarer directement un tableau de constantes de type STRING, je suis obligé de passer par du code pour remplir le tableau, ce qui me paraît lourdingue, mais bon).
Je voudrais les concaténer PAR CODE VBA, pour obtenir un nouveau tableau, -- qui aurait pu être déclaré par : NouvelleTable = Array ("string1", "string2", "string3", "string4", "string5", "string6", "string7", "string8", "string9", "string10"), -- dont on puisse accéder aux éléments par : NouvelleTable (i)
J'ai essayé : NouvelleTable = Array (Table1, Table2, Table3) mais l'accès est malaisé : pour accéder à "string 8" par exemple, il faut : NouvelleTable (2) (3).
Ou alors : For i = 1 to Ubound (Table1) NouvelleTable (i) = Table1 (i) Next i For i = 1 to Ubound (Table2) NouvelleTable (i + Ubound (Table1)) = Table2 (i) Next i For i = 1 to Ubound (Table3) NouvelleTable (i + Ubound (Table1) + Ubound (Table2)) = Table3 (i) Next i
mais c'est super lourd !
Il doit bien y avoir plus simple ? Avez-vous une idée ? Merci d'avance.
P.S. : pour info, les STRING sont les noms des feuilles de calcul d'un classeur, feuilles que l'on peut regrouper par catégories logiques prédéfinies; et selon le bouton cliqué par l'opérateur, on masque / affiche telles ou telles catégories de feuilles (de nombreux boutons, de nombreuses catégories, de nombreuses combinaisons possibles). D'où l'idée de concaténer, selon l'action opérateur, les différents groupes de feuilles prédéfinis en : tout ce qui est à masquer et tout ce qui est à afficher
-- So long
Désolé, j'ai omis une ligne incrémentant la variable du tableau :
Voici le corrigé :
'--------------------------------
Sub ConcatenerTableau()
Dim Table1(), C As Integer
Dim Table2(), A As Integer
Dim Table3()
Dim nouveauTableau()
For Each arr In Array(Table1, Table2, Table3)
For A = 0 To UBound(arr)
ReDim Preserve nouveauTableau(C)
nouveauTableau(C) = arr(A)
C = C + 1 ' La ligne oubliée.
Next
Next
MsgBox nouveauTableau(6)
End sub
'--------------------------------
Salutations!
"michdenis" <michdenis@hotmail.com> a écrit dans le message de news: %23f3sa21pFHA.2620@TK2MSFTNGP10.phx.gbl...
Bonjour Quetzalcoatl,
| (Déjà là, je ne parviens pas à déclarer directement un tableau de constantes de
| type STRING, je suis obligé de passer par du code pour remplir le tableau, ce
| qui me paraît lourdingue, mais bon).
La fonction array renvoie une variable de type variant ... le reste est dans l'aide de Excel
Un exemple pour le type de déclaration de tableau que tu désires !
'--------------------------------
Sub Exemple()
Dim Arr() As String * 15
Dim Z As Integer, Nb As Integer
Nb = 12
ReDim Arr(1 To Nb) 'Tableau de base 1
For Z = 1 To Nb
Arr(Z) = Format(DateSerial(2005, Z, 1), "mmmm")
Next
MsgBox Arr(3)
End Sub
'--------------------------------
Une solution à ta problématique :
'------------------------------
Sub ConcatenerTableau()
Dim Table1(), C As Integer
Dim Table2(), A As Integer
Dim Table3()
Dim nouveauTableau()
For Each arr In Array(Table1, Table2, Table3)
For A = 0 To UBound(arr)
ReDim Preserve nouveauTableau(C)
nouveauTableau(C) = arr(A)
Next
Next
Msgbox NouveauTableau(5)
End Sub
'------------------------------
Salutations!
"Quetzalcoatl" <razleboldesspams@free.fr.invalid> a écrit dans le message de news: 430a1fef$0$5398$8fcfb975@news.wanadoo.fr...
Bonsoir,
Comment faire pour concaténer (simplement) des tableaux par VBA ?
Mettons que j'aie 3 tableaux :
Dim Table1()
Dim Table2()
Dim Table3()
Je m'arrange pour les remplir de constantes de type STRING avec :
Table1 = Array ("string1", "string2", "string3", "string4", "string5")
Table2 = Array ("string6", "string7", "string8")
Table3 = Array ("string9", "string10")
(Déjà là, je ne parviens pas à déclarer directement un tableau de constantes de
type STRING, je suis obligé de passer par du code pour remplir le tableau, ce
qui me paraît lourdingue, mais bon).
Je voudrais les concaténer PAR CODE VBA, pour obtenir un nouveau tableau, -- qui
aurait pu être déclaré par :
NouvelleTable = Array ("string1", "string2", "string3", "string4", "string5",
"string6", "string7", "string8", "string9", "string10"),
-- dont on puisse accéder aux éléments par :
NouvelleTable (i)
J'ai essayé :
NouvelleTable = Array (Table1, Table2, Table3)
mais l'accès est malaisé : pour accéder à "string 8" par exemple, il faut :
NouvelleTable (2) (3).
Ou alors :
For i = 1 to Ubound (Table1)
NouvelleTable (i) = Table1 (i)
Next i
For i = 1 to Ubound (Table2)
NouvelleTable (i + Ubound (Table1)) = Table2 (i)
Next i
For i = 1 to Ubound (Table3)
NouvelleTable (i + Ubound (Table1) + Ubound (Table2)) = Table3 (i)
Next i
mais c'est super lourd !
Il doit bien y avoir plus simple ? Avez-vous une idée ?
Merci d'avance.
P.S. : pour info, les STRING sont les noms des feuilles de calcul d'un classeur,
feuilles que l'on peut regrouper par catégories logiques prédéfinies; et selon
le bouton cliqué par l'opérateur, on masque / affiche telles ou telles
catégories de feuilles (de nombreux boutons, de nombreuses catégories, de
nombreuses combinaisons possibles). D'où l'idée de concaténer, selon l'action
opérateur, les différents groupes de feuilles prédéfinis en : tout ce qui est à
masquer et tout ce qui est à afficher
For Each arr In Array(Table1, Table2, Table3) For A = 0 To UBound(arr) ReDim Preserve nouveauTableau(C) nouveauTableau(C) = arr(A) C = C + 1 ' La ligne oubliée. Next Next MsgBox nouveauTableau(6) End sub '--------------------------------
Salutations!
"michdenis" a écrit dans le message de news: % Bonjour Quetzalcoatl,
| (Déjà là, je ne parviens pas à déclarer directement un tableau de constantes de | type STRING, je suis obligé de passer par du code pour remplir le tableau, ce | qui me paraît lourdingue, mais bon).
La fonction array renvoie une variable de type variant ... le reste est dans l'aide de Excel
Un exemple pour le type de déclaration de tableau que tu désires ! '-------------------------------- Sub Exemple() Dim Arr() As String * 15 Dim Z As Integer, Nb As Integer Nb = 12
ReDim Arr(1 To Nb) 'Tableau de base 1
For Z = 1 To Nb Arr(Z) = Format(DateSerial(2005, Z, 1), "mmmm") Next MsgBox Arr(3) End Sub '--------------------------------
Une solution à ta problématique : '------------------------------ Sub ConcatenerTableau()
Dim Table1(), C As Integer Dim Table2(), A As Integer Dim Table3() Dim nouveauTableau()
For Each arr In Array(Table1, Table2, Table3) For A = 0 To UBound(arr) ReDim Preserve nouveauTableau(C) nouveauTableau(C) = arr(A) Next Next
Msgbox NouveauTableau(5)
End Sub '------------------------------
Salutations!
"Quetzalcoatl" a écrit dans le message de news: 430a1fef$0$5398$ Bonsoir,
Comment faire pour concaténer (simplement) des tableaux par VBA ?
Mettons que j'aie 3 tableaux : Dim Table1() Dim Table2() Dim Table3() Je m'arrange pour les remplir de constantes de type STRING avec : Table1 = Array ("string1", "string2", "string3", "string4", "string5") Table2 = Array ("string6", "string7", "string8") Table3 = Array ("string9", "string10") (Déjà là, je ne parviens pas à déclarer directement un tableau de constantes de type STRING, je suis obligé de passer par du code pour remplir le tableau, ce qui me paraît lourdingue, mais bon).
Je voudrais les concaténer PAR CODE VBA, pour obtenir un nouveau tableau, -- qui aurait pu être déclaré par : NouvelleTable = Array ("string1", "string2", "string3", "string4", "string5", "string6", "string7", "string8", "string9", "string10"), -- dont on puisse accéder aux éléments par : NouvelleTable (i)
J'ai essayé : NouvelleTable = Array (Table1, Table2, Table3) mais l'accès est malaisé : pour accéder à "string 8" par exemple, il faut : NouvelleTable (2) (3).
Ou alors : For i = 1 to Ubound (Table1) NouvelleTable (i) = Table1 (i) Next i For i = 1 to Ubound (Table2) NouvelleTable (i + Ubound (Table1)) = Table2 (i) Next i For i = 1 to Ubound (Table3) NouvelleTable (i + Ubound (Table1) + Ubound (Table2)) = Table3 (i) Next i
mais c'est super lourd !
Il doit bien y avoir plus simple ? Avez-vous une idée ? Merci d'avance.
P.S. : pour info, les STRING sont les noms des feuilles de calcul d'un classeur, feuilles que l'on peut regrouper par catégories logiques prédéfinies; et selon le bouton cliqué par l'opérateur, on masque / affiche telles ou telles catégories de feuilles (de nombreux boutons, de nombreuses catégories, de nombreuses combinaisons possibles). D'où l'idée de concaténer, selon l'action opérateur, les différents groupes de feuilles prédéfinis en : tout ce qui est à masquer et tout ce qui est à afficher