djinto | Voir ce message dans le sujet non filtré valerypetit a écrit :
Bonjour,
Je pensais avoir optimisé mon programme en l'écrivant comme ci-dessous, mais j'ai quelques longueur dans l’exécution (24 lignes traités lors de mon essai).
on est pourtant sur quelque chose de relativement Basic...
Je tiens à préciser que je voudrais conserver cette séparation dans le traitement des colonnes qui me permettra de faire évoluer plus facilement ma macro par la suite.
Code :
- 'Option Explicit
- Sub Remplir_Tableau()
- Dim sH As Worksheet
- Dim Derligne As Long, i As Long
- Dim tmp
- Application.ScreenUpdating = False
- Set sH = ActiveSheet
- With sH
- Derligne = .Range("K" & Rows.Count).End(xlUp).Row
- For i = 6 To Derligne
-
- .Cells(6, "A" ).Copy .Cells(i + 1, "A" ) 'Catégorie
- .Cells(6, "B" ).Copy .Cells(i + 1, "B" ) 'Priorité
- .Cells(6, "C" ).Copy .Cells(i + 1, "C" ) 'Type Adresse
- .Cells(6, "D" ).Copy .Cells(i + 1, "D" ) 'Nom_API
- '.Cells(6, "A" ).Copy .Cells(i + 1, "A" ) 'Type_Variable
- '.Cells(6, "A" ).Copy .Cells(i + 1, "A" ) 'Index (Lecture)
- '.Cells(6, "A" ).Copy .Cells(i + 1, "A" ) 'Format donnée (Lecture)
- .Cells(6, "I" ).Copy .Cells(i + 1, "I" ) 'Condition
- '.Cells(6, "A" ).Copy .Cells(i + 1, "A" ) 'N°Def
- .Cells(6, "O" ).Copy .Cells(i + 1, "O" ) 'Police
- .Cells(6, "P" ).Copy .Cells(i + 1, "P" ) 'Couleur
- Next
- End With
- End Sub
|
Je ne vois pas trop quoi faire d'autre....
Merci à vous pour vos conseil ;-)
Valery
|
pour la vitesse, je sais pas si tu va aller sur un gain astronomique ( c''est en VBa Macro ),
dans la refactorisation de ton code, tu a plusieurs façons, sur des grands ensembles...
quand tu fais une boucle : tu FETCH sur un intervalle de données ( i++ jusqu'à dernier element )
donc tu FETCH :
avec ta boucle ... ( Méthode 1 de parcours d'ensemble )
avec .Range ( c'est un ensemble parcouru: fonction et macro pour un intervalle aussi )
avec .Cells( un autre ensemble PARAMètrable aussi, quelques approfondissements sur les paramètres de Cells( ... ) à utiliser)
tu vois qu'à l'utilisation de Vba, tu écrit ton code dans un style redondant ( je ferai pas mieux )
tu a oublié que tu peux copier ton Worksheet, et supprimer les colonnes excédentaires.
et c'est différent d'appliquer des styles, des couleurs, et de formatter des lignes et colonnes.
en 2 étapes :
* pas de modifications sur la base de travail / faire une copie de 'source' ...
isoles tes données nécessaires ( dans un autre document, ... c'est une copie ... )
formates selon les besoins ce nouveau fichier, worksheet, cette nouvelle colonne , lignes etc...)
la fonction que tu a fourni, fait beaucoup trop de choses finalement.
éclates les lignes en 4 ou 5 autres fonctions supplémentaires...
SYNTAXE for Vba :
for i = 0 to Maxelemnt step 1
next i
step : c'est le pas ( la valeur d'incrément ) ... 1 == i++
step 2.5 ... ça fait 0 // 2.5 // 5 // 7.5 ... ect ....
par défaut step = 1 // quand tu ne le mentionnes pas.
next // il conduit à l'itération suivante ..
tu a next for // next i // next
next i // il ajoute ton "step" à ton 'indexer' i ...
avec next i // tu a pas besoin de faire i++ ou i+ 1
tu utilise bien i+1 pour parcourir les cells() , tu peux imbriquer 2 boucles... pour une lecture simplifiée
car i parcours verticalement et horizontalement tes enregistrements.. ( c'est booléen ASTUCIEUX !! mais dur à suivre)
for i = 0 to Max step 1
for j= ''cellulle....'' to ''cellule...der'' step 1
// ou tout autre chose...
next j
next i
Message édité par djinto le 12-04-2021 à 21:49:24
|