Accueil > Forum > > > > Macro lente
Macro lente
vendredi 23 février 2007 à 10:53:54 |
Macro lente

falafala
|
Bonjour à tous, J'ai réalisé une macro simple qui permet de venir chercher des données dans un onglet et de venir les coller dans un autre onglet. Parfois, ma macro est immédiate, parfois elle met très longtemps pour récupérer mes données. Est ce que qq'un peut m'aider? Je vous remercie par avance
|
|
vendredi 23 février 2007 à 11:12:52 |
Re : Macro lente

MPi
|
Il faudrait que tu mettes le code ou du moins la méthode que tu emploies pour faire ta copie.
Est-ce que tu copies tout d'un bloc ? une sélection quelconque qui peut changer d'une fois à l'autre ? Est-ce qu'il y a des formules dans le programme dans lequel tu fais le collage ? Si oui, beaucoup ? ..............................
MPi
|
|
vendredi 23 février 2007 à 11:16:43 |
Re : Macro lente

falafala
|
Le texte de ma macro est ci dessous.
Le principe est simple. J'ai un onglet qui s'appelle données et un onglet qui s'appelle traitement. Un utilisateur renseigne différentes colonnes dans l'onglet données (7 colonne) et la macro recopie ligne par ligne chacune de ces données et rajoute 4 colonnes supplémentaires en faisant des traitements.
J'ai testé la macro hier sur 3000 lignes, elle a été instantannée. Et là, ca prend au moins 1 seconde par ligne.
[CODE]Sub AlimenteOngletTraitements() 'le 22 février 'Jonathan Krief 'Adopale
'reload les variables INDISPO = "Non Disponible"
'je récupère le nombre de lignes à traiter Dim nb_lignes As Long nb_lignes = Sheets("Données").Range("B65536").End(xlUp).Row
'nettoyage de la feuille traitement Sheets("Traitements").Select Range("A2:K" & nb_lignes).Delete 'supprime les cellules (et non seulement leur contenu) Sheets("Données").Select
Dim ligne As Long Dim age As Long Dim datearrivee As Date
'boucle sur les lignes For ligne = 2 To nb_lignes + 1 With Sheets("Traitements") '***************** Age ***************** age = Sheets("Données").Range("D_Age").Offset(ligne - 1).Value .Range("T_Age").Offset(ligne - 1, 0).Value = age '***************** Date ***************** datearrivee = Sheets("Données").Range("D_Datearrivee").Offset(ligne - 1).Value .Range("T_Datearrivee").Offset(ligne - 1, 0).Value = datearrivee '***************** Heure d'arrivée ***************** .Range("T_Heurearrivee").Offset(ligne - 1, 0).Value = Sheets("Données").Range("D_Heurearrivee").Offset(ligne - 1).Value '***************** Heure de sortie ***************** .Range("T_Heuresortie").Offset(ligne - 1, 0).Value = Sheets("Données").Range("D_Heuresortie").Offset(ligne - 1).Value '***************** Biologie ***************** .Range("T_Bio").Offset(ligne - 1, 0).Value = Sheets("Données").Range("D_Bio").Offset(ligne - 1).Value '***************** Radiologie ***************** .Range("T_Radio").Offset(ligne - 1, 0).Value = Sheets("Données").Range("D_Radio").Offset(ligne - 1).Value
'***************** Hospitalisation ***************** .Range("T_Hospitalisation").Offset(ligne - 1, 0).Value = Sheets("Données").Range("D_Hospitalisation").Offset(ligne - 1).Value
'***************** Type de patient ***************** If Sheets("Données").Range("D_Hospitalisation").Offset(ligne - 1).Value = "Oui" Then .Range("T_Type").Offset(ligne - 1, 0).Value = "Hospitalisation" Else If (Sheets("Données").Range("D_Bio").Offset(ligne - 1).Value = "Oui" Or Sheets("Données").Range("D_Radio").Offset(ligne - 1).Value = "Oui") Then .Range("T_Type").Offset(ligne - 1, 0).Value = "Consultation avec acte" Else .Range("T_Type").Offset(ligne - 1, 0).Value = "Consultation sans acte" End If End If '***************** Classe d'âge ***************** If Sheets("Données").Range("D_Age").Offset(ligne - 1).Value < 16 Then .Range("T_Classe").Offset(ligne - 1, 0).Value = "0-15 ans" ElseIf Sheets("Données").Range("D_Age").Offset(ligne - 1).Value < 76 Then .Range("T_Classe").Offset(ligne - 1, 0).Value = "16-74 ans" Else .Range("T_Classe").Offset(ligne - 1, 0).Value = "Plus de 75 ans" End If '***************** Délai ***************** If .Range("T_Heuresortie").Offset(ligne - 1).Value - .Range("T_Heurearrivee").Offset(ligne - 1).Value < 0 Then .Range("T_Durée").Offset(ligne - 1, 0).Value = INDISPO Else .Range("T_Durée").Offset(ligne - 1, 0).Value = .Range("T_Heuresortie").Offset(ligne - 1).Value - .Range("T_Heurearrivee").Offset(ligne - 1).Value End If '***************** Heure d'arrivée ***************** .Range("T_Heurearriveesansminute").Offset(ligne - 1, 0).Value = Hour(Range("T_Heurearrivee").Offset(ligne - 1, 0).Value) End With Next ligne
End Sub
[/CODE]
|
|
vendredi 23 février 2007 à 11:19:05 |
Re : Macro lente

