Execution très lente de ma macro VBA

Je suis un vrai novice en Excel VBA et pour mes début j'ai commencé une petite application .

Mais depuis hier j'ai ajouté un userform puis paramétrer le buton valider qui enregistre une saisie d'une facture de caisse

Ca fonctionne correctement par contre c'est très lent.

Veuillez me dire commencer puis je remedier a cela SVP

SVP aidez moi .

Dim k As Long

Dim m As Integer

k = Sheets("Versements").Range("a999999").End(xlUp).Row + 1

If Not IsDate(Format(Dat, "dd,mm,yyyy")) Then

MsgBox "La Date de Naissance saisie est INCORRECT", vbOKOnly, "Date erronée"

Else

If Len(Dat.Text) < 10 Then

MsgBox "La Date doit être au format 01/01/2019", vbOKOnly, "Erreure de Format Date"

Else

m = CInt(Mid(Dat.Text, 4, 2))

If m < 1 Or m > 12 Then

MsgBox "Le Mois saisi est INEXISTANT", vbOKOnly, "Mois erronée"

Else

If Fact.Value = "" Then

MsgBox "Veuillez saisir le N° de la Facture ou Référence", vbOKOnly, "N° Facture"

Else

If Montant.Value = "" Then

MsgBox "Veuillez préciser le Montant total de la Facture", vbOKOnly, "Montant Facture"

Else

If Motif.Value = "" Then

MsgBox "Veuillez préciser le Motif de l'opération", vbOKOnly, "Motif de l'opération"

Else

If Benef.Value = "" Then

MsgBox "veuillez saisir d'identité du Bénéficiaire", vbOKOnly, "Bénéficiaire"

Else

Worksheets("Versements").Cells(k, 1).Value = Format(Form8.Dat, "dd/MM/yyyy")

Worksheets("Versements").Cells(k, 2).Value = Form8.Fact.Value

Worksheets("Versements").Cells(k, 3).Value = "xxxxxxxx"

Worksheets("Versements").Cells(k, 4).Value = "0"

Worksheets("Versements").Cells(k, 5).Value = Form8.Motif.Value

Worksheets("Versements").Cells(k, 7).Value = Form8.Montant.Value

Worksheets("Versements").Cells(k, 6).Value = Form8.Benef.Value

Unload Form8

Feuil4.Columns("A:G").EntireColumn.AutoFit

ActiveWorkbook.Save

End If

End If

End If

End If

End If

End If

End If

End Sub

Slt Barrymax,

à tester

Dim k As Long
Dim m As Integer
Application.ScreenUpdating = False

k = Sheets("Versements").Range("a999999").End(xlUp).Row + 1

If Not IsDate(Format(Dat, "dd,mm,yyyy")) Then
MsgBox "La Date de Naissance saisie est INCORRECT", vbOKOnly, "Date erronée"
Else
If Len(Dat.Text) < 10 Then
MsgBox "La Date doit être au format 01/01/2019", vbOKOnly, "Erreure de Format Date"
Else
m = CInt(Mid(Dat.Text, 4, 2))
If m < 1 Or m > 12 Then
MsgBox "Le Mois saisi est INEXISTANT", vbOKOnly, "Mois erronée"
Else
If Fact.Value = "" Then
MsgBox "Veuillez saisir le N° de la Facture ou Référence", vbOKOnly, "N° Facture"
Else
If Montant.Value = "" Then
MsgBox "Veuillez préciser le Montant total de la Facture", vbOKOnly, "Montant Facture"
Else
If Motif.Value = "" Then
MsgBox "Veuillez préciser le Motif de l'opération", vbOKOnly, "Motif de l'opération"
Else
If Benef.Value = "" Then
MsgBox "veuillez saisir d'identité du Bénéficiaire", vbOKOnly, "Bénéficiaire"
Else
Worksheets("Versements").Cells(k, 1).Value = Format(Form8.Dat, "dd/MM/yyyy")
Worksheets("Versements").Cells(k, 2).Value = Form8.Fact.Value
Worksheets("Versements").Cells(k, 3).Value = "xxxxxxxx"
Worksheets("Versements").Cells(k, 4).Value = "0"
Worksheets("Versements").Cells(k, 5).Value = Form8.Motif.Value
Worksheets("Versements").Cells(k, 7).Value = Form8.Montant.Value
Worksheets("Versements").Cells(k, 6).Value = Form8.Benef.Value

Unload Form8
Feuil4.Columns("A:G").EntireColumn.AutoFit
ActiveWorkbook.Save
End If
End If
End If
End If
End If
End If
End If
Application.ScreenUpdating = True
End Sub

Bonjour,

Je pense que les Else et les End If sont mal placés : Enlève-les.

Tout simplement.

Bonjour

Si je les enlève comment faire pour que les case vides soient refusé ou que l'appli exige de celui qui fait la saisie que le format date soit au format que je veux ???

Bonjour

Une structure en IF équivalente mais plus propre :

If première condition Then

Veuillez donnez une date cirrecte

Elseif deuxième condition Then

Veuillez remplir le champ nom

Elseif troisième condition Then

Veuillez indiquez votre nom

Else

Ce qu'il faut faire si audessus tous les tests sont bons

End If

@ bientôt

LouReeD

Comme je te le disais en mp, je préfère souvent dédier un onglet à la saisie.

Voici le code

Sub ENREGISTRER()
If Range("E14") <> 0 Then Exit Sub
ii = Range("C14").Value
For i = 4 To 12 Step 2
    With Sheets("Versements")
        .Cells(ii, Cells(i, 4).Value) = Cells(i, 3)
    End With
Next
End Sub

Tous les contrôles sont reportés sur la feuille. C'est plus facile à mettre en oeuvre, y compris les contrôles par liste déroulante par exemple.

17test-onglet.xlsm (19.64 Ko)

OK je les fais mais cela n'accélere tjr pas ma macro

par contre jaimerais envoyé le fichier lui même mais il pèse plus de 25Mo

comment faire pour vous l'envoyer ???

as-tu essayé ma version ?

fais un extract du fichier ...

Steelson Merci pour le fichier

Cela m'a pris quelques minutes mais j'ai compris la logique

Le soucis est que j'ai plusieur fichier pareils dans mon appli et franchement cela m'a pri un temps fou

Je dois livrer l'appli demain

raison pour laquelle je pensais envoyer mon fichier et vous verrez si on peut l'accélérer

Mais vraiment merci pour votre fichier , c'est un cours de plus

Rechercher des sujets similaires à "execution tres lente macro vba"