Bonjour Inmex,
avec Takama13 ! Un bon code n'utilise pas les affreux ralentisseurs Activate & Select ! Un 'chtit exemple ici …
Penser à la propriété End pour trouver la dernière cellule d'une colonne à partir d'une cellule connue.
Elle correspond à la manipulation clavier Ctrl + flèche de direction dans une feuille de calcul.
Donc si la saisie débute dans la cellule A2 et qu'il n'y a pas de trou dans la colonne,
Ctrl + flèche bas se positionne sur la dernière saisie de la colonne; en VBA : [A2].End(xlDown) …
Consulter l'aide VBA intégrée concernant cette propriété !
CurrentRegion est une autre propriété à ne pas négliger, très utile pour travailler avec un bloc de colonnes …
Dans le cas d'une colonne à saisie discontinue, l'astuce consiste à se placer sur la dernière cellule de la colonne puis
de remonter sur la dernière saisie via Ctrl + flèche haut; en VBA : Cells(Rows.Count, 1).End(xlUp) …
Enfin pour accélérer un processus, en dehors de respecter la règle TBTO en évitant ces affreux Select & autres ralentisseurs,
mis à part de désactiver
◙ le mode de calcul automatique (voir la propriété Application.Calculation)
◙ les procédures évènementielles ( " Application.EnableEvents)
◙ le rafraîchissement de l'écran ( " Application.ScreenUpdating)
◙ si besoin les messages d'alerte ( " Application.DisplayAlerts),
il est bien plus rapide de parcourir les données d'une variable tableau au lieu des cellules d'une feuille de calcul !
Une procédure comptant les occurrences de 14 commentaires (doublons) au sein d'une colonne de 60 480 saisies
nécessite moins de 0,2 seconde à l'aide d'une variable tableau entre autres !
En VBA pour charger dans une variable tableau les saisies en colonne depuis la cellule A2 de la feuille active :
AR = Range("A2", [A2].End(xlDown)).Value …
La variable AR est un tableau à deux dimensions lignes par colonnes comme Cells(de 1 à nb de lignes, de 1 à nb de colonnes).
Si la dernière saisie est en A100, la variable tableau est déclarée de facto ainsi : AR(1 à 99, 1 à 1) …
Il y a bien 99 saisies (lignes 2 à 100) sur une seule colonne …
Voir l'aide de la fonction UBound pour connaitre le dernier indice d'un tableau.
Afin de parcourir les cellules via une variable tableau, une boucle classique For Next par exemple :
Code :
- AR = Range("A2", [A2].End(xlDown)).Value
-
- For R& = 1 To UBound(AR)
- If AR(R, 1) > "" Then
- ' traitement ici
- End If
- Next
|
Enfin consulter l'aide de l'instruction Erase pour libérer la mémoire d'une variable tableau …
Message édité par Marc L le 03-11-2013 à 19:16:38