Méthode find dans un TCD

Galaktus

XLDnaute Nouveau
Bonsoir le forum :)

Je viens à vous car je n'arrive pas à extraire des données d'un tcd, je m'explique :

Je travaille sur un fichier ou j'utilise un TCD pour la synthèse d'un tableau structuré, jusqu'à la pas de problème, dans ce TCD j'aurais donc la liste complète de référence diamant et plusieurs totale de valeur qui seront associés à chaque référence.

Dans un soucis de transparence j'ai crée un userform ou l'utilisateur pourra sélectionner une référence diamant et visualiser la valeur "nombre de diamantage" présente dans le TCD qui lui sera associé.

Je joint un fichier test pour que ca soit plus clair, pour info j'y ai enlevé pas mal de données mais le fichier définitif aura énormément d'onglet et de données à traiter c'est pour ca que je voulais utiliser la méthode de l'userform pour faciliter la vie de l'utilisateur.

Dans le fichier test l'userform se lance dans l'onglet "gestion", dans la combobox machine peut importe la selection les 2 fonctionnes, dans "suivi diamant" se trouve le tableau structuré d'ou j'extrais les données du TCD présent dans l'onglet "synthèse outillage".

Je poste aussi la ligne de code qui coince.

Private Sub Combobox_selection_reference_Change()

'# Donnée attribuée à la variable [ReferenceSelectionne]
ReferenceSelectionnee = Userform_usure_actuelle_diamant.Combobox_selection_reference.Value

'Exécution de la macro en cache
Application.ScreenUpdating = False

'Début de méthode {With} pour un ensemble de modifications sur l'objet "Userform_usure_actuelle_diamant"
With Userform_usure_actuelle_diamant

'C'est ici
.Label_usure_nombre_diamantage.Caption = Sheets("Synthèse outillage").ListObjects("TCD_diamant").ListColumns(1).DataBodyRange.Find(ReferenceSelectionnee, LookIn:=xlValues, lookat:=xlWhole, SearchOrder:=xlByRows).Offset(0, 4)

'Fin de méthode {With}
End With

'Annulation de l'exécution macro en cache
Application.ScreenUpdating = True

End Sub

D'avance je remercie tout celles ou ceux qui pourront m'aider.

En attendant de vous relire bonne soirée à vous.
 

Pièces jointes

  • Test.xlsm
    62.3 KB · Affichages: 12
Dernière édition:

chris

XLDnaute Barbatruc
Bonjour

Si tu peux enlever Module et N°de passage dans ton TCD afin qu'il corresponde aux champs de ton userform
utilise plutot PivotTable.GetPivotData que Find
Code:
Dim Resultat As Range

    Set Resultat = Worksheets("Synthèse outillage").Cells(4, 4). _
        PivotTable.GetPivotData("Nombre de diamantage ", "Référence diamant", ReferenceSelectionnee, "Fabriquant", NumeroKapp)
If Not Resultat Is Nothing Then....
 

Galaktus

XLDnaute Nouveau
Bonsoir Chris et merci de ta réponse.

Je ne peux pas vraiment modifier la structure du TCD, la personne en charge du suivi diamant devra avoir accés à toutes ses valeurs :/, que veut tu dire par "afin qu'il corresponde aux champs de ton userform"?

Je ne pourrais tester le code que demain.

Bonne nuit à toi
 

chris

XLDnaute Barbatruc
Re

Ton userform cherche sur la référence et le fabricant mais si tu as d'autres données dans le TCD, le chiffre correspond à un module et un N°.

Dans ton exemple tu n'as qu'un seul module et un seul N° par modèle diamant et machine mais si cela n'est pas le cas dans une base plus importante tu ne peux pas trouver la bonne ligne sans les deux autres infos...

Si tu tiens malgré tout au find pas très logique dans un TCD
Code:
    Dim Resultat As Range
 
    Set Resultat = Worksheets("Synthèse outillage").PivotTables("TCD_diamant").PivotFields("Référence diamant").DataRange.Find(What:=ReferenceSelectionnee, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)
    If Not Resultat Is Nothing Then .Label_usure_nombre_diamantage.Caption = Resultat.Offset(0, 4).Value
 

Galaktus

XLDnaute Nouveau
Bonjour :)

Oui effectivement "Module", "N° de passage" et même "Fabriquant sont des valeurs qui vont changer.

La méthode .Find elle fonctionne à merveille du coup, j'avoue que je dois rendre se fichier assez rapidement et du coup je prend sans avoir le temps d'explorer plus en profondeur l'autre option.

Je te remercie en tout cas pour ton temps et d'avoir pris le temps de m'expliquer, super forum vraiment.

Bonne continuation et bonne journée à toi. :)
 

Discussions similaires

Réponses
5
Affichages
211

Statistiques des forums

Discussions
312 237
Messages
2 086 486
Membres
103 232
dernier inscrit
logan035