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("D27").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
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("D27").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: