(RÉSOLU) Par ordre alphabétique

  • Initiateur de la discussion Initiateur de la discussion Clochard
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Clochard

XLDnaute Impliqué
Bonjour le Forum,

J'aimerais bien savoir de votre part... s'il m'est possible d'ajouter un petit quelque chose à ma formule, afin que le classement se fasse par ordre alphabétique...

Merci beaucoup d'y regarder

Bonne journée
Clochard
 

Pièces jointes

Dernière édition:
Re : Par ordre alphabétique

Bonjour

Si c'est cela, il faut mieux travailler avec des plages dynamiques. Cf. les définitions des noms plage et plage1 dans le fichier ci-joint. Cela ne fonctionne bien que si les blancs se trouvent à la fin de la plage en colonne H. Il me semble que les calculs se font plus vite en colonne E.

Le mieux serait, à mon avis, de travailler avec les propositions de J. Boisgontier, les miennes demandant trop de temps de calcul.

@ plus
 

Pièces jointes

Re : Par ordre alphabétique

Merci beaucoup Cisco...

Ça fonctionne très bien avec un nom de plage....
Merci...

J'ai travaillé avec la super formule de Mr Boisgontier... mais j'ai un peu de difficulté avec une matrice... (mettre en forme... modifier etc....) pourtant j'essaie fort...

Bonne journée

Clochard
 
Re : Par ordre alphabétique

Bonjour à tous,

la formule proposée par Jacques fonctionne avec ou sans cellule vide.

@Cisco : concernant ton message #11 les formules que tu utilises ne permettent pas de les adapter : soit pour éliminer les doublons on utilise
Code:
NB.SI(Plage;Critère)=0
soit
Code:
EQUIV(champ;champ;0)=LIGNE(INDIRECT("1:"&LIGNES(champ)))

Le fait d'utiliser NB.SI(Plage;Critère)=0 oblige de fait un re calcul de chaque cellule par rapport au contenu des cellules précédentes alors qu'avec l'autre syntaxe tu évites cela.

NB.SI(A2:A3;champ)=0 compare la matrice A2:A3 à la matrice champ puis à la ligne suivante NB.SI(A2:A4;champ)=0 compare la matrice A2:A4 à la matrice champ et ainsi de suite, d'où le temps de calcul très important induit par cette syntaxe puisque cette comparaison est effectuée à chaque cellule (la formule étant tirée vers le bas).

Par contre la syntaxe
Code:
EQUIV(champ;champ;0)=LIGNE(INDIRECT("1:"&LIGNES(champ)))
permet un traitement de 2 matrices de taille équivalente en une seule fois, d'où le gain de temps constaté.

Pour cacher les valeurs d'erreurs on pourrait se passer d'une MFC mais cela rallongerait la formule donc autant utiliser une MFC.

Personnellement il m'arrive de l'utiliser sur une matrice pouvant aller jusqu'à 1000 cellules sur des fichiers sans VBA.
Au-delà je ne me pose pas la question et passe par VBA.

Les fonctions personnalisées proposées par Jacques et basées sur l'utilisation de l'object Dictionary sont très rapides.

A+
 
Re : Par ordre alphabétique

@Cisco : concernant ton message #11 les formules que tu utilises ne permettent pas de les adapter :
Dommage. J'espérai l'existence d'une syntaxe particulière permettant de transformer, à tous les coups, une formule matricielle à copier-coller vers le bas ou vers la droite, en formule matricielle à valider sur une plage présélectionnée. J'espérai...

Le fait d'utiliser NB.SI(Plage;Critère)=0 oblige de fait un re calcul de chaque cellule par rapport au contenu des cellules précédentes alors qu'avec l'autre syntaxe tu évites cela. A+

Et voui. Et ça rame...

Merci et au plaisir

@ plus
 
Re : (RÉSOLU) Par ordre alphabétique

Dommage. J'espérai l'existence d'une syntaxe particulière permettant de transformer, à tous les coups, une formule matricielle à copier-coller vers le bas ou vers la droite, en formule matricielle à valider sur une plage présélectionnée. J'espérai...
Sur le principe c'est possible à partir du moment où tu utilises la syntaxe
Code:
EQUIV(champ;champ;0)=LIGNE(INDIRECT("1:"&LIGNES(champ)))
en l'adaptant et que tu traites une plage de plusieurs lignes sur une colonne ou de plusieurs colonnes sur une ligne.

Par contre dès que tu passes sur un traitement Multicolonne et multiligne : utiliser
Code:
NB.SI(Plage;Critère)=0

A+
 
Re : (RÉSOLU) Par ordre alphabétique

Rebonjour David84

Et pas moyen de trouver un équivalent à *(H$6:H$280>E5) ?

@ plus

Si je comprends bien ta formule ce n'est pas que cette partie-là qui pose problème mais l'ensemble de ta condition
Code:
MAX((NB.SI(H$6:H$280;">"&H$6:H$280)*(H$6:H$280>E8)))
puisque tu recherches à chaque ligne le MAX(NB.SI(H$6:H$280)) de la plage H$6:H$280 qui ne soit pas déjà présent dans les valeurs déjà trouvées en E5:E7.

Alors qu'avec la condition
Code:
SI(EQUIV(H$6:H$280;H$6:H$280;0)=LIGNE(INDIRECT("1:"&LIGNES(H$6:H$280)));NB.SI(H$6:H$280;">"&H$6:H$280))
tu n'as plus ce problème.
En utilisant ensuite cette condition avec GRANDE.VALEUR tu traites la matrice en une seule fois :
Code:
GRANDE.VALEUR(SI(EQUIV(H$6:H$280;H$6:H$280;0)=LIGNE(INDIRECT("1:"&LIGNES(H$6:H$280)));NB.SI(H$6:H$280;">"&H$6:H$280));LIGNE(INDIRECT("1:"&LIGNES(H$6:H$280))))

A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour