Excel - sélection de plages multiples avec Range()

David -  
 David -
Bonjour,

J'ai besoin de sélectionner de nombreuses zones d'une feuille pour changer la couleur de fond.

Pour cela, j'ai créé une macro où je sélectionne des plages nommées :
Range("zone1, zone2, ... zoneX").Select


Mais si la chaîne "zone1, ...zoneX" dépasse 255 caractères, Excel affiche une erreur à l'exécution de la macro :
erreur 1004 : la méthode 'range' de l'objet '_global' a échouée


Ma question : y'a-t-il un moyen pour que Range traite une chaîne de plus de 255 caractères de manière à ne faire qu'une seule sélection ? ou suis-je obligé de procéder en plusieurs fois et donc de boucler sur plusieurs sélections ?

A voir également:

2 réponses

Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   61
 
Bonjour,

Je ne comprend pas trop, une sélection sur excel est illimitée.

Pourriez-vous nous donner le code exact?

Cordialement.
1
David
 
Le code est assez simple.

ça, ça marche (la string cellules fait 250 caractères de long) :
Dim cellules as String
cellules = "zone_1, zone_2, zone_3, zone_4, zone_5, zone_6, zone_7, zone_8, zone_9, zone_10, zone_11, zone_12, zone_13, zone_14, zone_15, zone_16, zone_17, zone_18, zone_19, zone_20, zone_21, zone_22, zone_23, zone_24, zone_25, zone_26, zone_27, zone_28, zone_29"
Range(cellules).Select


ça, ça ne marche pas (la string cellules fait 259 caractères de long) :
Dim cellules as String
cellules = "zone_1, zone_2, zone_3, zone_4, zone_5, zone_6, zone_7, zone_8, zone_9, zone_10, zone_11, zone_12, zone_13, zone_14, zone_15, zone_16, zone_17, zone_18, zone_19, zone_20, zone_21, zone_22, zone_23, zone_24, zone_25, zone_26, zone_27, zone_28, zone_29, zone_30"
Range(cellules).Select


J'aurai pu changé le nom des zones en z_1, ... , z_30 mais c'est long
J'ai contourné le problème en faisant 2 sélections au lieu d'une (et donc en lançant 2 traitements au lieu d'un)
0
Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   61
 
Une chaîne de caractère d'une variable de type String peut contenir environ 2^31 (c'est de la théorie) caractères. Donc un peu plus de 2 milliards. Je doute que ça vienne de là. Il doit y avoir un autre problème dans votre code.

Où avez-vous défini les zones?
0
David
 
Les zones sont définies dans une feuille classique, à la main, et il n'y a aucune erreur de nommage (j'ai vérifié, plusieurs fois).

La définition d'une string de plus de 255 c ne pose aucun problème (voir le second exemple). c'est uniquement le fait d'utiliser range(cellules) avec cellules > 255 c qui plante que ce soit en passant par une string ou en direct (range("zone1 ... zone30")).

(PS : j'ai aussi essayé de couper la chaine en la concaténant avec des &)
0
PlacageGranby Messages postés 393 Date d'inscription   Statut Membre Dernière intervention   26
 
Bonjour,

J'ai fait une petite recherche sur google pour voir si on peut fusionner des zone.
On ne trouve rien la dessus, mais après j'ai chercher si on pouvait fusionner des objets range. et voila
https://docs.microsoft.com/en-us/previous-versions/office/developer/office-2003/aa213609(v=office.11)?redirectedfrom=MSDN

J'ai trouvé la méthode Union.


Donc
Dim Cellules as range

Set Cellules = Application.Union(Range("zone_1"), Range("zone_2"),Range("zone_3"))

Cellules.select
0
David > PlacageGranby Messages postés 393 Date d'inscription   Statut Membre Dernière intervention  
 
Merci, ça confirme ma recherche
0
David
 
Bonjour,

Je pense avoir trouvé : il semble bien qu'il y ait une limite de 255 caractères pour les strings utilisées en tant que paramètre d'une méthode (mais pas des sub ...) : pour des exemples, faire une recherche sur "excel vba 255 character limit parameter"

Le contournement est d'utiliser Union(Range("zone1")[, Range("zone2"...]) pour construire un Range comme dans mon cas.

Merci à Kuartz :)
1