Comment améliorer la rapidité de traitement Macro ???

Phileufeu@yahoo.fr

XLDnaute Nouveau
Bonjour à tous,

Je dispose d'un tableau excel avec des noms de joueurs en ligne (environ 19.000) et des infos sur ces joueurs en colonne (voir ex en pj).
J'ai une macro qui me permet une saisie automatique de toute la ligne lorsque je met dans la colonne A le nom d'un joueur qui est déjà présent dans la liste.
Voilà à quoi ça ressemble:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
If Target.Column > 1 Then Exit Sub
With ActiveSheet.Range("A2:A" & Target.Offset(-1, 0).Row)
Set c = .Find(Target.Value, LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
Range(c.Offset(0, 1), c.Offset(0, 6)).Copy
Range(Target.Offset(0, 1), Target.Offset(0, 6)).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Target.Offset(1, 0).Select
End If
End With
End Sub



Le problème est que la recherche est très longue. Comment améliorer la rapidité de traitement ? Peut-on apporter des modifs à la macro pour que ça aille plus vite ?

merci.

Philippe.
 

Pièces jointes

  • RapiditéMacro.xls
    38.5 KB · Affichages: 120
G

Guest

Guest
Re : Comment améliorer la rapidité de traitement Macro ???

bonjour Phil,

Essaie déjà ceci:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim c As Range
    If Target.Column > 1 Then Exit Sub
    With ActiveSheet.Range("A2:A" & Target.Offset(-1, 0).Row)
        Set c = .Find(Target.Value, LookIn:=xlValues, lookat:=xlWhole)
        If Not c Is Nothing Then
'Evite de rappeler l'évènement Change
            [SIZE=3][COLOR=red]Application.EnableEvents = False[/COLOR][/SIZE]
            Range(c.Offset(0, 1), c.Offset(0, 6)).Copy [COLOR=blue]Destination:=Range(Target.Offset(0, 1), Target.Offset(0, 6))[/COLOR]
[COLOR=black]'Rétablit la gestion des évènements[/COLOR]
           [SIZE=3][COLOR=red]Application.EnableEvents = True[/COLOR][/SIZE]
            Application.CutCopyMode = False
            Target.Offset(1, 0).Select
        End If
    End With
End Sub

A+
 
G

Guest

Guest
Re : Comment améliorer la rapidité de traitement Macro ???

Re,

Petit complément si tu veux ne copier que les valeurs:

Code:
        If Not c Is Nothing Then
            Application.EnableEvents = False
            Target.Range("B1:H1").Value = c.Range("B1:H1").Value
            Application.EnableEvents = True
            Target.Offset(1, 0).Select
        End If

A+
 
G

Guest

Guest
Re : Comment améliorer la rapidité de traitement Macro ???

Phil,

T'inquiète, nous apprenons tous, ici.

Lorsque tu veux copier une cellule tu peux copier la valeur + le format, commentaire et toutes les caractéristiques de la cellules ou seulement sa valeur pour garder le format de destination intacte.

Dans ton cas, copier que la valeur, n'a d'intérêt que pour éclaircir la macro. Mais si tu as besoin de tout copier valeur, format etc... garde la soluce avec la méthode .Copy Destination:= .....

Les copies de valeurs sont généralement plus rapides.

A+
 

Phileufeu@yahoo.fr

XLDnaute Nouveau
Re : Comment améliorer la rapidité de traitement Macro ???

OK, en effet la copie seule de la valeur me convient, si ça peut aider excel à aller encore plus vite.
Par contre, j'ai changé la macro par la formule que tu m'as donné:

If Not c Is Nothing Then
Application.EnableEvents = False
Target.Range("B1:H1").Value = c.Range("B1:H1").Value
Application.EnableEvents = True
Target.Offset(1, 0).Select
End If


Mais la reconnaissance ne marche plus. J'ai oublié une étape? Il faut insérer cette formule avec une partie de la précédente?

Philippe.
 
G

Guest

Guest
Re : Comment améliorer la rapidité de traitement Macro ???

Re Phil,

Eh oui, ce n'est que la partie modifiée que j'ai joint au message. Voici ce que cela devrait donner:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim c As Range
    If Target.Column > 1 Then Exit Sub
    With ActiveSheet.Range("A2:A" & Target.Offset(-1, 0).Row)
        Set c = .Find(Target.Value, LookIn:=xlValues, lookat:=xlWhole)
        If Not c Is Nothing Then
            Application.EnableEvents = False
            Target.Range("B1:H1").Value = c.Range("B1:H1").Value
            Application.EnableEvents = True
            Target.Offset(1, 0).Select
        End If
    End With
End Sub

A+

Si jamais cela ne fonctionne pas, essaie de joindre un fichier.
A bientôt
 

Phileufeu@yahoo.fr

XLDnaute Nouveau
Re : Comment améliorer la rapidité de traitement Macro ???

Tout marche impec !
Merci beaucoup.

Mon seul petit souci (rien à voir avec le reconnaissance des noms) est que pour rentrer mes données, je colle en désordre dans excel des infos que je prends sur un site. Ensuite je copie/colle plusieurs cellules pour mettre dans la forme voulue (dans les différentes colonnes.
Et à chaque copier, excel met environ 1 ou 2 secondes (il m'affiche un petit minuteur à la place du pointeur de la souris). Ca peut paraître rapide, mais ça ralentit vachement la saisie de données. Mais bon, là je pense qu'il n'y a pas grand chose à faire, non?

Philippe.
 
G

Guest

Guest
Re : Comment améliorer la rapidité de traitement Macro ???

Re phil,

A chaque fois que la valeur d'une cellule de la colonne A (1) est changée, par quelque méthode que ce soit, l'évènement Worksheet_Change est appelé. C'est ce qui fait les longueurs.

Le seul moyen est de déterminer une condition qui permettrait de stopper la gestion des évènements. Mais ne sachant pas excatement comment tu travailles, c'est difficile de te répondre.


A+
 

Phileufeu@yahoo.fr

XLDnaute Nouveau
Re : Comment améliorer la rapidité de traitement Macro ???

Hasco,

Quand je colle les infos du site sur le tableau excel, toutes les données qui m'intéressent sont dans la colonne B (voir pj). Ensuite, dans l'exemple, je colle "American" en B10, San Diego en C10... Donc le ralentissement ne vient pas de la colonne A (mais sûrement des quelques 20.000 lignes qui sont au dessus).

Enfin bref, je ne vais pas te saouler avec ce petit détail.
Merci beaucoup pour ton aide. A bientôt peut être.

Philippe.
 

Pièces jointes

  • SaisieDonnées.xls
    36 KB · Affichages: 73

Discussions similaires

Réponses
4
Affichages
191
Réponses
4
Affichages
234

Statistiques des forums

Discussions
312 514
Messages
2 089 208
Membres
104 065
dernier inscrit
val29