Bonjour,
je fais suite aux discussions que j'avais initiées ici ou là ou encore là sur la possibilité de trier des plages multicolonne par le biais de formules.
Si les propositions exposées dans ces discussions remplissent leur office, la question du temps de traitement revient invariablement sur le tapis dès lors que la plage à traiter est importante.
L'un des moyens d'y remédier est de valider la formule non pas dans une cellule qui sera par la suite étirée mais directement dans un champ préalablement sélectionné.
Nous avons vu dans certaines discussions récentes (dont celle-ci) que cette façon de faire permettait un gain de temps appréciable.
Cependant les solutions proposées ne sont opérationnelles que sur une plage d'une seule colonne (ou ligne).
Concernant le traitement des plages multicolonne les solutions que j'avais proposées ne sont pas applicables en l'état vue que la structure des formules, basée sur l'utilisation de la fonction MIN couplée à NB.SI(Plage;Critère)=0 oblige de fait une comparaison préalable entre deux plages : celles des arguments "plage" et "critère" de NB.SI.
C'est cette comparaison qui permet l'exclusion des valeurs en doublon.
Si l'on veut pouvoir appliquer une formule capable de faire le travail directement dans un champ il faut donc trouver une autre méthode.
Lorsque l'on travaille sur une plage d'une seule colonne l'utilisation de la fonction EQUIV permet de faire ce travail.
Le problème c'est que cette fonction ne supporte pas le "multicolonne".
Il a donc fallu trouver une autre façon de faire : c'est cette idée que je vous livre.
Je ne vous saoulerai pas avec mes explications : si vous avez des questions sur la méthode utilisée j'y répondrai bien volontiers.
Je joins deux classeurs à ce message.
Dans le 1er classeur vous trouverez d'une part trois formules déjà proposées dans les discussions déjà initiées qui traitent des tris sur une plage multicolonne :
- un tri sans doublon par ordre de colonne
- un tri sans doublon par ordre de ligne
- un tri sans doublon par ordre alphanumérique
Vous trouverez également trois nouvelles formules qui font le même travail mais qui, elles, peuvent être validées directement dans un champ.
Le 2ème classeur comporte une plage de 100 lignes sur 10 colonnes et sert à tester les différentes formules afin de se rendre compte de visu de la différence du temps de traitement entre une formule validée dans une cellule et tirée vers le bas et une formule validée une seule fois dans un champ.
Afin de vous rendre compte de la différence de temps de traitement entre les deux types de validation il est nécessaire de respecter le protocole suivant :
- ne tester qu'une formule à la fois
- la tester sur une plage de longueur équivalente : dans le classeur test la plage est de 100 cellules
- amusez-vous à ajouter puis supprimer des noms qui ne sont pas déjà présents dans la plage pour visualiser la vitesse de traitement de la formule.
NB : sur 100 cellules la différence est déjà visible (surtout concernant la comparaison entre les deux formules traitant du tri sans doublon par ordre alphanumérique) mais amusez-vous à tester sur des plages plus importantes...
Bien entendu il va sans dire qu'au-delà d'un certain seuil le recours au tri VBA est vivement recommandé mais la possibilité de valider une formule matricielle directement dans un champ m'apparaît être une solution à creuser.
Ces deux classeurs sont au format .xlsx car les formules utilisées ne peuvent être lues (et donc étudiées pour ceux et celles que cela intéresse) en l'état au format xls.
Pour ceux qui veulent les utiliser dans un classeur au format .xls il est bien entendu possible de nommer certaines parties des formules (si certains sont intéressés qu'ils le disent et je fournirai un classeur au format .xls).
Si vous avez des questions n'hésitez pas !
A+
je fais suite aux discussions que j'avais initiées ici ou là ou encore là sur la possibilité de trier des plages multicolonne par le biais de formules.
Si les propositions exposées dans ces discussions remplissent leur office, la question du temps de traitement revient invariablement sur le tapis dès lors que la plage à traiter est importante.
L'un des moyens d'y remédier est de valider la formule non pas dans une cellule qui sera par la suite étirée mais directement dans un champ préalablement sélectionné.
Nous avons vu dans certaines discussions récentes (dont celle-ci) que cette façon de faire permettait un gain de temps appréciable.
Cependant les solutions proposées ne sont opérationnelles que sur une plage d'une seule colonne (ou ligne).
Concernant le traitement des plages multicolonne les solutions que j'avais proposées ne sont pas applicables en l'état vue que la structure des formules, basée sur l'utilisation de la fonction MIN couplée à NB.SI(Plage;Critère)=0 oblige de fait une comparaison préalable entre deux plages : celles des arguments "plage" et "critère" de NB.SI.
C'est cette comparaison qui permet l'exclusion des valeurs en doublon.
Si l'on veut pouvoir appliquer une formule capable de faire le travail directement dans un champ il faut donc trouver une autre méthode.
Lorsque l'on travaille sur une plage d'une seule colonne l'utilisation de la fonction EQUIV permet de faire ce travail.
Le problème c'est que cette fonction ne supporte pas le "multicolonne".
Il a donc fallu trouver une autre façon de faire : c'est cette idée que je vous livre.
Je ne vous saoulerai pas avec mes explications : si vous avez des questions sur la méthode utilisée j'y répondrai bien volontiers.
Je joins deux classeurs à ce message.
Dans le 1er classeur vous trouverez d'une part trois formules déjà proposées dans les discussions déjà initiées qui traitent des tris sur une plage multicolonne :
- un tri sans doublon par ordre de colonne
- un tri sans doublon par ordre de ligne
- un tri sans doublon par ordre alphanumérique
Vous trouverez également trois nouvelles formules qui font le même travail mais qui, elles, peuvent être validées directement dans un champ.
Le 2ème classeur comporte une plage de 100 lignes sur 10 colonnes et sert à tester les différentes formules afin de se rendre compte de visu de la différence du temps de traitement entre une formule validée dans une cellule et tirée vers le bas et une formule validée une seule fois dans un champ.
Afin de vous rendre compte de la différence de temps de traitement entre les deux types de validation il est nécessaire de respecter le protocole suivant :
- ne tester qu'une formule à la fois
- la tester sur une plage de longueur équivalente : dans le classeur test la plage est de 100 cellules
- amusez-vous à ajouter puis supprimer des noms qui ne sont pas déjà présents dans la plage pour visualiser la vitesse de traitement de la formule.
NB : sur 100 cellules la différence est déjà visible (surtout concernant la comparaison entre les deux formules traitant du tri sans doublon par ordre alphanumérique) mais amusez-vous à tester sur des plages plus importantes...
Bien entendu il va sans dire qu'au-delà d'un certain seuil le recours au tri VBA est vivement recommandé mais la possibilité de valider une formule matricielle directement dans un champ m'apparaît être une solution à creuser.
Ces deux classeurs sont au format .xlsx car les formules utilisées ne peuvent être lues (et donc étudiées pour ceux et celles que cela intéresse) en l'état au format xls.
Pour ceux qui veulent les utiliser dans un classeur au format .xls il est bien entendu possible de nommer certaines parties des formules (si certains sont intéressés qu'ils le disent et je fournirai un classeur au format .xls).
Si vous avez des questions n'hésitez pas !
A+
Pièces jointes
Dernière édition: