Améliorer rapidité execution macro excel
Fermé
necro27
Messages postés
160
Date d'inscription
jeudi 28 mai 2009
Statut
Membre
Dernière intervention
11 février 2011
-
11 juin 2009 à 14:22
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 - 12 juin 2009 à 21:43
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 - 12 juin 2009 à 21:43
A voir également:
- Améliorer rapidité execution macro excel
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Si et excel - Guide
- Déplacer une colonne excel - Guide
5 réponses
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 718
11 juin 2009 à 23:17
11 juin 2009 à 23:17
bonjour
Tu n'as pas besoin d'ouvrir chaque fichier pour chaque cellule.
Si tu qualifies chaque fichier pour récupérer les données cela ne devrait pas durer mais ce n'est pas simple de savoir exactement ton fonctionnement.
Tu n'as pas besoin d'ouvrir chaque fichier pour chaque cellule.
Si tu qualifies chaque fichier pour récupérer les données cela ne devrait pas durer mais ce n'est pas simple de savoir exactement ton fonctionnement.
necro27
Messages postés
160
Date d'inscription
jeudi 28 mai 2009
Statut
Membre
Dernière intervention
11 février 2011
8
12 juin 2009 à 09:40
12 juin 2009 à 09:40
bonjour,
je me suis mal exprimé, en faite je n'ouvre pas chaque classeur, j'active chaque classeur..
mais le souci est que pendant le traitement, l'affichage des 2 fenêtres actives brillent en permanence à tour de rôle, lors de la copie des données.
Mais je me suis aperçu qu'en ce qui concerne le compteur dont je parlais, il ne diminue pas le temps de traitement, mais par contre pour des soucis d'aparance, je le trouve plus esthétique..saurais tu commet il faut faire?
En faite il s'agit d'un petit compteur qui s'affiche dans la barre grise du classeur excel, juste en dessous de la dénomination des feuilles, et qui affiche en faite le nombre de lignes traitées sur le nombre de ligne total..
merci d'avance :)
Necro27
je me suis mal exprimé, en faite je n'ouvre pas chaque classeur, j'active chaque classeur..
mais le souci est que pendant le traitement, l'affichage des 2 fenêtres actives brillent en permanence à tour de rôle, lors de la copie des données.
Mais je me suis aperçu qu'en ce qui concerne le compteur dont je parlais, il ne diminue pas le temps de traitement, mais par contre pour des soucis d'aparance, je le trouve plus esthétique..saurais tu commet il faut faire?
En faite il s'agit d'un petit compteur qui s'affiche dans la barre grise du classeur excel, juste en dessous de la dénomination des feuilles, et qui affiche en faite le nombre de lignes traitées sur le nombre de ligne total..
merci d'avance :)
Necro27
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 718
12 juin 2009 à 09:51
12 juin 2009 à 09:51
bonjour
j'active chaque classeur..
C'est bien là que tu peux gagner du temps car tu n'as pas besoin d'activer les classeurs.
tu fais :
dim w1 as Workbook
dim w2 as Workbook
set w1 = Workbook("fichier1")
set w2 = Workbook("fichier2")
fichier 3.range("A1") = w1.range("A1")
fichier 3.range("B1") = w2.range("B1")
Bien entendu la syntaxe du fichier 3 est à adapter à ta syntaxe.
Tu mets en début la ligne suivante pour éviter le scintillement.
Application.screenupdating = false
j'active chaque classeur..
C'est bien là que tu peux gagner du temps car tu n'as pas besoin d'activer les classeurs.
tu fais :
dim w1 as Workbook
dim w2 as Workbook
set w1 = Workbook("fichier1")
set w2 = Workbook("fichier2")
fichier 3.range("A1") = w1.range("A1")
fichier 3.range("B1") = w2.range("B1")
Bien entendu la syntaxe du fichier 3 est à adapter à ta syntaxe.
Tu mets en début la ligne suivante pour éviter le scintillement.
Application.screenupdating = false
necro27
Messages postés
160
Date d'inscription
jeudi 28 mai 2009
Statut
Membre
Dernière intervention
11 février 2011
8
12 juin 2009 à 12:25
12 juin 2009 à 12:25
désolé je ne pouvais pa répondre plus tot
Voici un exemple bateau avec lequel je test ton code, mais cela ne marche pas
Ce code est contenu dans le workbook_open
Private Sub Workbook_Open()
Dim ad1 As String, ad2 As String, ad3 As String, _
var1 As String, var2 As String, var3 As String
Dim w1 As Workbook, w2 As Workbook
var1 = Application.GetOpenFilename
Workbooks.Open (var1)
ad1 = ActiveWorkbook.Name
Set w1 = Workbooks(ad1)
var2 = Application.GetOpenFilename
Workbooks.Open (var2)
ad2 = ActiveWorkbook.Name
Set w2 = Workbooks(ad2)
var3 = Application.GetOpenFilename
Workbooks.Open (var3)
ad3 = ActiveWorkbook.Name
Workbooks(ad3).Range("A1") = w1.Range("A1")
Workbooks(ad3).Range("B1") = w2.Range("B1")
End Sub
Je sais où est l'erreur, en faite il faut :
private sub workbook_open()
test
end sub
puis dans un module
sub test ()
[...]
end sub
Dans le premier cas, cela me renvoi une erreur sans ligne qui me dit que 'propriété ou objet non géré par cet éta'
et l'autre l'erreur est que la ligne
Set w1 = Workbook(ad1) me renvoi le message sub ou fonction non définie..
as-tu une idée?
merci et désolé pour le retard de la réponse, mais étant stagiaire, l'on m'avait attribué une autre tâche entre temps..bref merci :)
Voici un exemple bateau avec lequel je test ton code, mais cela ne marche pas
Ce code est contenu dans le workbook_open
Private Sub Workbook_Open()
Dim ad1 As String, ad2 As String, ad3 As String, _
var1 As String, var2 As String, var3 As String
Dim w1 As Workbook, w2 As Workbook
var1 = Application.GetOpenFilename
Workbooks.Open (var1)
ad1 = ActiveWorkbook.Name
Set w1 = Workbooks(ad1)
var2 = Application.GetOpenFilename
Workbooks.Open (var2)
ad2 = ActiveWorkbook.Name
Set w2 = Workbooks(ad2)
var3 = Application.GetOpenFilename
Workbooks.Open (var3)
ad3 = ActiveWorkbook.Name
Workbooks(ad3).Range("A1") = w1.Range("A1")
Workbooks(ad3).Range("B1") = w2.Range("B1")
End Sub
Je sais où est l'erreur, en faite il faut :
private sub workbook_open()
test
end sub
puis dans un module
sub test ()
[...]
end sub
Dans le premier cas, cela me renvoi une erreur sans ligne qui me dit que 'propriété ou objet non géré par cet éta'
et l'autre l'erreur est que la ligne
Set w1 = Workbook(ad1) me renvoi le message sub ou fonction non définie..
as-tu une idée?
merci et désolé pour le retard de la réponse, mais étant stagiaire, l'on m'avait attribué une autre tâche entre temps..bref merci :)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 718
12 juin 2009 à 21:43
12 juin 2009 à 21:43
bonjour
Non ta macro fonctionne très bien mais je t'avais dis d'adapter la syntaxe que je n'avais pas testée et si tu mets ceci, cela fonctionne très bien
Cela évite l'activation des classeurs et permet un déroulement rapide avec bien sûr une boucle sur les infos à récupérer.
Non ta macro fonctionne très bien mais je t'avais dis d'adapter la syntaxe que je n'avais pas testée et si tu mets ceci, cela fonctionne très bien
Workbooks(ad3).ActiveSheet.Range("A1") = w1.ActiveSheet.Range("A1") Workbooks(ad3).ActiveSheet.Range("B1") = w2.ActiveSheet.Range("B1")
Cela évite l'activation des classeurs et permet un déroulement rapide avec bien sûr une boucle sur les infos à récupérer.