Problème de Columns dans vba Excel

Fermé
Jeunepadawan - 17 août 2010 à 06:58
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 - 19 août 2010 à 19:18
Bonjour à tous,

J'ai une question très simple.
Je suis actuellement en plain projet de programmation vba (mon tout premier à vrai dire), et je rencontre un léger problème, que je ne sais résoudre...
Peut-on m'expliquer pourquoi la ligne suivante fonctionne, tandisque la seconde renvoit l'erreur 1004:

Set TableauD = ActiveSheet.UsedRange.Rows("2:" & ActiveSheet.UsedRange.Rows.Count)

Set TableauB = ActiveSheet.UsedRange.Columns("2:" & ActiveSheet.UsedRange.Columns.Count)

Mon but étant de sélectionner un tableau sans la première ligne, puis sans la première colonne. La commande ActiveSheet.UsedRange.Columns.Count fonctionnant très bien, j'en ai déduit que le problème viens de la selection Columns( ... )

Après de nombreux tests et contrôles, Rows fonctionne quant à lui parfaitement.
Se problème a lieu tant sur la version 2003 que 2007.

Merci à vous.

2 réponses

eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
18 août 2010 à 08:03
Bonjour,

Une plage de lignes s'écrit "2:5"
Une plage de colonnes s'écrit "B:E"

Donc tu devrais écrire :
Set TableauB = ActiveSheet.UsedRange.Columns("B:" & Chr(64 + ActiveSheet.UsedRange.Columns.Count))
pour transformer ton nombre en lettre.

Seulement à partir de AA tu vas être embété...
Utilise plutôt resize() :
Set TableauB = Range("B:B").Resize(ActiveSheet.UsedRange.Rows.Count, ActiveSheet.UsedRange.Columns.Count - 1)

eric
1
Jedi_en_devenir
19 août 2010 à 18:49
Bonjour cher Eric,

Bonjour et surtout merci pour ton explication. Mon erreur était donc de ne pas convertir en lettre le deuxième terme de sélection dans Columns(...).

La première solution que tu me propose correspond tout à fait à ce que je cherchais. En revanche, la deuxième pose un inconvénient: elle impose que le tableau commence en cellule A1, ce qui n'est pas forcément mon cas... Vous me direz, étant donné que la sélection du tableau avec UsedRange est définie en fonction de toutes les cellules "remplies" de la feuille, on a intérêt à commencer en première cellule. Mais bon, question de présentation^^

Quoi qu'il en soit, je te remercie une nouvelle fois de ta réponse.
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
Modifié par eriiic le 19/08/2010 à 19:20
Si tu es sûr de ne jamais atteindre AA tu peux te contenter de la 1ère solution.
Mais la 2nde solution n'a pas de limitation, le .resize élargit ta selection (ici la colonne B) de x colonnes. Tu démarres où tu veux avec la largeur que tu veux

eric
0
Bonjour,

Il me semble que Columns ne prend par le chiffre, mais la lettre de la colonne.
0
Jeunepadawan
18 août 2010 à 00:38
Wow! Il faudrait vraiment que je me relise ! C'est révoltant ! Bref...

Merci, cher Bacus, de ta réponse. Cependant, j'ai déjà essayé de remplacer le "2:" par un "b:" dans le cas de columns(...), mais lorsque j'essaye d'exécuter la macro, j'obtiens le message d'erreur : "Erreur d'exécution '13': Incompatibilité de type".

Par ailleurs, quelqu'un pourrait-il m'expliquer les règles de sélection des objets range. J'ai trouvé la première ligne sur Internet, et je dois avouer que l'écriture "2:" me laisse quelque peu perplexe... J'ai bien compris que cela servait à sélectionner la valeur servant de première borne à la sélection, mais pourquoi cette typographie ne fonctionne-t-elle pas avec la collection Columns...? Et pourquoi la seconde borne peut-elle être juste indiquée sous forme de nombre?

Voilà un infime échantillon des questions qui me taraudent en cette période d'initiation à la programmation, pauvre newbie que je suis.

Merci^^
0