treza88
XLDnaute Occasionnel
Bonjour à tous
Je cherche a simplifier un code d'une proceduer sur un bouton ok d'une userform car j'ai un temps d'attente entre chaque saisie ce qui n'est pas l'ideal pour de la saisie.
J'ai essyé de supprimer au maximum les select, mais apres je bloc.
Voici mon code:
Si quelqu'un peut me donner un coup de main, merci d'avance
Je cherche a simplifier un code d'une proceduer sur un bouton ok d'une userform car j'ai un temps d'attente entre chaque saisie ce qui n'est pas l'ideal pour de la saisie.
J'ai essyé de supprimer au maximum les select, mais apres je bloc.
Voici mon code:
Code:
Private Sub Ok_Click()
Application.ScreenUpdating = False
If longueur.Text = "" Then
MsgBox ("Vous n'avez rien saisi !")
Else
'transfert des données vers les cellules
With ActiveCell
.Value = Reference.Text
.Offset(0, 1).Value = designation.Text
.Offset(0, 2).Value = nombre.Text
End With
Dim Longu As Currency, Larg As Currency
Longu = Val(longueur.Text)
Larg = Val(largeur.Text)
If Longu > Larg Then
ActiveCell.Offset(0, 4).Value = longueur.Text
If Chb_surcote = True And Dim_surcote_Long.Text <> 0 Then
Call Surcote(ActiveCell.Offset(0, 22))
ActiveCell.Offset(0, 28).Value = Dim_surcote_Long.Text
End If
ActiveCell.Offset(0, 5).Value = largeur.Text
If Chb_surcote = True And Dim_Surcote_larg.Text <> 0 Then
Call Surcote(ActiveCell.Offset(0, 23))
ActiveCell.Offset(0, 29).Value = Dim_Surcote_larg.Text
End If
Else
ActiveCell.Offset(0, 4).Value = largeur.Text
If Chb_surcote = True And Dim_surcote_Long.Text <> 0 Then
Call Surcote(ActiveCell.Offset(0, 22))
ActiveCell.Offset(0, 28).Value = Dim_surcote_Long.Text
End If
ActiveCell.Offset(0, 5).Value = longueur.Text
If Chb_surcote = True And Dim_Surcote_larg.Text <> 0 Then
Call Surcote(ActiveCell.Offset(0, 23))
ActiveCell.Offset(0, 29).Value = Dim_Surcote_larg.Text
End If
End If
ActiveCell.Offset(0, 8).Value = SensFil.Text
ActiveCell.Offset(1, 0).Select
'remet tous les textbox a zero de la user form
Dim Ctrl As Control
For Each Ctrl In Me.Controls
If TypeOf Ctrl Is MSForms.TextBox Then Ctrl.Value = ""
Next
'--------------------------------------------
'ajout automatique d'une ligne au tableau
Dim r As Integer, s As Integer, q As Integer, p As Integer
q = ActiveCell.Row ' N°de ligne en dessous de la derniere ligne saisi
Set firstCell = Range("F5") ' colonne avec formule mais pas de donnée
Set lastCell = Range("F65536").End(xlUp)
p = Range(lastCell, lastCell).Row ' Dernier N° de ligne du tableau
If p = q + 1 Then
Range(lastCell, lastCell).Select
r = ActiveCell.Row
ActiveCell.Offset(1, 0).EntireRow.Select
s = ActiveCell.Row
Selection.Insert Shift:=xlDown
Rows(r).Select
Rows(r).Copy Rows(s)
End If
'reselection de la cellule d'entrée de donnée
Set firstCell = Range("D5")
Set lastCell = Range("D65536").End(xlUp)
Range(lastCell, lastCell).Offset(1, -1).Select
End If
Reference.SetFocus 'reactive la combobox reference
Application.Calculate
Application.ScreenUpdating = True
Set lastCell = Range("D65536").End(xlUp)
lastCell.Select
ActiveCell.Offset(1, -1).Select
Dim Ligne As Integer, Colonne As Integer
Ligne = lastCell.Row - 29
If Ligne >= 0 Then
With ActiveWindow
.ScrollRow = Ligne + 1
End With
End If
End Sub
Private Sub UserForm_Activate()
If ActiveSheet.Index < 4 Or (ActiveSheet.Index Mod 2) = 0 Or Worksheets.Count = ActiveSheet.Index Then
MsgBox "Attention mauvaise selection, aucune saisie ne peut se faire sur cette feuille!"
Zone2.Hide
Exit Sub
End If
Num = ActiveSheet.Index
NomFeuille.ListIndex = ((Num - 1) / 2) - 2
Reference.ListIndex = ind
Reference.SetFocus
Set lastCell = Range("D65536").End(xlUp)
lastCell.Select
ActiveCell.Offset(1, -1).Select
Dim Ligne As Integer, Colonne As Integer
Ligne = lastCell.Row - 29
If Ligne >= 0 Then
With ActiveWindow
.ScrollRow = Ligne + 1
End With
End If
End Sub
Si quelqu'un peut me donner un coup de main, merci d'avance