[VBA] Déclarer plusieurs variables en boucle

Résolu/Fermé
Signaler
Messages postés
6
Date d'inscription
vendredi 14 janvier 2011
Statut
Membre
Dernière intervention
25 mars 2011
-
Messages postés
6
Date d'inscription
vendredi 14 janvier 2011
Statut
Membre
Dernière intervention
25 mars 2011
-
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

Messages postés
24222
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
29 novembre 2021
6 978
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41989 internautes nous ont dit merci ce mois-ci

Messages postés
6
Date d'inscription
vendredi 14 janvier 2011
Statut
Membre
Dernière intervention
25 mars 2011

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.
Messages postés
24222
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
29 novembre 2021
6 978
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
Messages postés
6
Date d'inscription
vendredi 14 janvier 2011
Statut
Membre
Dernière intervention
25 mars 2011

C'est noté !
Merci Eric pour toutes ces explications et bon WE à vous