Optimiser le code et ajouter une animation si temp>2secon

Bonjour The Forum,

J'ai deux questions :

La premiere, il y a t il moyen d'optimiser ce bout de code (toutes les informations sont attendues dans des textbox)?

La seconde, comment ajouter une petite animation lorsque la recherche dépasse les 5 secondes ?

        Dim trouve As Variant
        Worksheets("BASE A").Select
        Columns("W:W").Select
        trouve = CDec(Clé1.Value)
        On Error GoTo FIN
        Selection.Find(What:=trouve, After:=ActiveCell, LookIn:=xlValues, _
        LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
        MatchCase:=True, SearchFormat:=False).Select

        If Not Selection Is Empty Then

        Datederéception = Selection.Offset(0, -22).Value
        N°FicheNAVISION = Selection.Offset(0, -21).Value
        N°Commande = Selection.Offset(0, -20).Value
        N°série = Selection.Offset(0, -19).Value
        Demandeur = Selection.Offset(0, -18).Value
        Descriptif = Selection.Offset(0, -17).Value
        Poids = Selection.Offset(0, -16).Value
        Marque = Selection.Offset(0, -15).Value
        Modèle = Selection.Offset(0, -14).Value
        Datedemiseenservice = Selection.Offset(0, -13).Value
        Utilisateur = Selection.Offset(0, -12).Value
        Evenement = Selection.Offset(0, -11).Value
        DateEvenement = Selection.Offset(0, -10).Value
        Contact = Selection.Offset(0, -9).Value
        NomduClient = Selection.Offset(0, -8).Value
        Localisation = Selection.Offset(0, -7).Value
        N°Etiquette2 = CDec(Etiquette)
        Statut = "Modification"
        Clé1 = WorksheetFunction.Sum((WorksheetFunction.Max(Sheets("Journal evenements").Range("t:t"))) + 1)

        Else

FIN:
        Me.N°Commande.SetFocus
        Statut = "Acquisition"
        N°Etiquette2 = CDec(Etiquette)
        Clé1 = WorksheetFunction.Sum((WorksheetFunction.Max(Sheets("Journal evenements").Range("t:t"))) + 1)

        End If

End Sub

Merci à tous et toutes

Amitié

Air_2

capture d ecran 2018 01 23 a 20 01 46

Bonsoir,

essaie avec ce code :

Dim trouve As Variant
    With Worksheets("BASE A").Columns("W:W")
        trouve = CDec(Clé1.Value)
        Set c = .Find(What:=trouve, LookIn:=xlValues, LookAt:=xlPart)

        If Not c Is Nothing Then
            Datederéception = c.Offset(0, -22).Value
            N°FicheNAVISION = c.Offset(0, -21).Value
            N°Commande = c.Offset(0, -20).Value
            N°série = c.Offset(0, -19).Value
            Demandeur = c.Offset(0, -18).Value
            Descriptif = c.Offset(0, -17).Value
            Poids = c.Offset(0, -16).Value
            Marque = c.Offset(0, -15).Value
            Modèle = c.Offset(0, -14).Value
            Datedemiseenservice = c.Offset(0, -13).Value
            Utilisateur = c.Offset(0, -12).Value
            Evenement = c.Offset(0, -11).Value
            DateEvenement = c.Offset(0, -10).Value
            Contact = c.Offset(0, -9).Value
            NomduClient = c.Offset(0, -8).Value
            Localisation = c.Offset(0, -7).Value
            N°Etiquette2 = CDec(Etiquette)
            Statut = "Modification"
            Clé1 = WorksheetFunction.Sum((WorksheetFunction.Max(Sheets("Journal evenements").Range("t:t"))) + 1)

        Else
            Me.N°Commande.SetFocus
            Statut = "Acquisition"
            N°Etiquette2 = CDec(Etiquette)
            Clé1 = WorksheetFunction.Sum((WorksheetFunction.Max(Sheets("Journal evenements").Range("t:t"))) + 1)
        End If
End With

PS, cela m'étonnerait qu'une simple recherche dure plus de 5 secondes...

Edit, oublié le End With à la fin

Bonne soirée

Bonjour,

Bonjour Cousinhub si loin...

N'oublie pas déclarer toutes les variables dans ton code et il y en a là

pour voir ce qui est à déclarer mets, OPTION EXPLICIT en en-tête du module dans lequel se trouve cette macro.

Amicalement

Dan

Bonjour, Dan

Je pense que toutes ses "variables" doivent être des combobox ou textbox, il doit travailler sur un userform..

à la rigueur, il peut déclarer :

Dim c As Range

Bonne journée

bonjour,

pour affiner encore un peu...

Dim c As Range, trouve
        trouve = CDec(Clé1.Value)
        Set c = Worksheets("BASE A").Columns("W:W").Find(What:=trouve, LookIn:=xlValues, LookAt:=xlPart)

        If Not c Is Nothing Then
        i = c.Row
        With Worksheets("BASE A")
            datederéception = .Cells(i, 1).Value
            N°FicheNAVISION = .Cells(i, 2).Value
            N°Commande = .Cells(i, 3).Value
            N°série = .Cells(i, 4).Value
            Demandeur = .Cells(i, 5).Value
            Descriptif = .Cells(i, 6).Value
            Poids = .Cells(i, 7).Value
            Marque = .Cells(i, 8).Value
            Modèle = .Cells(i, 9).Value
            Datedemiseenservice = .Cells(i, 10).Value
            Utilisateur = .Cells(i, 11).Value
            Evenement = .Cells(i, 12).Value
            DateEvenement = .Cells(i, 13).Value
            Contact = .Cells(i, 14).Value
            NomduClient = .Cells(i, 15).Value
            Localisation = .Cells(i, 16).Value
            N°Etiquette2 = CDec(Etiquette)
            Statut = "Modification"

        End With
        Else
            Me.N°Commande.SetFocus
            Statut = "Acquisition"
            N°Etiquette2 = CDec(Etiquette)
        End If

Clé1 = WorksheetFunction.Sum((WorksheetFunction.Max(Sheets("Journal evenements").Range("t:t"))) + 1)

A+

Merci à tous les deux effectivement les variables sont attendues dans des textbox d'un userform..

Pour l'option déclarer C as range, je vais faire des essais afin peut être de la rendre public dans un module simple ou de classe, je ne vois pas encore la différence, cela devrait me permettre de l'utiliser si besoin pour d'autres formulaires, (wait and see).

Un grand merci à tous les deux pour vos réponses.

Amitié

Air_2

Rechercher des sujets similaires à "optimiser code ajouter animation temp 2secon"