jmfmarques
|
Si la vitesse varie, je suppose que celà est dû à plusieurs raisons, dont le nombre et la taille des données.
Il faut y ajouter le temps pris par l'affichage lui-même, surtout s'il est accompagné de "recalculs"... Il est alors sans doute intéressant d'inhiber cet affichage avant de lancer ton opération puis de le rétablir tout de suite après.
|
|
vendredi 23 février 2007 à 23:07:23 |
Re : Macro lente

mortalino
|
Salut, pour gagner un peu en rapidité, occulte le temps de ta macro le rafraichissement d'excel : au début de ton code : Application.DisplayAlertsScreenUpdating = Falseà remettre à True à la fin du code @++
--Mortalino-- Le mystérieux chevalier, "Provençal, le Gaulois" /DIV>
|
|
vendredi 23 février 2007 à 23:23:04 |
Re : Macro lente

jmfmarques
|
Bonsoir Mortalino, T'as fait la bringue ? (t'as bien raison) Je crois que ce serait plutôt : Application.ScreenUpdating 
|
|
vendredi 23 février 2007 à 23:24:48 |
Re : Macro lente

MPi
|
Mortalino, j'imagine que tu voulais écrire Application.ScreenUpdating = False.............(?)
Quelquefois aussi, on peut accélérer en mettant en début de traitement
Application.Calculation = xlCalculationManual et à la fin Application.Calculation = xlCalculationAutomatic
Mais je rencontre aussi ce genre de problème lorsque je mets à jour un certain fichier une fois par semaine. Lors de la mise à jour, j'exécute une macro et elle est lente Lorsque j'exécute cette même macro durant la semaine (à tous les jours), elle s'exécute en un rien de temps... (?)
MPi
|
|
vendredi 23 février 2007 à 23:49:22 |
Re : Macro lente

mortalino
|
Salut à tous, oui, je sus un peu déphasé, désolé ^^  J'attaque mon boulot et je n'ai pas encore les yeux en face des trous. C'est bien ScreenUpdating qu'il faut lire.. Sinon, c'est vrai MPi, suivant les moments, les temps d'éxecution sont différents selon les moments, et va savoir pourquoi.. (peut-être des programmes en arrière plan qui prennent le café  ) Bonne soirée à vous deux.  @++
--Mortalino-- Le mystérieux chevalier, "Provençal, le Gaulois" /DIV>
|
|
vendredi 14 mars 2008 à 15:44:42 |
Re : Macro lente

