Lenteur de traitement

Bonjour à tous

J'ai créé un formulaire qui permet de remplir 118 textboxs liées à 118 cellules, et le temps de traitement quand je clique sur mon bouton "enregistrer" est de plus de 20 secondes

(qu'il y ai 2 textbox renseignées ou 100 le temps de traitement est le même). ci-dessous le code de mon bouton y aurai-t-il une astuce pour réduire ce temps?

'Correspond au programme du bouton ENREGISTRER
Private Sub CommandButton2_Click()
Dim Ligne As Long
Dim i As Integer

If MsgBox("Etes-vous certain de vouloir enregistrer ce Profil ?", vbYesNo, "Demande de confirmation") = vbYes Then

If Me.ComboBox1.ListIndex = -1 Then Exit Sub 'On sort si pas de sélection
Ligne = Me.ComboBox1.ListIndex + 2
For i = 1 To 118
If Me.Controls("TextBox" & i).Visible = True Then
Ws.Cells(Ligne, i) = Me.Controls("TextBox" & i)
End If 'fin de la condition
Next i
End If
Unload Me
End Sub

Merci d'avance

Cordialement

Bonjour,

Peut-être qu'en déclarant la variable ws que tu utilises et en lui attribuant le bon nom de feuille, le traitement serait plus rapide ?

C'est la seule piste que je vois à priori comme ça.

Bonjour à tous,

Si des formules font référence aux cellules qui sont écrites > cela pourrait causer des délais ...

Tout en portant attention à la remarque de JoyeuxNoel > une fois Ws déclaré et renseigné > si ce n'est déjà fait ...

Un essai ...

'Correspond au programme du bouton ENREGISTRER
Private Sub CommandButton2_Click()
Dim Ligne As Long
Dim i As Integer

If MsgBox("Etes-vous certain de vouloir enregistrer ce Profil ?", vbYesNo, "Demande de confirmation") = vbYes Then

Application.ScreenUpdating = False    ' << modif
Application.Calculation = xlCalculationManual    ' << modif
    If Me.ComboBox1.ListIndex = -1 Then Exit Sub    'On sort si pas de sélection
    Ligne = Me.ComboBox1.ListIndex + 2
    For i = 1 To 118
        If Me.Controls("TextBox" & i).Visible = True Then
            Ws.Cells(Ligne, i) = Me.Controls("TextBox" & i)
        End If    'fin de la condition
    Next i
End If
Application.Calculation = xlCalculationAutomatic     ' << modif
Unload Me
End Sub

ric

Bonjour JN

Merci pour ton retour

j'ai déjà déclaré la variable dans la private Sub : UserForm_Initialize

Private Sub UserForm_Initialize()

Dim J As Long
Dim i As Integer

Set Ws = Sheets("Base de données-Destinataires")
With Me.ComboBox1
For J = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row
.AddItem Ws.Range("A" & J)
Next J
End With
End Sub

Y aurait-il un autre pb dans mon code ?

Merci

Bonne journée

Cordialement

Bonjour,

en inscrivant dans une variable tableau qui tu écris en une fois tu gagneras beaucoup de temps :

'Correspond au programme du bouton ENREGISTRER
Private Sub CommandButton2_Click()
    Dim Ligne As Long, result(1 To 1, 1 To 118)
    Dim i As Integer

    If MsgBox("Etes-vous certain de vouloir enregistrer ce Profil ?", vbYesNo, "Demande de confirmation") = vbYes Then

        If Me.ComboBox1.ListIndex = -1 Then Exit Sub 'On sort si pas de sélection
        Ligne = Me.ComboBox1.ListIndex + 2
        For i = 1 To 118
            If Me.Controls("TextBox" & i).Visible = True Then
                ' Ws.Cells(Ligne, i) = Me.Controls("TextBox" & i)
                result(1, i) = Me.Controls("TextBox" & i)
            End If 'fin de la condition
        Next i
        Ws.Cells(Ligne, 1).Resize(, UBound(result, 2)) = result
    End If
    Unload Me
End Sub

pas pu tester faute de fichier fourni. Peut-être des adaptations à faire.
Et si des valeurs à conserver sont déjà sur feuille, lire la plage dans result avant...
eric

Merci beaucoup RIC

C'est le jour et la nuit, c'est TOP la mise à jour est instantannée

FÉLICITATION tu m'enlèves une grosse épine du pied, je débute en VBA et tout mon travail était gâché par le temps de traitement

Bonne fin de journée

A bientôt

Cordialement

Merci Eriiic aussi pour ton retour

La solution de RIC me convient, je ferai un test plus tard avec ta suggestion

Question ?, comment fait-on pour noter et pour mettre le post en "résolu"

C'est ma première je ne voit pas de bouton résolu ou note

Merci encore

Cordialement

Rechercher des sujets similaires à "lenteur traitement"