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

XL 2016 vba excel rechercher la plus grande valeur d'une colonne qui contient résultat listbox

andrekn13

XLDnaute Occasionnel
Bonjour encore une fois !
J'ai un userform11_1 qui sert à ajouter un nouveau produit. la première listeBox demande sur l'une des 3 catégories laquelle on choisie.
j'essaye dans la Textbox suivante de faire apparaître la référence qui devrait s'incrémenter. Sino il faudrait parcourir toute la feuille pour connître la dernière.
Par exemple :
dans la catégorie des "PA" la dernière est PA04, il faudrait donc qu'elle affiche "PA05"
Dans mon fichier j'ai essayé plusieurs macros d'essais mais, décidément, je bug
Merci pour celui qui aurait une idée
mon fichier joint
Merciiiiiii encore
 

Pièces jointes

  • 9.8.xlsm
    204.2 KB · Affichages: 7

job75

XLDnaute Barbatruc
Bonjour andrekn13,

Pour obtenir les valeurs incrémentées des 3 catégories inspirez-vous de cette macro :
VB:
Sub Test()
Dim NewPA$, NewVI$, NewBI$
[Table3[REF]].Name = "P" 'plage nommée
NewPA = "PA" & Format([MAX(IF(ISNUMBER(-SUBSTITUTE(P,"PA",)),--SUBSTITUTE(P,"PA",)))] + 1, "00")
NewVI = "VI" & Format([MAX(IF(ISNUMBER(-SUBSTITUTE(P,"VI",)),--SUBSTITUTE(P,"VI",)))] + 1, "00")
NewBI = "BI" & Format([MAX(IF(ISNUMBER(-SUBSTITUTE(P,"BI",)),--SUBSTITUTE(P,"BI",)))] + 1, "00")
MsgBox NewPA & vbLf & NewVI & vbLf & NewBI 'pour tester
End Sub
A+
 

Hasco

XLDnaute Barbatruc
Repose en paix
bonjour,

Vous verrez dans votre tableau de la feuille "CATEGORIE CODE" (il y avait une espace à la fin) une nouvelle colonne intitulée 'NEXT' et qui contient la formule suivante qui renvoie la prochaine Référence pour le code en question :
=[@CODE] &TEXTE( AGREGAT(14;6;SUBSTITUE(Table3[REF];[@CODE];"")/(GAUCHE(Table3[REF];2)=[@CODE]);1)+1;"00")

il suffit ensuite de le récupérer sur le click de la listBox par ces lignes :
VB:
'
' Si l'utilisateur a choisit un item
    If ListBox1.ListIndex > -1 Then
        '
        ' Retourner la prochaine référence pour l'item sélectionne
        Me.TextBox1.Text = ThisWorkbook.Sheets("CATEGORY CODE").Range("Table4[NEXT]")(ListBox1.ListIndex + 1).Value
    End If

Cette Référence n'a rien à voir dans un textbox. Elle ne devrait pas pouvoir être changée par l'utilisateur.
Un Label lui irait mieux.

Avec ces 25 userform et leurs codes respectifs, votre classeur se dirige tout droit vers la belle usine à gaz, d'autant que vous ne nommer pas vos objets, n'indentez pas votre code, commencez tout et ne finissez rien.

Un seul devrait suffire pour la gestion des clients, pas 5.

Déjà vos tableaux de feuilles de calcul, renommez les plutôt que de vous contenter noms donnés par excel et qui ne disent rien du tout. Dans 6 mois ou plus vous ne saurez peut-être plus ce qu'est 'Table4' mais s'il s'appelait 'T_Categories' vous sauriez qu'il s'agit d'un tableau "T_" et qu'il contient les catégories.
Idem pour vos contrôles de userform

"TextBox1" pour celui qui lira votre code (ou vous-même) ne signifie pas grand chose. "TbReference" un peu plus. (Tb pour TextBox )

Excusez-moi pour ces reflexions, mais voyant votre classeur, je me suis dis, que soit vous faisiez quelque chose d'à peu près en espérant que ça ne plante pas, soit que vous alliez vous décourager de ne pas arriver à vos fins.

cordialement
 

Pièces jointes

  • andrekn13 9.8.xlsm
    184.8 KB · Affichages: 5

andrekn13

XLDnaute Occasionnel
Bonjour Hasco
tout d'abord, quand j'ai regardé mes mails sur mon tel, et vu ta réponse, je suis resté perplexe ; c'est la première fois que j'ai un aussi long message. Je t'ai relus plusieurs fois avec attention, d'abord pour comprendre le fond. C'est d'une valeur dont tu n'as pas idée, on apprend "sur le tas" mais toujours avec le sentiment qu'on fait les pompiers mais qu'en réalité je n'ai jamais commencé par le "bon bout" , en commençant par le début. Merci pour tes précieux conseils.
et évidemment, même en y passant des nuits entières depuis 2 semaines sur ce fichier, tes réponses comme : "=[@CODE] &TEXTE( AGREGAT(14; ........" reste un véritable mystère , tout comme ce "Dim NewPA$"
c'est fou comme tout est relatif !! et j'ai pas fini d'en bavé
merci je suis très touché
( sur cette recherche de ce résultat j'ai dû passé au moins 8h sans aucun avancement )
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Ce code, qui n'est pas de moi est l'équivalent de
Dim NewPa As String

Les % $ et autre signes en fin de déclaration de variables ont été inventés lorsque les pc avaient très peu de mémoire et une des priorités était son économie.
Aujourd'hui nous disposons de beaucoup de mémoire et pouvons nous permettre des déclaration longues.

Je sais bien que certains ici les utilisent pour leur caractère 'cabalistique' en espérant que leur code fasse plus pro et ce sans explication, mais croyez-moi c'est pas ça qui fait la qualité d'un code. Alors utilisez les déclarations explicites longues, vous vous en serez reconnaissant plus tard.

Cordialement
 

job75

XLDnaute Barbatruc
C'est un question de goût, les adeptes du "plus c'est long plus c'est bon" utilisent :
VB:
Dim a As String
Dim b As String
Dim c As String
Dim d As String
Dim e As String
Dim f As String
Dim g As String
Dim h As String
Dim i As String
Dim j As String
Les autres :
VB:
Dim a$, b$, c$, d$, e$, f$, g$, h$, i$, j$
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…