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
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