Retrouver l'Index d'une Variable en Table Dynamique Array

@

@+Thierry

Guest
Bonjour tout le monde.

Non seulement je n'ai pas de temps à vous consacrer cette semaine mais de plus je vais poser une question... (pour une fois !)

Donc voilà ce que je suis en train de faire :

Création d'une variable en tableau pour construire une Liste dans une ListBox de UserForm... Pas de vrai souci (cette private sub est lancée à l'initialisation d'USF2, lequel s'ouvre aprés qu'un AutoFilter ait été appliqué par le USF1

Pour info Mon "TabT" est déclaré dans un Module Standard en "Public TabT() As Variant" (il y a dedans des dates, des Currency, des Strings enfin de tout !)


Private Sub ListBoxDate_Create()
Dim Cell As Range
Dim r As Range
Dim i As Integer
ListBoxDate.ColumnCount = 2
ListBoxDate.ColumnWidths = "2 cm; 2 cm"

ListBoxDate.Clear
Set r = Sheets(1).Range("N2", [N65536].End(xlUp))
Set r = r.SpecialCells(xlCellTypeVisible)
ReDim TabT(0 To r.Count, 1 To 8)
For Each Cell In r
TabT(i, 1) = Format(Cell.Value, "DD/MM/YYYY")
TabT(i, 2) = Format(Cell.Offset(0, 1).Value, "DD/MM/YYYY")
TabT(i, 3) = Cell.Offset(0, -10).Value
TabT(i, 4) = Cell.Offset(0, 5).Value
TabT(i, 5) = Cell.Offset(0, -13).Value
TabT(i, 6) = Cell.Offset(0, -12).Value
TabT(i, 7) = Cell.Offset(0, -11).Value
TabT(i, 8) = Cell.Offset(0, -5).Value

i = i + 1
Next
Me.ListBoxDate.List = TabT
End Sub

Donc à l'issue de cette procédure j'ai bien ma ListboxDate avec deux colonnes de date, Nickel Chrome.

Pour un évènement click sur cette ListBoxDate, je fais différentes choses et je lance cette macro par laquelle je dois remonter des données sur différentes TextBoxes... Comme Ceci

Private Sub InvoiceRecapTabT()
Dim ValMin As Integer
Dim ValSup As Integer
Dim Somme As Currency
Dim i As Integer
Dim S As Integer
ValMin = LBound(TabT)
ValSup = UBound(TabT)
For i = ValMin To ValSup
If TEXTBOXCRITERE= TabT(i, 3) Then
Somme = Somme + TabT(i, 4)
S = S + 1
Y = TabT(i, 5)
M = TabT(i, 6)
D = TabT(i, 7)
End If
Next i
TextBoxUSD = Format(Somme, "# ##0.00")
TextBoxSplit = S
TextBoxDoc = Format(Y, "0000") & " " & Format(M, "00") & " " & Format(D, "0000")

ICI ====> The Problème :
Jusque là "tutti va bene"......... MAIS (of course !!) j'ai besoin de savoir Où je suis dans mon "i" pour un autre champs qui lui nécessite de savoir rééllement à quelle ligne de mon tableau il y a matching avec cette donnée "TEXTBOXCRITERE" entrée dans une autreTextBox...

Pour l'instant je n'arrive pas à trouver comment retourner l'index dans mon Dynamique Array"TabT" quand il y a Matching avec TEXTBOXCRITERE... Pour l'instant je finte comme ceci en utilisant l'index de ma ListBoxDate qui possède donc (heureusement!!!) le même nombre de ligne que "TabN" et qui mon retourne bien cette cléf unique dans le TextBoxIDRef...

Dim ii As Integer
For ii = 0 To ListBoxDate.ListCount - 1
If ListBoxNarration.Selected(ii) Then
TextBoxIDref = TabN(ii, 8)
End If
Next ii

NB Malgré les apparence, je ne travaille pas en MultiSelect, c'est juste le seul moyen que j'ai trouvé pour retourner cet Index de position de Ligne sur TabN... Et je pense qu'il y a plus simple.

Donc je récapitule ma question Comment récupérer l'index de ligne quand il y a matching sur un des items d'un dynamique Array en tableau multi-colonnes...

Par avance merci à ceux qui auront un moment pour m'éclairer, car comme disais une fois STéphane, la gestion des variables en Tableau est assez peu documentée d'exemple.

Bon App
@+Thierry
 
T

Ti

Guest
pour une fois, c'est toi qui n'est pas très clair malgré les explications . Mais la solution ne semble guère compliquée. Eventuellement, envoie-moi ton truc en m'indiquant où tu veux récupérer ton index de tableau
 
@

@+Thierry

Guest
Merci

Euf tel Quel Zippé c'est un truc de 170 Ko, faudrait que je fasse une version "Light" mais là j'ai pas le temps.

Disons que ma question est longue au dessus car reprenant mon job actuel.

Je reprends avec un exemple plus basic.

