Recopie ligne formules par vba et optimisation

KIM

XLDnaute Accro
Bonjour le forum.
J'utilise souvent la technique ci-dessous:
Je definis mes formules sur une ligne
et je la recopie par macro dans la plage souhaitée.
Ex:
mes formules en G2:M2 ,
la macro 'Copie_ligneformules_dansplage'
recopie et calcule chaque formule dans la plage G5:M208

Mes données reelles font presque 60 000 lignes et 50 colonnes. et le temps d'exécution est tres tres long.
Je souhaite optimiser ce code et le rendre plus rapide en utilisant les tableaux. Cela me fera gagner beaucoup de temps.
Merci de votre aide
Amicalement
KIM

Sub Copie_ligneformules_dansplage()
Dim w_nfile As String
Dim MyPath As String
Dim Ws As Worksheet
Dim n_line As Long


Set Ws = Worksheets('DATA2')

With Application
.ScreenUpdating = False
' .ScreenUpdating = True
.Calculation = xlCalculationAutomatic
End With

w_nfile = ActiveWorkbook.Name
MyPath = ActiveWorkbook.Path
Ws.Activate
Ws.Select
If Ws.AutoFilterMode Then
Selection.AutoFilter
End If

Windows(w_nfile).Activate
ActiveSheet.Calculate
n_line = Ws.Range('E2')

Range('G5:M' & n_line).Select
Selection.ClearContents


Range('G2:M2').Copy Destination:=Range('G5:G' & n_line)
ActiveSheet.Calculate
With Selection
.Copy
.Calculate
' .PasteSpecial Paste:=xlFormats
.PasteSpecial Paste:=xlValues
End With

With Application
.CutCopyMode = False
.DisplayAlerts = False
.ScreenUpdating = True
' .ScreenUpdating = False
.Calculation = xlCalculationManual
End With


MsgBox 'c'est fini'
End Sub [file name=prjKIMv1.zip size=35953]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/prjKIMv1.zip[/file]
 

Pièces jointes

  • prjKIMv1.zip
    35.1 KB · Affichages: 104

KIM

XLDnaute Accro
Re,
@Bebere,
J'ai essayé de faciliter le travail, mais j'ai l'impression que ma demande est complexe ou je dois mieux m'exprimer en donnant un fichier exemple.
Je vais essayer de preparer un fichier exemple mais pas aujourd'oui.
Merci d'avance
KIM
 

pierrejean

XLDnaute Barbatruc
Salut KIM bebere JeanMarie le forum

pour permettre les calculs sur plusieurs feuilles de type DATA j'ais installé le bouton sur un userform 'volant'
sur ce même useform j'ais mis un bouton enregistrer avec la selection des plages nommées

comme dans un même workbook il n'est pas possible de nommer de façon identique des plages figurant dans diverses feuilles j'ais opté pour des appelation type Titre2 Titre3 etc
si les feuilles ne sont pas genérées par la macro il conviendra de respecter le type d'appelation
enfin pour les calculs si ta preference va au style bebere (ou JeanMarie)on pourra regarder a faire le meilleur mix de tous [file name=prj_KIMv11.zip size=50750]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/prj_KIMv11.zip[/file]
 

Pièces jointes

  • prj_KIMv11.zip
    49.6 KB · Affichages: 28

ChTi160

XLDnaute Barbatruc
Salut KIM
bonjour pierrejean,Bebere
arfff je rentre du mariage et maintenant je vois que le fichier évolue mais je n'y comprends plus rien mais bon je suis quand même
pour pierrejean je crois avoir déjà essayé de nommer des plage par un même nom ,cela marche je crois me rappeler si l'on fait précéder le nom de la plage du nom de la feuille enfin je crois il faudrait que je recherche
ex Feuil1!Nomplage,Feuil2!Nomplage
tu testes dans insertion nom définir
sinon je vais essayé de reprendre le fil du Fil Lol
pour Bebere Beau Travail
bonne fin de Journée
 

KIM

XLDnaute Accro
Re,
@Pierrejean, Bebere, Jeanmarie,
J'ai l'impression que je complique les choses à la place de rendre le code plus facile à lire et à comprendre.
Si j'arrive à faire une explication plus claire et comprehensive, je vous la ferai parvenir.
Je vais essayer de regarder les codes de ces differentes macros et refaire le point.
Merci de votre patience et de votre collaboration.
Bien amicalement
KIM
 

ChTi160

XLDnaute Barbatruc
Re Kim
pour pierrejean

une macro que j'ai arrangé pour nommer deux plage liste1 si l'on modifie la liste de la feuille 1 par exemple cette liste s'appellera Feuil1!Liste1 et si l'on modifie la liste dans la feuille 3 par exemple cette liste s'appellera Feuil3!Liste1 je te mets le code pour teste
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)Dim Col As Integer
Dim DerLigne As Long
Dim Temp As String
Col = 2
If Cells(6, Col) = '' Then Exit Sub
DerLigne = Cells(65536, Col).End(xlUp).Row
Temp = '=' & ActiveSheet.Name & '!' & Cells(6, Col).Address & ':' & Cells(DerLigne, Col).Address
ActiveWorkbook.Names.Add Name:=ActiveSheet.Name & '!Liste1', RefersTo:=Temp
End Sub
ensuite tu selectionnes l'une des feuilles et tu fais insertion nom définir et tu verras Lol
bonne fin de journée
voir le fichier exemple [file name=TestePlageNommee.zip size=8119]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/TestePlageNommee.zip[/file]

Message édité par: Chti160, à: 05/06/2006 16:44
 

Pièces jointes

  • TestePlageNommee.zip
    7.9 KB · Affichages: 29

KIM

XLDnaute Accro
Bonjour à vous tous et le forum
Une belle journée ensoleillée en vue, mais ce n'est pas encore les vacances.
@Jeanmarie, Après un mariage bien arrosé je pense, et félicitations aux mariés, qu'en penses-tu?
Le Team t'attend,
Est-ce que mon idée est logique ou compliquée et incompréhensible?
Dans le fichier source il y a plusieurs feuilles de données à calculer avec des formules et des presentations différentes. Une bonne idee de Pierrejean de recopier ces feuilles calculées dans un classeur sans formules et sans macros.
Mais ces feuilles, dans le classeur initial sont tres encombrées par des colonnes ou lignes dont l'utilisateur final n'en a pas besoin. L'idée est de nommer dans le classeur initial les plages dont j'ai besoin de recopier et qui peuvent etre discotinues. Il peut y avoir pour chaque feuille calculée des plages de nom: Titre, libellé, notif_SE, Notif_RP etc
Pour la recopie dans le classeur cible, je donne le nom de la feuille, le nom de la plage à recopier et la premiere cellule à partir de laquelle il faut recopier. Pour une meme feuille il peut y avoir plusieurs plages nommées à recopier.
Dans cette logique si on modifie les plages nommées dans le classeur initial on n'a pas à modifier la macro de recopie.
A ne pas oublier que cette partie doit etre integrée dans la macro initiale de recopie de formules.
Merci de votre patience et de votre disponibilité.

Bien amicalement
KIM
 

ChTi160

XLDnaute Barbatruc
Salut KIM
bonjour pierrejean,Bebere
bonjour le Forum

KIM le plus dur dans ce genre de démarche c'est de bien se comprendre,donc si tu expliques on va finir par comprendre (insiste)Lol
si je comprends bien Lol tu as un classeur avec des feuilles où il y a des plages nommées que tu veux recopier dans un nouveau classeur(un Classeur pour l'ensemble des feuilles à copier ??? c'est ca !!! )donc on sait déjà combien de feuilles aura ce nouveau classeur ainsi que le nom de c'est feuilles.
donc on pourrait peut être créer un Classeur Modèle et ainsi l'appeler ,ce classeur comprendrait les Feuilles nommées (voir les plages nommées)devant recevoir les plages Source enfin une idée comme une autre
si cela est possible il faudrait que tu fasses un fichier les feuilles et les zones nommées avec ou sans données à voir ) et y indiquer les zones qui devront être transferées (encore une idées pour faire avancer le chimilimBlick lol)
bonne journée
 

pierrejean

XLDnaute Barbatruc
bonjour KIM Jean Marie bebere

Tout d'abord
en etudiant le tres beau travail de bebere je me suis avisé que le mien etait erroné

voici donc une version corrigée qui integre egalement la preparation de la colonne G et la ligne 4

pour ce qui concerne la copie de pages nommées je regarde mais je pense qu'a la base pour s'en sortir de façon dynamique il faut adopter des appelations du type copier1 copier2 etc [file name=prj_KIMv11_20060606095149.zip size=47781]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/prj_KIMv11_20060606095149.zip[/file]
 

Pièces jointes

  • prj_KIMv11_20060606095149.zip
    46.7 KB · Affichages: 88

Bebere

XLDnaute Barbatruc
bonjour Kim,Pierre-Jean,Jean-marie
je suis de l'avis de Jean-marie des exemples valent mieux qu'une longue explication et c'est la personne qui travaille avec qui mène le débat
donc Kim tu as du pain sur la planche
à bientôt

(je trouve que les programmes devrait être créés comme cela,des modules,puis tu achètes ce que tu as besoin et ne pas imposer une suite et te servir que d'une petite partie)
 

KIM

XLDnaute Accro
Re, Bebere, Pierrejean,Jeanmarie
@Bebere, Tu as raison, je prépare un fichier test et vous le transmet des que possible.
@Pierrejean, Merci, resultat correct.
Concernant les appelations, ils sont déjà figées dans le fichier origine à la main ou par set plage_nom = ....
Concernant la col G et ligne 4 est-il possible de les trier pour avoir ces 2 listes triées par ordre croissant?
A tout à l'heure peut-etre et merci de votre soutien et votre disponibilité.
Amicalement
KIM
 

pierrejean

XLDnaute Barbatruc
hello (le soleil brille brille....)

@ KIM
pour travailler sur les plages nommées

peux-tu jeter un coup d'oeil la dessus [file name=KIM.zip size=2852]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/KIM.zip[/file]
 

Pièces jointes

  • KIM.zip
    2.8 KB · Affichages: 85
  • KIM.zip
    2.8 KB · Affichages: 86
  • KIM.zip
    2.8 KB · Affichages: 97

KIM

XLDnaute Accro
Re,
@Pierrejean,
ci-joint réponse à tes questions.
je reste à ta disposition pour d'autres infos si necessaire
Merci
KIM [file name=KIM_PJ12.zip size=4406]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/KIM_PJ12.zip[/file]
 

Pièces jointes

  • KIM_PJ12.zip
    4.3 KB · Affichages: 86

Bebere

XLDnaute Barbatruc
rebonjour
les plages définies avec décaler et vba ?
avec vba pas de problèmes pour donner des noms
d'accord avec vous pour la dernière proposition de Pierre-Jean(le soleil joue à cache-cache,mais il fait sec)
à bientôt
 

Discussions similaires

Réponses
7
Affichages
292

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof