Recherche dans une colonne de tableau structuré non fonctionelle

Bonjour tout le monde,

Voilà j'ai un soucis avec une recherche dans une colonne de tableau structuré. J'ai une colonne année, entête en "A1" et première valeur en "A2".

J'ai entré cette commande dans mon code:

Set Cellule_1 = .ListColumns("Année").DataBodyRange.Find(Year(Date), LookIn:=xlValues, lookat:=xlWhole) 'Recherche dans colonne "Année"

Toutes mes cases ont la même valeur -> "2024". Or lorsque je récupère l'adresse de la cellule, il me donne "A3" et pas "A2" qui est la première cellule contenant cette valeur. L'un de vous saurait éclairer ma lanterne ?

Merci.

Bonjour

Tu récupère l'adresse comment ?

Poste plus de lignes de ton code

Bonjour à tous ,

C'est normal. Avec la méthode FIND (sur une plage), la recherche commence après la cellule en haut à gauche de la plage.

Donc dans votre cas, je devine que les en-têtes du tableau structuré sont en ligne 1 et que le tableau structuré débute en A1.

  • ListColumns("Année").DataBodyRange est une plage commençant en A2.
  • Le début de la recherche FIND sur DataBodyRange fait donc à partir de la cellule qui est après la cellule A2
  • le premier 2024 trouvé par la méthode FIND est donc en cellule A3

Pour avoir un résultat correct (comme l'en-tête de la colonne est différent d'un nombre), utilisez :

Set Cellule_1 = .ListColumns("Année").Range.Find(Year(Date), LookIn:=xlValues, lookat:=xlWhole)

Range est une plage qui commence à A1, donc la recherche commencera après la cellule A1 et se fera à partir de la cellule A2.

Re,

Vous pouvez aussi utiliser le paramètre After de la fonction Find qui précise explicitement après quelle cellule on commence la recherche.

On va préciser à FIND que la recherche doit commencer après la dernière cellule de la plage. FIND va considérer que la cellule après la dernière cellule est A2 (il repart à la première cellule de la plage).

Sub test()
Dim Cellule_1
   With Me.ListObjects(1).ListColumns("Année").DataBodyRange
      Set Cellule_1 = .Find(Year(Date), LookIn:=xlValues, lookat:=xlWhole, after:=.Cells(.Count, 1))
      MsgBox Cellule_1.Address(0, 0)
   End With
End Sub

Le fichier joint comprend les deux méthodes dans le module de la feuille "Feuil1".

Bonsoir à vous deux,

Excusez-moi je pensais avoir répondu.

78chris:

Je récupère l'adresse avec un simple Cellule_1.Address .

mafraise:

Je suis parti sur le After, avec un loop, donc au final arrivé à la fin de ma recherche il va dans la case A2 avant de terminer le loop en A3 donc tout est bien vérifié. Cela fonctionne parfaitement. Merci pour l'info je n'avais pas vu cette subtilité du find.

Bonne soirée à vous ;)

Bonsoir Heelflip

Merci pour le retour.

Rechercher des sujets similaires à "recherche colonne tableau structure fonctionelle"