je Redim un TabT sur 8 colonnes sur le nombre de lignes existantes sur ma plage filtrée en utilisant SpecialCells(xlCellTypeVisible)

Ce TabT, Colonnes 1, remplie ma ListBox1. Cette Colonne 1 est en fait le Libellé d'une Ecriture comptable. (j'ai une recherche par Date aussi mais c'est identique, mais plus complex, donc on prendra le libellé pour cet exemple)

Quand je Click et fait une Sélection dans ma ListBox1 je matche la valeur sélectionnée pour retourner une Clef de Numéro de Référence Comptable dans un TextBox c'est ma Variable TOTO. (String) elle se situe dans le TabT

TOTO peut se retrouver plusieurs fois dans ma TabT colonne 3 (en effet la même facture peut avoir été splitée sur des comptes différents mais avoir le même journal de référence comptable)

Par une boucle comme ceci :

ValMin = LBound(TabT)
ValSup = UBound(TabT)
For i = ValMin To ValSup
If TOTO = TabT(i, 3) Then
Somme = Somme + TabT(i, 4)
S = S + 1
End If
Next i
TextBoxSomme = Somme
TextBoxSplit = S

Je récupère bien la somme totale de la facture Initiale même si elle a été splittée. Mais si, par exemple, je veux récupérer une autre info de type String (par exemple Un numéro de Facture en colonne 8 de mon TabT) Je ne sais le faire qu'en lançant une nouvelle boucle sur ma listBox comme expliqué ci-dessus.

Je pense que je dois pouvoir récupérer n'importe quel Colonne de mon TabT en indiquant l'index sans avoir besoin de passer par la ListBox comme l'exemple ci-dessus... c'est celà ma question, dans une boucle comme ci dessus, comment puis-je savoir à quelle Ligne de TabT TOTO matche et récupérer ainsi cet index.

Je ne travaille pas avec les tableaux depuis longtemps et je dois avoir quelque chose qui m'échappe. Mais finalement, je crois que je veux faire quelque chose d'irréalisable (ou en tout cas de pas réaliste). En effet par définition TOTO peut matcher plusieurs fois, donc j'aurai plusieurs index... donc il faudrait faire un nouvelle Array...

Non je pars dans un truc qui rhime à rien. (c'est bien d'écrire) Finalement ma boucle sur listBox semble nécessaire pour retourner des items de la même ligne depuis ma TabT et je vais reprendre tout mon prog avec cette base.

Ma boucle sur Matching TOTO est là juste pour savoir le numbre de Split dans la facture c'est OK avec "S", pour avoir la somme totale de la facture c'est OK avec "Somme" et si je veux retourner un élément d'info par ligne j'utilise ma boucle l'item sélectionné sur la ListBox elle-même.

Si tu veux je t'enverrai l'appli quand je serai en phase finale.

C'est une appli de Recherche dans une BDD (Requête SQL sur AS400 avec DataSelect)
Une fois la base importée dans une feuille il y a un premier UserForm de recherche sur Fournisseur pour assister les Users dans la Saisie de factures redondantes revenant tous les mois à saisir sur un AS400)
Elle dirige le User par des filtres Pyramidales pour arriver sur la dernière ligne comptable existante pour en refaire un clone et sans refaire aucune saisie réintégrer un nouvelle écriture comptable dans l'AS400 en utilisant la méthode PutInClipboard et ClientAccess (IBM) comme émulateur AS400... C'est assez impressionnant.

Là j'en suis aux finitions pour juste une petite frame qui informerait le User avec des Infos supplémentaires (total de la Facture, Numéro etc etc) dans la sélection pyramidale...

Voilà, donc laisse Tomber Ti, c'est très gentil mais je crois que j'étais en fausse route...

En tous cas, je délire avec les tableaux, Tri dans le tableau, filtre des doublons... C'est vraiment génial de savoir un tout petit peu maitriser...

Allez à plus et encore merci.

(vous comprenez maintenant pourquoi je suis là moins souvent)

@+Thierry
 
V

Vériland

Guest
holla! tout doux......reviens ici toi...rhôôôôô!...'tention...j'vais chercher le matou moi...non mais!...c'est quoi ces manières...Oups!...s'cusez-moi...lol

Bonsoir les Thierrys et le forum...j'ai ma souris qui s'amuse...hi hi hi...Bon ben c'est le combat des chefs de la macro ici...hi hi hi...je viens de lire ce fil c'est déjà de la vrai programmation...à vrai dire Thierry, je ne te serais pas d'un grand secours, rien que par tes explications je comprends mieux pourquoi des fois l'informatique c'est "prise de tête"...lol...donc j'fais que passer pour vous souhaiter bon courage...lol

A+ Vériland
 

Discussions similaires

Réponses
0
Affichages
153
Réponses
1
Affichages
168
Réponses
6
Affichages
247
Réponses
2
Affichages
241

Statistiques des forums

Discussions
312 230
Messages
2 086 428
Membres
103 207
dernier inscrit
Michel67