Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

selection avec range et tableaux structurés

  • Initiateur de la discussion Initiateur de la discussion rafi93
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

rafi93

XLDnaute Occasionnel
bonjour
petit nouveau à VBA j'ai un souci avec les range

j'ai un tableau structuré dans Feuil1, avec comme noms de colonnes colA, colB, ...
je ne comprends pas pourquoi le 2eme select plante
comment faut il écrire pour selectionner la colonne colB du tableau ?

Sub test2()

Worksheets("Feuil1").Range("tableau").Select
Worksheets("Feuil1").Range("tableau[colB]").Select

End Sub

merci !
 
Re : selection avec range et tableaux structurés

Bonjour à tous

rafi93
Juste une question: pourquoi veux-tu sélectionner ?
Car il est rarement utile de le faire en VBA.
(et il est même souvent ici (et ailleurs) conseillé d'éviter les Select et Activate)
 
Re : selection avec range et tableaux structurés

en fait, je cherchais à lire/ecrire dans une colonne du tableau
comme je n'arrivais pas à adresser la zone, j'ai simplifié mon probleme en cherchant juste à le selectionner...
 
Re : selection avec range et tableaux structurés

Re


Utilises les possibilités offertes par ListObject
(ci-dessous quelques exemples d'utilisation et on n'utilise pas de Selection)
Code:
Sub b()
With Sheets("Feuil1").ListObjects("Tableau1")
    MsgBox .DataBodyRange.Columns(2).Address
    MsgBox .DataBodyRange.Columns(2).Range("A1").Address
    MsgBox .DataBodyRange.Columns(2).Range("A3").Address
End With
End Sub
 
Re : selection avec range et tableaux structurés

Re

Il suffit d'essayer pour le savoir 😉
ou ne pas oublier ce que t'avais déjà suggéré Reguiero à minuit vingt cinq. 😉
Code:
Sub c()
MsgBox Range("Tableau1[colC]").Address
End Sub
 
Dernière édition:
Re : selection avec range et tableaux structurés

voici ce que j'obtiens, toujours le même probleme
je ne comprends pas pourquoi

precision : j'ai joué Sub(C) càd

Sub c()
MsgBox Range("Tableau[colC]").Address
MsgBox Worksheets("Feuil1").Range("Tableau[colC]").Address

End Sub

aussi bien la 1ere que la 2eme ligne plante idem
 

Pièces jointes

  • ScreenShot001.jpg
    64 KB · Affichages: 104
  • ScreenShot001.jpg
    64 KB · Affichages: 83
  • ScreenShot001.jpg
    64 KB · Affichages: 86
Dernière édition:
Re : selection avec range et tableaux structurés

Re


Dans ton fichier exemple testvba.xlsm, c'est Tableau1 et non pas tableau !
(comme le montraient mes précédents exemples)

Testes ceci pour t'en convaincre
Code:
Sub d()
MsgBox Sheets("Feuil1").ListObjects.Count
x = Sheets("Feuil1").ListObjects.Count
MsgBox Sheets("Feuil1").ListObjects(x).Name
End Sub
 
Dernière édition:
Re : selection avec range et tableaux structurés

en fait je viens de comprendre le pb

j'ai donné "manuellement" le nom "Tableau" à la plage qui inclut la ligne d'en tête (colA, etc), et que j'adresse dans mon code; ce qui me génère l'erreur

mais j'ai aussi par ailleurs selectionné la même plage puis "inserer>tableau" qui m'a créé automatiquement le nom "Tableau1", mais qui correspond à la plage sans les lignes d'en-tête.

j'apprends donc que le code VB travaille sur la plage sans les en-tête, et que je faisais une erreur en donnant manuellement le nom "Tableau" à l'ensemble de la plage.
 
Re : selection avec range et tableaux structurés

Bonsoir à Tous, rafi93

Ta référence "Tableau" = Plage Nommée

Tableau1 = Une collection Listobjects
Si tu veux sélectionner tableau1 depuis n'importe ou dans ton classeur
Il est nécessaire de préciser la feuille contenant l'objet.

Ce lien n'existe plus

A+
 
Re : selection avec range et tableaux structurés

merci pour ce lien, que je mets en Favoris !

une question : quand j'adresse un tableau (au sens Inserer>Tableau), je dois calculer son offset par rapport à la 1ere ligne de la feuille, avant de pouvoir lire ou écrire dans une cellule.

D = [Tableau[ColB]].Row - 1
For Each C In [Tableau1[ColB]]
Range("Tableau[ColB]").Cells(C.Row - D, 1).Value = "toto"

ce qui est assez lourd

comment faire pour que l'adresse de la cellule soit simplement relative, peu importe où se trouve le tableau ?
j'ai l'impression que Listobjects le permet, mais je n'en suis pas sur
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
15
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…