XL 2013 Incrémenter si doublon dans une colonne

ziska

XLDnaute Nouveau
Bonjour,
J'ai effectué des index(equiv()) afin de pouvoir trouver la valeur approchée correspondant à celle cherchée.
Seulement, je souhaiterai pouvoir incrémenter de +1 mon numéro de ligne lorsque index(equiv()) me trouve une valeur déjà trouvée en haut de la colonne.
Et ainsi de suite (incrémentation de +1) jusqu'à ce que la valeur soit unique dans la colonne.

Demande supplémentaire : l'incrémentation de 1 ou la décrémentation de 1 doit se faire du moment que l'on reste dans la même allée (voir les onglets).


Ci dessous le lien du fichier :
Document Cjoint
merci d'avance pour votre précieuse aide,

@CISCO : j'ai pris note de ton message.
 

Pièces jointes

  • Pb2.xlsx
    38.9 KB · Affichages: 34
  • Pb2.xlsx
    38.9 KB · Affichages: 27
Dernière modification par un modérateur:

ziska

XLDnaute Nouveau
Re : Incrémenter si doublon dans une colonne

salut !

merci pour ta réponse,

je ne suis pas sur d'avoir été bien clair dans mes propos, je m'excuse.

le but de toute la manoeuvre en fait est de pouvoir n'avoir que des valeurs uniques dans la colonne I.

C'est à dire, de ne pas avoir de même valeur dans deux cellulles de la même colonne I.

Mais cette règle doit s'appliquer en respectant ceci :
1) Pour qu'Excel garde des valeurs uniques, alors il doit prendre la valeur issue de index(equiv()) SUIVANTE, d'où l'incrémentation de +1.
 

CISCO

XLDnaute Barbatruc
Re : Incrémenter si doublon dans une colonne

Bonsoir

Pour commencer, tu peux faire beaucoup plus simple en F2 avec
Code:
=SIERREUR(SI(D2=1;"";INDEX(INDIRECT("'"&C2&" EV'!A:F");EQUIV(E2;INDIRECT("'"&C2&" EV'!A:A");1);6));"")

@ plus
 

ziska

XLDnaute Nouveau
Re : Incrémenter si doublon dans une colonne

salut et merci pour ta réponse,

j'ai mis un fichier contenant les résultats à avoir dans ce message pour t'éclaire peut être un peu plus...

merci encore
 

Pièces jointes

  • Solutions.xlsx
    33.6 KB · Affichages: 33

CISCO

XLDnaute Barbatruc
Re : Incrémenter si doublon dans une colonne

Bonsoir

Cf. en pièce jointe, en colonne G, une solution avec une formule matricielle à valider avec Ctrl+maj+entrer. Cf. aussi dans le gestionnaire de noms la définition de "plage".

@ plus
 

Pièces jointes

  • Solutions2.xlsx
    37.6 KB · Affichages: 41

ziska

XLDnaute Nouveau
Re : Incrémenter si doublon dans une colonne

salut,

mon respect le plus éternel o grand cisco !

et moi qui croyais qu'on aurait eu besoin de vba ...

je suis toujours en train d'essayer de comprendre ta formule mais ça fonctionne impeccablement, c'est ce que je cherchais.

merci grand chef !
 

CISCO

XLDnaute Barbatruc
Re : Incrémenter si doublon dans une colonne

Bonjour

En simplifiant, dans G2, pour ce qui est de plage :
Code:
DECALER(INDIRECT("'"&$C2&" EV'!F1");EQUIV($E2;INDIRECT("'"&$C2&" EV'!A:A");1)-1;;NBVAL(INDIRECT("'"&$C2&" EV'!A:A"))-EQUIV(DPP!$E2;INDIRECT("'"&$C2&" EV'!A:A");1)+1)
plage garde en mémoire
* le bas de la colonne F, dans la bonne feuille (à cause de INDIRECT("'"&$C2&" EV'!F1")) (On aurait pu faire plus simple, sans le "'"&, si le nom de tes onglets ne comportait pas d'espace. Ici, cela ne fonctionne bien que parce que tes trois onglets ont des noms semblables, construits de la même manière, une lettre puis un espace puis EV),
* à partir du code le plus proche (trouvé avec EQUIV($E2;INDIRECT("'"&$C2&" EV'!A:A");1)) (c'est la méthode que tu avais utilisée dans ta formule, mais en traitant chaque cas séparément, SI(C2="A"...., SI(C2="B"...., SI(C2="C"......)))),
* et la partie NBVAL(INDIRECT("'"&$C2&" EV'!A:A"))-EQUIV(DPP!$E2;INDIRECT("'"&$C2&" EV'!A:A");1)+1 permet juste de ne pas prendre une plage arbitrairement plus grande ou plus petite que nécessaire (On aurait pu mettre un grand nombre à la place de cette dernière partie, 1000 par ex, si ton fichier comporte moins de 1000 lignes).

Pour "voir" cette plage, tu cliques sur "Gestionnaire de noms", puis sur "plage", puis sur sa définition en bas, et la plage est entourée automatiquement par des pointillets.

Pour ce qui est de la formule dans G2 :
Code:
=SIERREUR(SI($D2=1;"";INDEX(INDIRECT("'"&C2&" EV'!A:F");MIN(SI(NB.SI($G$1:G1;plage)=0;LIGNE(plage)));6));"")
INDIRECT("'"&C2&" EV'!A:F") cible la plage A:F dans la bonne feuille (& remplace CONCATENER)
NB.SI($G$1:G1;plage)=0 compare le contenu de la plage à G1 et renvoie VRAI pour chaque élément de la plage différent de G1 (donc pour chaque emplacement pas encore utilisé dans le haut de la colonne G)
SI(NB.SI($G$1:G1;plage)=0;LIGNE(plage)) renvoie le n° des lignes de plage contenant des emplacements pas encore utilisés, différents du haut de la colonne G.
MIN(SI(NB.SI($G$1:G1;plage)=0;LIGNE(plage))) garde en mémoire le premier de ces n° de lignes contenant des emplacements pas encore utilisés.
Et finalement
INDEX(INDIRECT("'"&C2&" EV'!A:F");MIN(SI(NB.SI($G$1:G1;plage)=0;LIGNE(plage)));6)) renvoie le contenu de la colonne F dans la bonne feuille sur la première ligne de plage contenant un emplacement pas encore utilisés.

En G3, la partie SI(NB.SI($G$1:G1;plage)=0 devient SI(NB.SI($G$1:G2;plage)=0. Ainsi la comparaison est faite par rapport à G1 et G2.

En G10, cette partie donne SI(NB.SI($G$1:G9;plage)=0. La comparaison est donc faite par rapport à G1, G2, G3, G4, G5, G6, G7, G8 et G9.

On aurait aussi pu faire avec F:F au lieu de A:F, et sans le 6 final.
Code:
=SIERREUR(SI($D2=1;"";INDEX(INDIRECT("'"&C2&" EV'!F:F");MIN(SI(NB.SI($G$1:G1;plage)=0;LIGNE(plage)))));"")

@ plus

PS : J'ai aussi essayé de faire comme tu le proposais, en incrémentant, avec plein de SI. Le pb, c'était d'avoir une formule vraiment polyvalente : Jusqu'à combien fallait-il incrémenter, 5 dans ton exemple, mais peut être 6, 7 ou 8 dans un autre, puisqu'on ne sait pas où se trouve dans la colonne F le prochain emplacement pas encore utilisé.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 488
Messages
2 088 843
Membres
103 972
dernier inscrit
steeter