Code Range où Cells

ilytoine Messages postés 19 Date d'inscription lundi 2 février 2004 Statut Membre Dernière intervention 3 novembre 2011 - 3 nov. 2011 à 15:24
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 3 nov. 2011 à 18:08
Bonjour,

J'ai réalisé une macro sous excel, et elle est un peu lente, le code est plutôt simple...
Alors Je me demande si
Cells (1,1).value
est plus rapide que
Range ("A1").value
.
Quelqu'un aurais une idée sur cette question ?

Merci d'avance

7 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 234
3 nov. 2011 à 15:46
Bonjour,

C'est pareil.
C'est donc dans ton code, que tu as des instructions qui provoquent des lenteurs.
J'espère que tu ne fonctiàonnes pas à grands renforts de :
.Select, puis Selection. ...., etc !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ilytoine Messages postés 19 Date d'inscription lundi 2 février 2004 Statut Membre Dernière intervention 3 novembre 2011
3 nov. 2011 à 16:04
Voilà mon code.....

Do Until Cells(lign, 43) = ""
T = 2

Sheets(2).Select
Sheets(2).Copy

Columns("A:AP").Select
Selection.Insert Shift:=xlToRight

'*************************************** Création de la liste de pièce format *.lsb *************************************
Cells(1, 1).Value = "rrrrrrrrrrrr"


VarDataMatrix(lign) = Cells(lign, 45) & Cells(lign, 44) & Cells(lign, 59) & Cells(lign, 43) & Cells(lign, 48) & Cells(lign, 49) & Cells(lign, 84)
Cells(T, 2).Value = "uuuuuuuuuuuuuuuuuuu"
Cells(T, 3).Value = "Combi_" & Cells(lign, 45).Value 'zone commentaire
Cells(T, 4).Value = "N"
Cells(T, 5).Value = "1"
Cells(T, 6).Value = "1"
Cells(T, 7).Value = "1"
Cells(T, 8).Value = "1"
Cells(T, 9).Value = "0"
Cells(T, 10).Value = "0"
Cells(T, 11).Value = "0"
Cells(T, 12).Value = "0"
Cells(T, 13).Value = Cells(lign, 55).Value '"longueur"
Cells(T, 14).Value = Cells(lign, 50).Value '"largeur"
Cells(T, 15).Value = Cells(lign, 51).Value '"epaisseur"
Cells(T, 16).Value = ""
Cells(T, 17).Value = ""
Cells(T, 18).Value = ""
Cells(T, 19).Value = "0"
Cells(T, 20).Value = ""
Cells(T, 21).Value = "0"
Cells(T, 22).Value = "0"
Cells(T, 23).Value = ""
Cells(T, 24).Value = ""
Cells(T, 25).Value = ""
Cells(T, 26).Value = ""
Cells(T, 27).Value = ""
Cells(T, 28).Value = ""
Cells(T, 29).Value = ""
Cells(T, 30).Value = ""
Cells(T, 31).Value = ""
Cells(T, 32).Value = ""
Cells(T, 33).Value = ""
Cells(T, 34).Value = ""
Cells(T, 35).Value = ""
Cells(T, 36).Value = ""
Cells(T, 37).Value = ""
Cells(T, 38).Value = ""
Cells(T, 39).Value = ""
Cells(T, 40).Value = ""
Cells(T, 41).Value = ""
Cells(T, 42).Value = ""

Cells(T + 1, 1).Value = "$==="

Columns("AQ:IV").Select
Selection.Delete Shift:=xlToLeft
Application.DisplayAlerts = False 'supprime message
ActiveWorkbook.SaveAs Filename:= _
       chemin & Nom_FichierSext & VarDataMatrix(lign) & ".lsb", FileFormat:=xlCSV _
       , CreateBackup:=False, local:=True 'local true pour remplace CSV "," par CSV ";"
ActiveWorkbook.Close False
Application.DisplayAlerts = True 'supprime message
lign = lign + 1
Loop


Pour info la boucle varie entre 1 et 3000 ligne.
J'ai bien des "select" mais comment faire autrement je suis débutant...
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 234
3 nov. 2011 à 16:09
1) C'est bien ce que je pensais (des Select !)
2) expose-nous avec précisions les tenants et aboutissants de ton problème,k s'il te plait
3) quand je lis ceci (le code et son commentaire) :
Application.DisplayAlerts = True 'supprime message

j'ai plutôt tendance à me dire que tu ferais bien d'ouvrir ton aide VBA
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ilytoine Messages postés 19 Date d'inscription lundi 2 février 2004 Statut Membre Dernière intervention 3 novembre 2011
3 nov. 2011 à 16:22
Bon,
je vais supprimer les "select"

Pour le
Application.DisplayAlerts = True 
c'est bien pour supprimer les messages en cas de fichier existant non?

Merci quand même...

bye
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 234
3 nov. 2011 à 17:06
Application.DisplayAlerts = True

c'est bien pour supprimer les messages en cas de fichier existant non?



Ah bon !
Ouvre ton aide VBA sur la propriété DisplayAlerts et lis .
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ilytoine Messages postés 19 Date d'inscription lundi 2 février 2004 Statut Membre Dernière intervention 3 novembre 2011
3 nov. 2011 à 17:41
Bon , j'ai regardé l'aide VBA

DisplayAlerts, propriété
Voir aussiS'applique àExempleDétailsCette propriété a la valeur True si Microsoft Excel affiche des messages, notamment d'alerte, lorsqu'une macro est exécutée. Types de données Boolean en lecture-écriture.

Notes
La valeur par défaut est True. Affectez la valeur False à cette propriété si vous ne souhaitez pas être dérangé par des invites et messages d'alerte pendant l'exécution d'une macro. Lorsqu'une réponse est nécessaire, Microsoft Excel utilise systématiquement la réponse par défaut.

