[VBA] Déclarer plusieurs variables en boucle
Résolu
koobcam
Messages postés
7
Statut
Membre
-
koobcam Messages postés 7 Statut Membre -
koobcam Messages postés 7 Statut Membre -
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 !
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 !
A voir également:
- [VBA] Déclarer plusieurs variables en boucle
- L'indice n'appartient pas à la sélection vba - Forum VB / VBA
- Xiaomi s'éteint tout seul et se rallume en boucle - Forum Xiaomi
- Excel compter cellule couleur sans vba - Guide
- Télé samsung s'éteint et se rallume en boucle - Forum Téléviseurs
- Vba range avec variable ✓ - Forum VB / VBA
2 réponses
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
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
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.
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.
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
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