Comment remplir un tableau suivant la feuille ouverte

snoopy07

XLDnaute Occasionnel
Bonjour a tous

J'ai crée un classeur qui contient 12 feuilles
j ai inséré un userform qui marche très bien sur la feuille Janvier
toute les feuilles sont pareille car j'ai copier 11 fois la feuille Janvier et j'ai renommer chaque feuille
le problème qui se pose : quand j ouvre une feuille autre que janvier et je clic sur le bouton "nouvelle opération et que je rempli tout les champs et que je clic sur ajouter tous les valeur des champs sont mis dans le tableau de la feuille Janvier

ce que je voudrais : que mon userfrom remplisse le tableau de la feuille ouverte

voici comment j'ai fait mon userfrom

Private Sub UserForm_Initialize()
'J'alimente les combobox'
txtEtablissement.List = Worksheets("Liste").Range("B2:B203").Value
txtObjet.List = Worksheets("Liste").Range("C2:C203").Value
txtMode.List = Worksheets("Liste").Range("D2:D7").Value
TxtRetirer.List = Worksheets("Liste").Range("E2:E4").Value

'**** Je fais le tri en ordre alphabetique de mes liste pour mes combobox ***'

Set f = Sheets("Liste")
a = Application.Transpose(f.Range("B2:B" & f.[B203].End(xlUp).Row))
Call Tri(a, LBound(a), UBound(a))
Me.txtEtablissement.List = a
b = Application.Transpose(f.Range("C2:C" & f.[C203].End(xlUp).Row))
Call Tri(b, LBound(b), UBound(b))
Me.txtObjet.List = b


End Sub


Private Sub cmdAjouter_Click()
Dim numLigneVide& 'quand il s'agit des lignes il faut mettre en long
'on active la feuille "Janvier"
Worksheets("Janvier").Activate
'on trouve la derniere ligne vide du tableau et on enregistre le numéro de ligne dans la variable numLigneVide
numLigneVide = ActiveSheet.Columns(2).Find("").Row

'**********************
'on remplit les données dans notre tableau
AfficheTableau numLigneVide
'on efface le formulaire et on replace le curseur sur le premier champs (Date)
RAZ
'on fait le tri par ordre alphabétique automatiquement sur la colonne Date
Trier numLigneVide
Exit Sub
End Sub

Private Sub cmdFermer_Click()
'frmNouvelle.Hide le cache
Unload Me ' le ferme
End Sub


Private Sub AfficheTableau(Lg&)
With ActiveSheet
.Cells(Lg, 1) = CDate(txtDate.Text)
.Cells(Lg, 2) = StrConv(txtEtablissement.Text, vbProperCase)
.Cells(Lg, 3) = StrConv(txtObjet.Text, vbProperCase)
.Cells(Lg, 4) = StrConv(txtMode.Text, vbProperCase)
.Cells(Lg, 5) = txtDebit.Text
.Cells(Lg, 6) = txtCredit.Text
.Cells(Lg, 8) = TxtRetirer.Text
End With
End Sub

Private Sub RAZ()
txtDate.Text = ""
txtEtablissement.Text = ""
txtObjet.Text = ""
txtMode.Text = ""
txtDebit.Text = ""
txtCredit.Text = ""
TxtRetirer.Text = ""
txtDate.SetFocus
End Sub

Private Sub Trier(Lg&)
With ActiveWorkbook.Worksheets("Janvier").Sort
.SortFields.Clear
.SortFields.Add Key:=Range("A4:A" & Lg), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SortFields.Add Key:=Range("B4:B" & Lg), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange Range("A5:H" & Lg)
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub


Sub Tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) \ 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call Tri(a, g, droi)
If gauc < d Then Call Tri(a, gauc, d)
End Sub


je vous joint mon fichier : (c) CJoint.com, 2015

en vous remerciant d'avance pour votre aide

cordialement
Snoopy 07
 
Dernière édition:

Paf

XLDnaute Barbatruc
Re : Comment remplir un tableau suivant la feuille ouverte

Bonjour,

à la lecture du code, et non testé:

dans Private Sub cmdAjouter_Click(), supprimer Worksheets("Janvier").Activate
dans Private Sub Trier(Lg&), remplacer With ActiveWorkbook.Worksheets("Janvier").Sort par With ActiveSheet.Sort

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 023
Messages
2 084 715
Membres
102 637
dernier inscrit
TOTO33000