Range, Array et Cells
Bonjour,
Je n'arrive pas à déboguer ce morceau de code (la ligne qui bogue est soulignée) :
'Mise en forme tableau (couleurs)
Vclair = Array("Cells(4 + n, 1), Cells(4 + n, 4)", "Cells(5 + n, 1), Cells(36 + n, 4)", "Cells(6 + n, 3), Cells(6 + n, 4)", "Cells(7 + n, 3), Cells(11 + n, 3)", "Cells(13 + n, 3), Cells(13 + n, 4)", "Cells(14 + n, 3), Cells(16 + n, 3)", "Cells(18 + n, 3), Cells(18 + n, 4)", "Cells(19 + n, 3), Cells(24 + n, 3)", "Cells(31 + n, 3), Cells(31 + n, 4)", "Cells(36 + n, 3), Cells(36 + n, 4)")
For k = 0 To 9 'vert le plus pâle
Range(Vclair(k)).Select
With Selection.Interior
.ThemeColor = xlThemeColorAccent6
.TintAndShade = 0.799981688894314
End With
Next k
Alors qu'une ancienne version avec dans Array une référence de cellule sous forme "A1: B10" fonctionnait et que si je colle "Cells(4 + n, 1), Cells(4 + n, 4)" à la place de Vclair(k) ça fonctionne aussi.
Le n dans mes références de cellules me permet d'incrémenter la création d'un grand nombre de tableaux sur la même feuille.
Merci beaucoup !
C6l74
Bonsoir,
range(Cells(4 + n, 1), Cells(4 + n, 4)) fonctionne car ici nous sommes 100% sous VBA, donc il interprète le "n" comme la variable N qui vaut une certaine valeur, et le "+" comme une instruction de calcul, si on prend en exemple n= 3 , on a bien :
range(Cells(4 + 3, 1), Cells(4 + 3, 4))
range(Cells(7, 1), Cells(7, 4))
C'est une référence de plage "comprise" par VBA tout est OK
Lorsque vous faites : mon tableau comporte les valeurs "strings" suivantes :
Vclair = Array("Cells(4 + n, 1), Cells(4 + n, 4))
je m'arrête juste au premier index car le reste c'est pareil, et bien ici on n'est plus à 100% sous VBA car votre variable "n" est comprise dans la chaine alphanumérique de la valeur de votre tableau, et le "+" est considéré ici comme un caractère alphanumérique, en somme si n=3 vous aurez :
Vclair(0) = "Cells((4+n,1),Cells(4+n,4)"
du coup Range(Vclair(0)) sera égal à :
Range(Cells((4+n,1),Cells(4+n,4)) qui ressemble à ce que l'on a plus haut mais qui n'est pas égal du fait que n vaut n et le + n'est pas un plus, ce qui n'est pas une référence.
Le range qui fonctionne avec de l'alphanumérique est celui dont la valeur est de type "$B23" par exemple.
Enfin c'est mon résonnement...
du coup pour votre problème, votre tableau Vclair devrait être un tableau 100% numérique à 2 dimensions où la première serait la référence de la ligne et l'autre la colonne et que ces valeurs seraient utilisées avec un pas de deux. Ou bien alors un tableau à 4 dimensions et à ce moment là il n'y aurait pas ce pas de deux
@ bientôt
LouReeD
Bonjour,
LouReeD
L'objet Range() attend des arguments en alphanumérique ou en objet Range donc, en alphanumérique de cette sorte Range("A1:D10") ou en objet Range de cette sorte Range(Cells(1, 1), Cells(10, 4)) mais dans ce dernier cas, ça ne peut être sous forme de chaîne car tu ne peux pas mettre un objet sous forme de chaîne, le compilateur ne sait pas l'interpréter. Tu peux utiliser un tableau de Range :
Dim Vclair(1 To 10) As Range
n = 5
Set Vclair(1) = Range(Cells(4 + n, 1), Cells(4 + n, 4))
Set Vclair(2) = Range(Cells(5 + n, 1), Cells(36 + n, 4)) '<--ici, avec 36, elle recouvre toutes les autres plages donc quel est l'intérêt ?
Set Vclair(3) = Range(Cells(6 + n, 3), Cells(6 + n, 4))
'etc...ou sous forme alphanumérique :
Dim Vclair
n = 5
Vclair = Array("A" & 4 + n & ":D" & 4 + n, _
"A" & 5 + n & ":D" & 36 + n, _
"C" & 6 + n & ":D" & 6 + n, _
"C" & 7 + n & ":C" & 11 + n, _
"C" & 13 + n & ":D" & 13 + n, _
"C" & 14 + n & ":C" & 16 + n, _
"C" & 18 + n & ":D" & 18 + n, _
"C" & 19 + n & ":C" & 24 + n, _
"C" & 31 + n & ":D" & 31 + n, _
"C" & 36 + n & ":D" & 36 + n)mais dans les deux cas, si tu utilises une variable il te faux la sortir de la chaîne :
"A" & 4 + n & ":D" & 4 + n ici, A et
Bonjour Theze,
Voilà qui est mieux dit ! Je n'ai jamais été bon en "theze" et synthèse
Mais l'idée était là c'est déjà ça...
@ bientôt
LouReeD
Bonjour LouReeD et Theze,
Merci beaucoup pour votre aide... çaaaaaaa maaaaaaaaaaaaarche
J'ai retenu l'option de Theze qui m'a semblé plus facile à comprendre (parce que je n'ai jamais travaillé avec des Dim de tableaux ou la fonction Ref).
@Theze
'<--ici, avec 36, elle recouvre toutes les autres plages donc quel est l'intérêt ?
Mon n s'incrémente à + 40 à chaque fois, mon tableau s'étend sur les lignes 1 à 36, puis 40 à 76...
Pas de soucis !
En plus je me complique quelque fois la vie !
Merci de votre retour.
@ bientôt
LouReeD
Bonjour à tous,
Une autre solution : initialiser l'array avec les adresses de plage:
Vclair = Array(Range(Cells(4 + n, 1), Cells(4 + n, 4)).Address, Range(Cells(5 + n, 1), Cells(36 + n, 4)).Address, .......)
For k = 0 To 9 'vert le plus pâle
With Range(Vclair(k)).Interior
.ThemeColor = xlThemeColorAccent6
.TintAndShade = 0.799981688894314
End With
Next kA+