Si vous affectez la valeur False à cette propriété, Microsoft Excel lui affecte la valeur True lorsque le code est terminé, sauf si vous exécutez le code de la procédure croisée.

Lorsque la méthode SaveAs pour des classeurs est utilisée pour remplacer un fichier existant, l'alerte de remplacement a la valeur Non par défaut, tandis que la réponse Oui est sélectionnée par Excel lorsque la propriété DisplayAlerts a la valeur True.


Bon je me suis peut-être mal exprimé, mais tu joue un peu sur les mots ucfoutu, pour l'opérateur de la macro ça "supprime" le message d'alertes, pour le celui qui programme ça répond par défault......
le but premier de DisplayAlerts avant le saveas pour moi était bien de "supprimer" l'aparition du message.

Bref j'ai viré mais select, j'ai viré mon .copy et à la place j'ai mis tout les données dans une variable



TabCopy = Range("A1:BO5000").Value


UserForm1.Label3.Caption = "Création du fichier liste"
UserForm1.Repaint

Do Until Cells(lign, 43) = ""
T = 2
Workbooks.Add
Range("AP1:DD5000").Value = TabCopy
'*************************************** Création de la liste de pièce format *.lsb *************************************
Cells(1, 1).Value = "TPA\ALBATROS\BKEEPER 2.4.8"

VarDataMatrix(lign) = Cells(lign, 45).Value & Cells(lign, 44).Value & Cells(lign, 59).Value & Cells(lign, 43).Value & Cells(lign, 48).Value & Cells(lign, 49).Value & Cells(lign, 84).Value
Cells(T, 2).Value = "POLE" & VarDataMatrix(lign) & ".TCN"
Cells(T, 3).Value = "Combi_" & Cells(lign, 45).Value 'zone commentaire
Cells(T, 4).Value = "N"
Cells(T, 5).Value = "1"
Cells(T, 6).Value = "1"
Cells(T, 7).Value = "1"
Cells(T, 8).Value = "1"
Cells(T, 9).Value = "0"
Cells(T, 10).Value = "0"
Cells(T, 11).Value = "0"
Cells(T, 12).Value = "0"
Cells(T, 13).Value = Cells(lign, 55).Value '"longueur"
Cells(T, 14).Value = Cells(lign, 50).Value '"largeur"
Cells(T, 15).Value = Cells(lign, 51).Value '"epaisseur"
Cells(T, 16).Value = ""
Cells(T, 17).Value = ""
Cells(T, 18).Value = ""
Cells(T, 19).Value = "0"
Cells(T, 20).Value = ""
Cells(T, 21).Value = "0"
Cells(T, 22).Value = "0"
Cells(T, 23).Value = ""
Cells(T, 24).Value = ""
Cells(T, 25).Value = ""
Cells(T, 26).Value = ""
Cells(T, 27).Value = ""
Cells(T, 28).Value = ""
Cells(T, 29).Value = ""
Cells(T, 30).Value = ""
Cells(T, 31).Value = ""
Cells(T, 32).Value = ""
Cells(T, 33).Value = ""
Cells(T, 34).Value = ""
Cells(T, 35).Value = ""
Cells(T, 36).Value = ""
Cells(T, 37).Value = ""
Cells(T, 38).Value = ""
Cells(T, 39).Value = ""
Cells(T, 40).Value = ""
Cells(T, 41).Value = ""
Cells(T, 42).Value = ""
Cells(T + 1, 1).Value = "$==="

Columns("AP:IV").Delete
Application.DisplayAlerts = False 'supprime message
ActiveWorkbook.SaveAs Filename:= _
       chemin & Nom_FichierSext & "_BREMA" & VarDataMatrix(lign) & ".lsb", FileFormat:=xlCSV _
       , CreateBackup:=False, local:=True 'local true pour remplace CSV "," par CSV ";"
ActiveWorkbook.Close False
Application.DisplayAlerts = True 'supprime message
lign = lign + 1
Loop


Le but de ce code :
J'ai un fichier excel avec une multidude de donnée.
Je récupère c'est donnée
Range("AP1:DD5000").Value
que je "colle dans une nouvelle feuille, je mets en forme, et enregistre, et boucle autant de fois que mon fichier principale à de ligne de donnée.

Une idée pour accélérer le code ?
(en sachant que j'utilise déjà application.visible pour ne pas régénérer l'ecran à chaque boucle)
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 234
3 nov. 2011 à 18:08
- C'est quoi, ta variable lign ? où et comment est-elle définie ?
- ce sont des CLASSEURS, que crée ton code, pas des "nouvelles feuilles"
- et tu le fais combien de fois (puisque en boucle) ? et pourquoi ? et toujours les mêmes données ?
- et pourquoi tout copier pour après supprimer des colonnes ? (ne copie que ce que tu veux).
- toute cette partie-là :
- Cells(T, 23).Value = ""
Cells(T, 24).Value = ""
Cells(T, 25).Value = ""
Cells(T, 26).Value = ""
Cells(T, 27).Value = ""
Cells(T, 28).Value = ""
Cells(T, 29).Value = ""
Cells(T, 30).Value = ""
Cells(T, 31).Value = ""
Cells(T, 32).Value = ""
Cells(T, 33).Value = ""
Cells(T, 34).Value = ""
Cells(T, 35).Value = ""
Cells(T, 36).Value = ""
Cells(T, 37).Value = ""
Cells(T, 38).Value = ""
Cells(T, 39).Value = ""
Cells(T, 40).Value = ""
Cells(T, 41).Value = ""
Cells(T, 42).Value = ""

n'est finalement que ceci :
Range(Cells(T, 24), Cells(T, 42)).ClearContents

Voilà, déjà ...
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0