gregou9
|
Bonjour,
J'ai un probleme de lenteur avec ma macro excel.
J'ai un bouton rafraichir sur ma feuille et a chaque fois ke jappuie dessus ma macro rame (le sablier s'affiche pour un bon moment)
Merci de m'aider.
Voici le code :
Sub Macro1()
Application.ScreenUpdating = False 'Application.Calculation = xlCalculationManual Sheets("Détail N").Select Rows("1:10010").Select Selection.EntireRow.Hidden = False Range("A3:FL10000").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _ Range("A1:FL2"), Unique:=False Sheets("Détail N+1").Select Rows("1:10010").Select Selection.EntireRow.Hidden = False Range("A3:FL10010").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _ Range("A1:FL2"), Unique:=False Sheets("Bilan Cumule").Select 'Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True
|
|
Cette discussion est classée dans : macro, données, onglet, lente, venir
Répondre à ce message
Sujets en rapport avec ce message
Comptage du nombre de lignes d'une feuille dans macro [ par Lukatha ]
Bonjour, Je souhaite créer une macro Excel pour copier les données de 3 onglets dans un seul onglet "Data". Les onglets ont tous les même formats ma
[Catégorie modifiée VB6 --> VBA] Macro pour répartir les données d'une feuille Excel dans plusieurs onglets [ par JMC27 ]
Bonjour, Tous les mois je reçois un fichier avec les résultats de vendeurs. Le fichier est présenté avec le nom des vendeurs les uns en dessous des au
[Catégorie modifiée VB6 --> VBA] Pb autoload Combobox activeX ??? [ par Ericbzc ]
Bonjour à tous et merci d'avance pour votre aide [^^happy13] le contexte : je suis sous excel 2003. et j'ai un programme qui à partir d'un tableau de
vba macro pour traiter des données txt [ par malouve ]
Bonjour, je sollicte votre aide pour un problème sur lequel je bute depuis quelques jours , j'ai fait une macro me permettant d'ouvrir un fichier tx
Déclenchement macro liée à saisie. Plusieurs cellules dans même onglet. [ par R2O2 ]
Bonjour,J'ai besoin de lier une macro à un changement de contenu de cellule.
Macro extraction données excel [ par max0811 ]
Bonjour, Je sais pas si c'est le bon endroit pour demandé une aide afin d'effectuer une macro sur EXCEL 2007. Le travail que je voudrai effectuer
[Catégorie encore modifiée .Net --> VBA] base de données excel [ par eric2027 ]
Bonjour à tous En espérant que quel qu'un pourra me sortir de ma galère, je cherche à faire une "base de données excel" sans passer par une macro, par
[Catégorie modifiée VB6 --> VBA] Copier valeur d'une étiquette données dans cellule [ par CerberusPau ]
Bonjour à tous, Depuis un graphique (Excel2003), je cherche à construire une macro pour récupérer les valeurs dans l'étiquette de données d'une courb
faire appel a une macro [ par salamus1986 ]
bonjour a tous, je souhaite enregistrer une macro pour qu elle soit accessible à partir de tous fichiers. je veux que les données que j ai sur ma nou
Macro de contrôle d'enregistrement [ par Geraldq ]
Bonjour J'ai un fichier qui comporte 6 onglets en tous: 5 onglets A,B,C,D,E,F et 1 onglet personnel Lorsque je me trouve dans les onglets A,B,C,D,E,F
Livres en rapport
|
Derniers Blogs
XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Je m'y prends un peu tard je sais, mais bon je suis développeur web et donc hyper fainéant ! Toujours dans le cadre des technologies émergentes, ici HTML5, parce qu'on aime HTML5 chez Wyg , nous seront présent, le vieux ( Aurélien V.) et moi, pour pr...
Cliquez pour lire la suite de l'article par Gio [WP7] DYNAMICALLY CHANGE STARTUP PAGE[WP7] DYNAMICALLY CHANGE STARTUP PAGE par KooKiz
Let's say that you want to allow the user to customize the startup page of your application. You can easily change the startup page by editing the 'NavigationPage' attribute in the manifest file. But the manifest cannot be modified once the applicatio...
Cliquez pour lire la suite de l'article par KooKiz
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|