[VBA] Déclarer plusieurs variables en boucle

Résolu/Fermé
koobcam Messages postés 6 Date d'inscription vendredi 14 janvier 2011 Statut Membre Dernière intervention 25 mars 2011 - Modifié par koobcam le 15/01/2011 à 12:26
koobcam Messages postés 6 Date d'inscription vendredi 14 janvier 2011 Statut Membre Dernière intervention 25 mars 2011 - 15 janv. 2011 à 12:25
Bonjour à tous,

Dans le cadre de mon travail je suis amené à créer des macros VBA de mise en forme sur Excel. Je n'y arrive pas trop mal pour le moment, mais je suis tombé sur un os. Voilà mon souci :

Visualisez une plage de données dans mon tableur Excel à partir de laquelle je vais créer un Tableau croisé dynamique (TCD) :

; Col 1 ; Col 2 ; Col 3 ; ... ; Col j ; ... ; Col c ;
Ligne 1
Ligne 2
Ligne 3
Ligne ...
Ligne i
Ligne ...
Ligne l

c et l sont déclarés comme "Integer" , me permettent de définir le numéro de dernière colonne et de dernière ligne de ma plage de données.

Ils sont obtenus de la façon suivante (la plage de données commençant sur la cellule A1) :

c = ActiveSheet.Range("A1").End(xlToRight).Column
l = ActiveSheet.Range("A65536").End(xlUp).Row

Je voudrais nommer l'ensemble des étiquettes de colonnes, positionnées sur la ligne 1 d'Excel par une variable "C(j)" avec une boucle For...next et leur affecter la valeur de l'étiquette afin de l'utiliser dans construction de mon TCD.

Voici donc le début du code que je n'arrive pas à faire marcher :

Dim c As Integer
Dim l As Integer
Dim j As Integer

Dim "c" & j As String '>> début du problème

c = ActiveSheet.Range("A1").End(xlToRight).Column
l = ActiveSheet.Range("A65536").End(xlUp).Row

For j = 1 To c

"c" & j = Sheets("FeuilleDonnées").Cells(1, j).Value

Next

'J'utiliserais ensuite à ma guise c1, c2, c3 ... 'pour les utiliser dans mon TCD. Par exemple :

With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields(c3)
.Orientation = xlDataField
.Position = 3
End With

Merci pour votre aide précieuse !


2 réponses

eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
14 janv. 2011 à 19:54
Bonjour,

C'est une variable tableau que tu as besoin, seulement si la taille est variable il faut la mettre avec un redim; :
dim col() as string, c as long
c = ActiveSheet.Range("A1").End(xlToRight).Column
redim col(c)

'ensuite tu utilises l'indice, en reprenant ton code en exemple :
For j = 1 To c
col(j) = Sheets("FeuilleDonnées").Cells(1, j).Value
Next

....PivotFields(col(3))

eric
3
koobcam Messages postés 6 Date d'inscription vendredi 14 janvier 2011 Statut Membre Dernière intervention 25 mars 2011
15 janv. 2011 à 09:39
Bonjour Eric,

Merci pour votre aide : ça marche du tonnerre !

Pouvez-vous s'il vous plaît me ré-expliquer pourquoi il faut déclarer l'élément 'col()' en String puis d'utiliser la fonction 'Redim' en y incluant le numéro d'index de ma dernière colonne utilisée dans le TCD ?

Est-ce que le fait de mettre deux parenthèses dans la déclaration de la variable 'col()' indique qu'elle va accueillir des valeurs d'index différents ?

Encore merci pour votre aide.
>> Ce sujet peut être classé comme résolu.
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
15 janv. 2011 à 12:06
Re,

dim col(7) déclare une variable tableau de 8 éléments (de 0 à 7), seulement tu ne peux pas remplacer le 7 par une variable calculée.
Il faut donc le déclarer sans dimension avec dim col() (les () sont là pour indiquer un tableau) et ensuite changer sa dimension avec redim col(c).
Et si ja mais tu diois redimensionner à nouveau et que tu veuilles garder ses valeurs tu mets redim preserve col(c)

C'est à toi de mettre en résolu en haut

eric
0
koobcam Messages postés 6 Date d'inscription vendredi 14 janvier 2011 Statut Membre Dernière intervention 25 mars 2011
15 janv. 2011 à 12:25
C'est noté !
Merci Eric pour toutes ces explications et bon WE à vous
0