Récupérer un numéro de ligne

  • Initiateur de la discussion Reeper
  • Date de début
R

Reeper

Guest
Bonjour à tous,

Voila j'ai un talbeau avec dans une première colonne des numéros ou références de pièces.
Dans une userform, je demande à l'utilisateur choisir une pièces d'après les références.
Suivant la référence choisie par l'utilisateur cela va par la suite permettre de compléter la ligne correspondante du tableau.
Ce que je voudrais c'est donc récupérer le numéro de la ligne correspondant à la référence de la pièce choisi pour pouvoir ensuite rajouter les information sur la bonne ligne.

Ensuite j'ai un autre problème, lorsque je quite une première userform et que j'en ouvre une autre, les variables créées avec la première userform ne sont plus exploitables dans la deuxième ce qui est très embetant notammant pour garder mon numéro de ligne.

Merci d'avance pour vos réponses.
 

Hervé

XLDnaute Barbatruc
Bonjour reeper, le forum

'je demande à l'utilisateur choisir une pièces' : s'agit-il d'une combobox ou listbox ?

si oui comment renseignes- tu ce contrôle : additem, .list, rowsource (beurk)

pour le 2 il faut déclarer tes variables public en tete d'un module standard, ainsi leurs portées sera augmenté à l'ensemble des userforms.

Merci de tes éclaircissements à venir, ou mieux d'une petite pièce jointe.

salut
 
R

Reeper

Guest
les références des pièces se trouvent dans une ListBox que j'ai nommé 'DerLgnPiecesFraisage'
Cette liste box est initialisé de la façon suivante :

Code:
Private Sub UserForm_Initialize()
 
     'déclaration des variables
    Dim DerLgnPiecesFraisage As Long
    Dim maplagePiecesFraisage As Range
    
    With Sheets('Coûts fab fraisage')
        'définie la dernière ligne du tableau
        DerLgnPiecesFraisage = .Range('A65536').End(xlUp).Row
        'définie la plage de données
        Set maplagePiecesFraisage = .Range('A9:A' & DerLgnPiecesFraisage)

        'initialise la ListBox
        ListBoxPiecesFraisage.RowSource = ''Coûts fab fraisage'!' & maplagePiecesFraisage.Address
        ListBoxPiecesFraisage.ListIndex = 0
    End With

End Sub

voila si non merci pour l'astuce sur la variable et si vous avez d'autres questions n'hésitez pas :)
 

Hervé

XLDnaute Barbatruc
re bonjour reeper, le forum

Avec rowsource, tu ne peux guère aller loin, c'est une méthode à éviter, préfère lui la méthode additem.

Pour ce type de cas j'ai pour habitude (bonne ou mauvaise ?) de stocker le numero de la ligne dans une colonne masqué de la listbox, donc :

je précise que la listbox aura 2 colonnes :
ListBoxPiecesFraisage.ColumnCount = 2

je précise la taille des colonnes, en mettant 0 à la derniere colonne je masque celle-ci :
Code:
ListBoxPiecesFraisage.ColumnWidths = '40;0'

ensuite je rempli la listbox a l'aide d'une boucle for each :

For Each c In .Range('a9:a' & DerLgnPiecesFraisage)
ListBoxPiecesFraisage.AddItem c
ListBoxPiecesFraisage.List(x, 1) = c.Row
x = x + 1
Next c

en précisant bien que je veux dans la deuxième colonne (ListBoxPiecesFraisage.List(x, 1) ) le numéro de la ligne ( c.Row)

dans une listbox la premiere colonne commence à 0, la deuxième à 1, etc...

Ainsi l'utilisateur ne le voit pas mais le numéro de ligne est bien dans la listbox.

Ensuite il me suffit de récupérer ce numéro par ce code :

numerodeligne =ListBoxPiecesFraisage.List(ListBoxPiecesFraisage.ListIndex, 1)

si tu déclares public la variable numerodeligne, tu pourras utiliser cette ligne dans plusieurs userform.

Les macros complètes :

Private Sub ListBoxPiecesFraisage_Click()
Dim numerodeligne As Integer
numerodeligne = ListBoxPiecesFraisage.List(ListBoxPiecesFraisage.ListIndex, 1)
MsgBox numerodeligne
End Sub
'-------------------------------------------------------
Private Sub UserForm_Initialize()
 
     
'déclaration des variables
   
Dim DerLgnPiecesFraisage As Long
   
Dim maplagePiecesFraisage As Range
   
Dim c As Range
   
Dim x As Integer
   
   
With Sheets('Coûts fab fraisage')
       
'définie la dernière ligne du tableau
        DerLgnPiecesFraisage = .Range('A65536').End(xlUp).Row
       
'initialise la ListBox
        ListBoxPiecesFraisage.ColumnCount = 2
        ListBoxPiecesFraisage.ColumnWidths = '40;0'
       
For Each c In .Range('a9:a' & DerLgnPiecesFraisage)
            ListBoxPiecesFraisage.AddItem c
            ListBoxPiecesFraisage.List(x, 1) = c.Row
            x = x + 1
       
Next c
            ListBoxPiecesFraisage.ListIndex = 0
   
End With

End Sub


en espérant que je t'aurai été utile;

salut
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 276
Messages
2 086 714
Membres
103 378
dernier inscrit
phdrouart