XL 2010 Commande (.ListIndex qui ne fonctionne pas partout.)

MAN

XLDnaute Occasionnel
Bonjour le forum. bonjour a tous.
j'ai un fichier composé de plusieurs paramètres Vba. dont un de gestion de stocks.
quand je simplifie ce fichier tel qu'ici, il me présente bien le stock restant sur le LabelStock.
si je reprend et le réintègre dans le projet global, le LabelStock se bloque à "ListIndex + 4" peu importe le "ComboRef.ListIndex"
que faire si je veux intégrer cette procédure dans le projet global.
Merci d'avance
 

Pièces jointes

  • stockk.xlsm
    28.3 KB · Affichages: 21

JM27

XLDnaute Barbatruc
Bonjour
A priori je suis transparent!!

A quoi sert :
Me.ComboBox1.ListIndex = Me.ComboBox1.ListIndex
Me.LabelStock.Enabled = False
Me.LabelStock = ""

1/Première ligne ne sert à rien.
2/ne sert à rien : enabled :
aide microsoft :
Enabled, propriété
Spécifie si un contrôle peut recevoir le focus et répondre aux événements générés par l'utilisateur.
nota : un label ne peut recevoir le focus : donc sert à rien.
La seule chose qui change dans ce cas avec enabled = false est la couleur du texte ( en grisée)
3/Comme précisé dans mon post précédent :Me.LabelStock à une propriété caption pour documenter le texte à l'intérieur de celui ci; si caption omis je ne suis pas du tout sur que cela
marche. donc Me.LabelStock.caption = ""
peut être serais je entendu ce coup ci ?
 

MAN

XLDnaute Occasionnel
Bonjour le forum. c'est la premiere fois que je propose un sujet qui passionne le forum.
le code proposé précédemment ne marche pas toujours
Private Sub Combobox1_Change()
if LEN( Me.Combobox1.Text ) > 3 then
'Ici ton code
End If
c'est compliqué. mais, nous aprochons du but. je le sens.
 

ChTi160

XLDnaute Barbatruc
Bonjour Patrick ,

Je crois que tu sais très bien faire cela , si j'ai bien compris le But du Demandeur !

tapper des lettres dans un Combobox et récupérer la Liste des Mots du Combobox qui commencent par ces Lettres

me trompais je Lol
merci par avance
jean marie
je ne retrouve plus le Fichier
 

patricktoulon

XLDnaute Barbatruc
Bonjour ChTi160
Hah!!! enfin y en a un qui l'a vu

une combobox intuitive (déjà des exemples il y en a foison sur le forum )

et de surcroît je vois que le change déclenche un dico et restitue le dico.key dans le ".List"
j'ai juste une question pour vous tous " et la colonne 2 alors elle disparaît !!!!??????"

je suppose qu'elle sert a déterminer la ligne correspondante dans la feuille
en supprimant des items de la list par l'intuitivité comment voulez vous gardez des index valable ou pouvoir les determiner
il vous faut non seulement dicoter mais aussi garder les index ligne colonne 2

bref c'est brouillon tout ça
en tout cas +1 pour le jean-marie
je suis en silence depuis hier et je me disais mais bon sang y en a pas un qui va le voir :p

conclusion :conception de l’intuitivité a revoir
 

patricktoulon

XLDnaute Barbatruc
re
ben oui le "a" a été mangé je crois :D:rolleyes:😂🤣😅
la regle a observer quand on fait du combo intuitif
on ajoute pas des item dans une boucle directement dans le ".List"
on cré un tableau(variable tableau)
on travaille sur le tableau
et on restitue le tableau retravailler selon le value du combo dans le combo
et on le restitue avec ces deux colonne

comment on fait simple ?
ben au lieu de prendre [A4:Axxx] on prend [A4:Bxxxx]
dans une boucle on index les lignes DANS LE TABLEAU!!!
et on le balance dans le ".list"


quand on le retravaille se lon le matchentry entier ou non
on retravaille un new tableau TOUJOURS SUR 2 COLONNES
et on ré injecte dans le ".List"

pourquoi une variable tableau

ben déjà parce que ca va plus vite( faut y penser si les listes font 3 kilomètres)
 

patricktoulon

XLDnaute Barbatruc
re
un truc à l'arrache comme ca vite fait en 2 minutes
un combo dans le userform
VB:
Dim montableau

Private Sub ComboBox1_Change()
    Dim monNewTableau
    ReDim monNewTableau(1 To UBound(montableau), 1 To 2)
    With ComboBox1
        For i = 1 To UBound(montableau)
            If UCase(montableau(i, 1)) Like "*" & UCase(.Value) & "*" Then
                a = a + 1
                monNewTableau(a, 1) = montableau(i, 1): monNewTableau(a, 2) = montableau(i, 2)
            End If
        Next
        If a > 0 Then .List = monNewTableau Else .List = montableau
    .DropDown
    End With

End Sub

Private Sub UserForm_Activate()
    With Sheets(1): Set plage = .Range("A4:B" & .Cells(Rows.Count, 1).End(xlUp).Row): End With
    montableau = plage.Value
    For i = 1 To UBound(montableau): montableau(i, 2) = plage.Cells(i, 1).Row: Next
    With ComboBox1: .MatchEntry = 2: .ColumnCount = 2: .List = montableau: End With
End Sub

et SVP sans dictionnaire a moins que vous ne vouliez pas les doublons et encore meme la on peut faire sans dico

demo7.gif



PS:
j'oubliais

si vous voulez matcher par "commence par " et non "contient "enlevez l’astérisque devant
Code:
If UCase(montableau(i, 1)) Like UCase(.Value) & "*" Then
 
Dernière édition:

ChTi160

XLDnaute Barbatruc
Re
je viens de tester et j'ai du rajouter
un a = 0 pour éviter les lignes Blanche dans le Combobox "inadmissible" Lol
la preuve en Image Lol
autre précision , je suis a 2 et Non 1
jean marie
 

Pièces jointes

  • Testv1.gif
    Testv1.gif
    106.8 KB · Affichages: 8

patricktoulon

XLDnaute Barbatruc
re
a ben c'est une base que je vous ai fait maintenant si vous voulez jumper les blanc ou les doublons il faut aménager le truc

bref en moins de 15 ligne c'est bouclé quoi
maintenant si tu y tiens voici comment je jump les blanc et les doublons et toujour sans dictionnaire
VB:
Dim montableau

Private Sub ComboBox1_Change()
    Dim monNewTableau
    ReDim monNewTableau(1 To UBound(montableau), 1 To 2)
    With ComboBox1
        For i = 1 To UBound(montableau)
            If UCase(montableau(i, 1)) Like UCase(.Value) & "*" Then
                a = a + 1
                monNewTableau(a, 1) = montableau(i, 1): monNewTableau(a, 2) = montableau(i, 2)
            End If
        Next
        If a > 0 Then .List = monNewTableau Else .List = montableau
        .DropDown
    End With

End Sub

Private Sub UserForm_Activate()
    Dim plage As Range
    With Sheets(1): Set plage = .Range("A4:B" & .Cells(Rows.Count, 1).End(xlUp).Row): End With
    tableauBase plage, True
    With ComboBox1: .MatchEntry = 2: .ColumnCount = 2: .List = montableau: End With
End Sub

Sub tableauBase(rng As Range, Optional Jumpdouble As Boolean = False)
    Dim t, a&, i&, x&
    t = rng.Value
    ReDim montableau(1 To rng.Rows.Count, 1 To 2)
    With Application: colcontrol = .Transpose(.Index(t, 0, 1)): End With
    For i = 1 To UBound(t)
        If t(i, 1) <> "" Then
            If Jumpdouble Then x = Application.IfError(Application.Match(colcontrol(i), colcontrol, 0), 0) Else x = i
            If x = i Then a = a + 1: montableau(a, 1) = t(i, 1): montableau(a, 2) = rng.Cells(i, 1).Row
        End If
    Next
End Sub


LOL!!😂
 

Membres actuellement en ligne

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 848
dernier inscrit
Djigbenou