Find dans un tableau structuré

Salut à toutes et tous.

Nouvelle question mais je galère à trouver la réponse malgré mes recherches.

J'aimerai obtenir une le numéro de colonne d'une valeur dans un tableau structuré. Jusque là rien de compliqué, j'utilise le code

Sheets("Feuil1").Range("Tableau1").Find(10).Column

J'obtient donc 4 dans le fichier en exemple.

Cependant, j'aimerai obtenir le numéro de la colonne à l’intérieur du tableau structuré,donc 1 au lieu de 4 car j'aurai besoin de réutiliser ce numéro de colonne avec un code type

Sheets("Feuil1").Range("Tableau1").cells(1,1) 

qui lui utilise bien la référence par rapport au tableau et non à la feuille.

Merci d'avance pour vos retours et désolé si la question est bête mais j'ai beau chercher, je tourne en rond (la joie d'être autodidacte )

48test.xlsm (23.01 Ko)

Bonjour,

à tester,

Sub Colonne10()
With Sheets("Feuil1").ListObjects("Tableau1").DataBodyRange
x = .Cells(1, 1).Column
MsgBox .Find(10).Column - x + 1
End With
End Sub

Bonjour,

sans vouloir compliqué vu que ton tableau commence en colonne C, alors ajoute : -3 au bout du code.

MsgBox Sheets("Feuil1").Range("Tableau1").Find(10).Column - 3

Cordia5

Merci à vous deux pour vos retours.

i20100 : Je pensais qu'il y avait une fonction spécifique pour obtenir la référence "absolue" plutôt que de jouer avec des soustractions, mais si ça n'existe pas, je ferai comme ça.

CORDIA5 :

Malheureusement cette solution n'est pas viable car le tableau est susceptible de bouger je ne peut donc pas avoir de référence fixe.

Re-bonjour,

avec cela peut-être, l'emplacement du tableau n'est pas pris en compte.

Cordia5

A force de m'acharner, j'ai fini par trouver une autre fonction que Find qui fonctionne

Application.WorksheetFunction.Match(10, Sheets("Feuil1").Range("Tableau1"), 0)

J'ai perdu beaucoup de temps pour pas grand chose, mais au moins ça me permet de découvrir de nouvelles fonctions VBA

Voilà voilà merci encore pour votre aide.

Bonjour à tous

Set cellule = Sheets("Feuil1").Range("Tableau1").Find(10)
MsgBox cellule.Column - cellule.ListObject.Range.Column + 1

Edit : fonctionne quelle que soit la ligne du tableau alors que ta ligne ne fonctionne pas si le tableau a plus d'une ligne, ce qui est en général le cas...

Merci aussi pour cette solution.

Bonjour,

Il n'y a pas besoin de spécifier la feuille. Mais il faut tester le cas où la valeur cherchée n'existe pas.

Set result = Range("Tableau1").Find(20)

If Not result Is Nothing Then MsgBox result.Column - Range("Tableau1").Column + 1

Boisgontier

RE

Oui et même plus court

Set cellule =[Tableau1].Find(20)

mais ici le but était surtout la syntaxe de récupération de colonne...

Bonsoir …

À toutes fins utiles : de façon plus générale (lignes et colonnes), quel que soit l'emplacement du tableau (pas forcément structuré*) dans le classeur

lignescolonnes

*Pour un tableau structuré avec titres prendre : C3:F7

Pour une plage de cellules contigües prendre : C4:F7

Nota : Range("Table").Row est le n° (de l'onglet) de la première ligne (du tableau, sous la ligne des titres) ,

ici 4, d'où le + 1 ( 5 - 4 + 1 = 2) .

Rechercher des sujets similaires à "find tableau structure"