(RÉSOLU) Par ordre alphabétique

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

  • Clochard.xls
    53 KB · Affichages: 99
  • Clochard.xls
    53 KB · Affichages: 79
Dernière édition:

CISCO

XLDnaute Barbatruc
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

  • Clochard-1.xls
    67 KB · Affichages: 44
  • Clochard-1.xls
    67 KB · Affichages: 52

Clochard

XLDnaute Impliqué
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
 

david84

XLDnaute Barbatruc
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+
 

CISCO

XLDnaute Barbatruc
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
 

david84

XLDnaute Barbatruc
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+
 

david84

XLDnaute Barbatruc
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+
 

Discussions similaires

Statistiques des forums

Discussions
312 485
Messages
2 088 805
Membres
103 971
dernier inscrit
abdazee