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

Jacky67

XLDnaute Barbatruc
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
Bonjour,
Pas certain d'avoir compris la démarche.
S'il s'agit d'inscrire dans "LabelStock" la soustraction de "quota"-"qtte"
Ceci serait suffisant
VB:
Private Sub UserForm_Initialize()
   Me.ComboRef.List = Feuil1.Range("A4:A" & Feuil1.Range("A65536").End(xlUp).Row).Value
End Sub
'''''''''''''''''''''
Private Sub ComboRef_Change()
Dim lig&
Me.LabelStock = ""
If Me.ComboRef = "" Then Exit Sub
lig = Application.Match(Me.ComboRef, Feuil1.[a:a], 0)
Me.LabelStock = Feuil1.Cells(lig, "c") - Feuil1.Cells(lig, "b")
End Sub
 
Dernière édition:

ChTi160

XLDnaute Barbatruc
Bonsoir
Pas tout compris, mais ce que j'ai modifié pour éviter la définition de la Ligne cible via le ListIndex+4 du Combobox
VB:
Private Sub UserForm_Initialize()
   Dim Cell As Range
    Me.ComboRef.ColumnCount = 2
    Me.ComboRef.ColumnWidths = "1;0"
    With Sheets("feuil1")
        For Each Cell In .Range("A4:A" & .Range("A65536").End(xlUp).Row)
             Me.ComboRef.AddItem Cell
             Me.ComboRef.List(Me.ComboRef.ListCount - 1, 1) = Cell.Row
        Next
    End With
End Sub

Private Sub ComboRef_Change()
Dim Ligne As Long
    If Me.ComboRef.ListIndex = -1 Then
        Set D = CreateObject("Scripting.Dictionary")
        X = UCase(Me.ComboRef) & "*"
        If X <> "*" Then
            For Each C In a
                If UCase(C) Like X Then D(C) = ""
            Next C
            Me.ComboRef.List = D.keys
            Me.ComboRef.DropDown
        End If
    End If
    With Me.ComboRef
    If .ListIndex <> -1 Then
    Ligne = .List(.ListIndex, 1)
 
 '       Me.LabelStock.Enabled = False ' voir explication de JM27
        Me.LabelStock = Sheets("Feuil4").Range("D" & Ligne)
    Else
        Me.ComboRef = ""
        Me.LabelStock = ""
    End If
    End With
End Sub
à voir
jean marie
 
Dernière édition:

JM27

XLDnaute Barbatruc
Bonsoir
2 questions :

Pourquoi le enabled=false
Pour moi un label ne peut pas recevoir le focus.
et pourtant un label a une propriété enabled ( a quoi cela sert t'il?)

Un label à une propriété caption.
j'aurais mis Me.LabelStock.caption = ""

Mais cela répond t'il à ton pb : pas sur du tout
 

MAN

XLDnaute Occasionnel
bonsoir le forum. je suis content que ma requette suiscite autant d'intérêt de la part de professionnels de la chose.
j'ai pris la proposition de Chti160. pour insérer dans l'application mère. non seulement la propriété Tab index s'affole, mais, je reçois le message EREUR D'EXECUTION 2147024809 (80070057)
IMPOSSIBLE DE LIRE LA PROPRIETE LIST; ARGUMENT NON VALIDE . sur la ligne en jaune.
je demeure bloqué sur le projet.
J'ai besoin de tout l'aide possible
merci.

Private Sub ComboBox1_Change()
Dim Ligne As Long
If Me.ComboBox1.ListIndex = -1 Then
Set D = CreateObject("Scripting.Dictionary")
X = UCase(Me.ComboBox1) & "*"
If X <> "*" Then
For Each C In a
If UCase(C) Like X Then D(C) = ""
Next C
Me.ComboBox1.List = D.keys
Me.ComboBox1.DropDown
End If
End If
With Me.ComboBox1
If .ListIndex <> -1 Then
Ligne = .List(.ListIndex, 1)

' Me.LabelStock.Enabled = False ' voir explication de JM27
Me.LabelStock = Sheets("REC").Range("T" & Ligne)
Else
Me.ComboBox1 = ""
Me.LabelStock = ""
End If
End With
End Sub
 

MAN

XLDnaute Occasionnel
Merci baucoup.
cependant, ne comprenant rien, recadrez moi en me donnant la formule magique.
dans le fichier principal, le combobox est nommé Combobox1 car il y en a plusieurs.
je reste suspendu a vos claviers.
merci encore pour le temps que vous m'accordez
 

ChTi160

XLDnaute Barbatruc
Re
Pour imager mon propos
VB:
Private Sub UserForm_Initialize()
   Dim Cell As Range
    Me.ComboRef.ColumnCount = 2 'on définit le nombre de colonne du combobox
    Me.ComboRef.ColumnWidths = "1;0" ' On définit la largeur des colonnes une seule sera visible
    With Sheets("feuil1")'avec la feuille
        For Each Cell In .Range("A4:A" & .Range("A65536").End(xlUp).Row) on va boucle sur l'ensemble des lignes de la plage ainsi definie
             Me.ComboRef.AddItem Cell 'on ajoute la valeur de la cellule dans la première colonne            Me.ComboRef.List(Me.ComboRef.ListCount - 1, 1) = Cell.Row'on va ajouter le numéro de la ligne de la cellule dans la deuxième colonne
        Next
    End With
End Sub
Jean marie
 

MAN

XLDnaute Occasionnel
Bonjour le forum. je reviens à la discussion car je cherche toujours comment m'en sortir. actuelement, je n'ai aucune porte.

Private Sub Combobox1_Change()
If Me.ComboBox1.ListIndex <> -1 Then
Me.TxtStock.Enabled = False
Me.TxtStock = Sheets("REC").Range("T" & Me.ComboBox1.ListIndex + 8)
Me.ComboBox1.ListIndex = Me.ComboBox1.ListIndex
Else
Me.ComboBox1 = ""
Me.TxtStock = ""
End If
End Sub
 

MAN

XLDnaute Occasionnel
excusez moi. j'ai cliquer par hasard sur répondre.
le code ci dessus affiche exactement le stock. cependant, la saisie semi automatique et intuitive de la combobox1 n'est plus active. elle n'admet pas d'écriture, il faudra toujours passer par le déroulement.


Private Sub Combobox1_Change()
If Me.ComboBox1.ListIndex <> -1 Then
Me.LabelStock.Enabled = False
Me.LabelStock = Sheets("REC").Range("T" & Me.ComboBox1.ListIndex + 8)
Me.ComboBox1.ListIndex = Me.ComboBox1.ListIndex
Else
Me.ComboBox1 = ""
Me.LabelStock = ""
End If
End Sub
pour l'userform.
Userform Initialise
With Me.ComboBox1
.List = ActiveSheet.Range("S8:S" & [s65000].End(xlUp).Row).Value
.ListIndex = -1
.SetFocus
End With
End Sub
je suis impatient car je sais que c'est un sujet passionnant.
merci d'avance
 

MAN

XLDnaute Occasionnel
merci baucoup. ChTi160. ça marche. cependant, que ce soit pour les deux MatchEntry, la premiere lettre valide la commande. or la liste est constituée de plusieurs noms aux premieres lettres identiques. c'est là ou je suis bloqué actuellement.
je vous suit.
merci une fois de plus.
 

ChTi160

XLDnaute Barbatruc
Reil faut que tu déterminés le nombre de lettre à partir du quel tu effectues ce que tu veux. Ex
VB:
Private Sub Combobox1_Change()
if LEN( Me.Combobox1.Text ) > 3 then
'Ici ton code
End If
Ici le Change du Combobox n'est pris en compte qu'à partir de la quatrième lettre entrée.
Pas sûr d'avoir compris ! Lol
"depuis mon téléphone"
Jean marie
 
Dernière édition:

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof