OVH Cloud OVH Cloud

Liste de valeurs

6 réponses
Avatar
Dominique GOUBY
Soit une liste:
C
D
X
A
A
X
D
X
Je voudrais la (les) formule(s) qui me dénombre(nt) ces valeurs sous la
forme:
COLONNE A COLONNE B
2 A
1 C
2 D
3 X

Quelqu'un a une idée ?

6 réponses

Avatar
Ricky [MVP]
Bonjour *Dominique GOUBY* (et tous les lecteurs)
| Soit une liste:
| C
| D
| X
| A
| A
| X
| D
| X
| Je voudrais la (les) formule(s) qui me dénombre(nt) ces valeurs sous
| la forme:
| COLONNE A COLONNE B
| 2 A
| 1 C
| 2 D
| 3 X
|
| Quelqu'un a une idée ?

Données / Rapport de tableau croisé dynamique
Un titre à la colonne que tu placeras dans la zodne données du tableau
Double clic sur l'en-tête du tableau qui affichera le détail classé et
même le nombre total de valeurs.


--
Ricky [MVP] Visitez les faq....
http://www.faqoe.com http://faq.ms.word.free.fr
http://dj.joss.free.fr/faq.htm http://www.excelabo.net
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
Avatar
Dominique GOUBY
Merci pour la réponse.
Mais je ne souhaite pas dans mon cas utiliser un TCD
Pour préciser, les valeurs sont disposées horizontalement
à l'intérieur d'un tableau et non pas sous forme de liste de données.
Y'at-il un autre moyen ?
DG

"Ricky [MVP]" a écrit dans le message de
news:%
Bonjour *Dominique GOUBY* (et tous les lecteurs)
| Soit une liste:
| C
| D
| X
| A
| A
| X
| D
| X
| Je voudrais la (les) formule(s) qui me dénombre(nt) ces valeurs sous
| la forme:
| COLONNE A COLONNE B
| 2 A
| 1 C
| 2 D
| 3 X
|
| Quelqu'un a une idée ?

Données / Rapport de tableau croisé dynamique
Un titre à la colonne que tu placeras dans la zodne données du tableau
Double clic sur l'en-tête du tableau qui affichera le détail classé et
même le nombre total de valeurs.


--
Ricky [MVP] Visitez les faq....
http://www.faqoe.com http://faq.ms.word.free.fr
http://dj.joss.free.fr/faq.htm http://www.excelabo.net
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm



Avatar
AV
Y'at-il un autre moyen ?
** Allons-y !

Pour préciser, les valeurs sont disposées horizontalement


Soit ta liste (C;D;...X) en A1:H1 - Plage nommée "zz"
Sélection PREALABLE de B3:B10 (matrice en ligne - autant de lignes que de
colonnes de la plage "zz")
=SI(ESTNUM(PETITE.VALEUR(SI(EQUIV(TRANSPOSE(zz);TRANSPOSE(zz);0)=LIGNE(INDIRECT(
"1:"&LIGNES(TRANSPOSE(zz))));EQUIV(TRANSPOSE(zz);TRANSPOSE(zz);0);"");LIGNE(INDI
RECT("1:"&LIGNES(TRANSPOSE(zz))))));INDEX(zz;PETITE.VALEUR(SI(EQUIV(TRANSPOSE(zz
);TRANSPOSE(zz);0)=LIGNE(INDIRECT("1:"&LIGNES(TRANSPOSE(zz))));EQUIV(TRANSPOSE(z
z);TRANSPOSE(zz);0);"");LIGNE(INDIRECT("1:"&LIGNES(TRANSPOSE(zz))))));"")
Validation Matricielle par Ctrl+Maj+Entrée
En A3 et recopie --> A10
=SI(B3="";"";NB.SI(zz;B3))

Si tu veux raccourcir la formule :
Insertion > Nom > Nom dans le classeur : "test" > fait référence à :
=ESTNUM(PETITE.VALEUR(SI(EQUIV(TRANSPOSE(zz);TRANSPOSE(zz);0)=LIGNE(INDIRECT("1:
"&LIGNES(TRANSPOSE(zz))));EQUIV(TRANSPOSE(zz);TRANSPOSE(zz);0);"");LIGNE(INDIREC
T("1:"&LIGNES(TRANSPOSE(zz))))))
La formule B3:B10 devient :
=SI(test;INDEX(zz;PETITE.VALEUR(SI(EQUIV(TRANSPOSE(zz);TRANSPOSE(zz);0)=LIGNE(IN
DIRECT("1:"&LIGNES(TRANSPOSE(zz))));EQUIV(TRANSPOSE(zz);TRANSPOSE(zz);0);"");LIG
NE(INDIRECT("1:"&LIGNES(TRANSPOSE(zz))))));"")

Une macro serait bcp plus souple d'utilisation !
Avec tes données en ligne 1 - Plage nommée "zz" - Pas de données "en-dessous" -
La feuille est active

Sub zz_Transpose_Uniq()
Application.ScreenUpdating = False
Range("zz").Copy
[A4].PasteSpecial , Transpose:=True
[A3] = "Val Uniq"
Set plg = Range("A3", [A65536].End(3))
plg.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=[B3], Unique:=True
plg.Clear
[B3].Sort Key1:=[B3], Order1:=xlAscending, Header:=xlYes
[A3] = "Nbre"
x = [B65536].End(3).Row
Range("A4:A" & x) = "=countif(zz,B4)"
Range("A4:A" & x) = (Range("A4:A" & x))
[A3].Select
End Sub

AV

Avatar
Dominique GOUBY
Je prends la macro et je te tire mon chapeau
Je vais essayer de comprendre ces lignes

x = [B65536].End(3).Row
Range("A4:A" & x) = "=countif(zz,B4)"
Range("A4:A" & x) = (Range("A4:A" & x))

Encore Merci

Dominique GOUBY

"AV" a écrit dans le message de
news:%
Y'at-il un autre moyen ?
** Allons-y !

Pour préciser, les valeurs sont disposées horizontalement


Soit ta liste (C;D;...X) en A1:H1 - Plage nommée "zz"
Sélection PREALABLE de B3:B10 (matrice en ligne - autant de lignes que de
colonnes de la plage "zz")

=SI(ESTNUM(PETITE.VALEUR(SI(EQUIV(TRANSPOSE(zz);TRANSPOSE(zz);0)=LIGNE(INDIR

ECT(

"1:"&LIGNES(TRANSPOSE(zz))));EQUIV(TRANSPOSE(zz);TRANSPOSE(zz);0);"");LIGNE(

INDI

RECT("1:"&LIGNES(TRANSPOSE(zz))))));INDEX(zz;PETITE.VALEUR(SI(EQUIV(TRANSPOS

E(zz
);TRANSPOSE(zz);0)=LIGNE(INDIRECT("1:"&LIGNES(TRANSPOSE(zz))));EQUIV(TRANS
POSE(z

z);TRANSPOSE(zz);0);"");LIGNE(INDIRECT("1:"&LIGNES(TRANSPOSE(zz))))));"")
Validation Matricielle par Ctrl+Maj+Entrée
En A3 et recopie --> A10
=SI(B3="";"";NB.SI(zz;B3))

Si tu veux raccourcir la formule :
Insertion > Nom > Nom dans le classeur : "test" > fait référence à :

=ESTNUM(PETITE.VALEUR(SI(EQUIV(TRANSPOSE(zz);TRANSPOSE(zz);0)=LIGNE(INDIRECT

("1:

"&LIGNES(TRANSPOSE(zz))));EQUIV(TRANSPOSE(zz);TRANSPOSE(zz);0);"");LIGNE(IND

IREC
T("1:"&LIGNES(TRANSPOSE(zz))))))
La formule B3:B10 devient :

=SI(test;INDEX(zz;PETITE.VALEUR(SI(EQUIV(TRANSPOSE(zz);TRANSPOSE(zz);0)=LIGN

E(IN

DIRECT("1:"&LIGNES(TRANSPOSE(zz))));EQUIV(TRANSPOSE(zz);TRANSPOSE(zz);0);"")

;LIG
NE(INDIRECT("1:"&LIGNES(TRANSPOSE(zz))))));"")

Une macro serait bcp plus souple d'utilisation !
Avec tes données en ligne 1 - Plage nommée "zz" - Pas de données
"en-dessous" -

La feuille est active

Sub zz_Transpose_Uniq()
Application.ScreenUpdating = False
Range("zz").Copy
[A4].PasteSpecial , Transpose:=True
[A3] = "Val Uniq"
Set plg = Range("A3", [A65536].End(3))
plg.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=[B3],
Unique:=True

plg.Clear
[B3].Sort Key1:=[B3], Order1:=xlAscending, Header:=xlYes
[A3] = "Nbre"
x = [B65536].End(3).Row
Range("A4:A" & x) = "=countif(zz,B4)"
Range("A4:A" & x) = (Range("A4:A" & x))
[A3].Select
End Sub

AV





Avatar
Dominique GOUBY
Je prens la macro et je te tire mon chapeau

Encore merci

Dominique

"AV" a écrit dans le message de
news:%
Y'at-il un autre moyen ?
** Allons-y !

Pour préciser, les valeurs sont disposées horizontalement


Soit ta liste (C;D;...X) en A1:H1 - Plage nommée "zz"
Sélection PREALABLE de B3:B10 (matrice en ligne - autant de lignes que de
colonnes de la plage "zz")

=SI(ESTNUM(PETITE.VALEUR(SI(EQUIV(TRANSPOSE(zz);TRANSPOSE(zz);0)=LIGNE(INDIR

ECT(

"1:"&LIGNES(TRANSPOSE(zz))));EQUIV(TRANSPOSE(zz);TRANSPOSE(zz);0);"");LIGNE(

INDI

RECT("1:"&LIGNES(TRANSPOSE(zz))))));INDEX(zz;PETITE.VALEUR(SI(EQUIV(TRANSPOS

E(zz
);TRANSPOSE(zz);0)=LIGNE(INDIRECT("1:"&LIGNES(TRANSPOSE(zz))));EQUIV(TRANS
POSE(z

z);TRANSPOSE(zz);0);"");LIGNE(INDIRECT("1:"&LIGNES(TRANSPOSE(zz))))));"")
Validation Matricielle par Ctrl+Maj+Entrée
En A3 et recopie --> A10
=SI(B3="";"";NB.SI(zz;B3))

Si tu veux raccourcir la formule :
Insertion > Nom > Nom dans le classeur : "test" > fait référence à :

=ESTNUM(PETITE.VALEUR(SI(EQUIV(TRANSPOSE(zz);TRANSPOSE(zz);0)=LIGNE(INDIRECT

("1:

"&LIGNES(TRANSPOSE(zz))));EQUIV(TRANSPOSE(zz);TRANSPOSE(zz);0);"");LIGNE(IND

IREC
T("1:"&LIGNES(TRANSPOSE(zz))))))
La formule B3:B10 devient :

=SI(test;INDEX(zz;PETITE.VALEUR(SI(EQUIV(TRANSPOSE(zz);TRANSPOSE(zz);0)=LIGN

E(IN

DIRECT("1:"&LIGNES(TRANSPOSE(zz))));EQUIV(TRANSPOSE(zz);TRANSPOSE(zz);0);"")

;LIG
NE(INDIRECT("1:"&LIGNES(TRANSPOSE(zz))))));"")

Une macro serait bcp plus souple d'utilisation !
Avec tes données en ligne 1 - Plage nommée "zz" - Pas de données
"en-dessous" -

La feuille est active

Sub zz_Transpose_Uniq()
Application.ScreenUpdating = False
Range("zz").Copy
[A4].PasteSpecial , Transpose:=True
[A3] = "Val Uniq"
Set plg = Range("A3", [A65536].End(3))
plg.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=[B3],
Unique:=True

plg.Clear
[B3].Sort Key1:=[B3], Order1:=xlAscending, Header:=xlYes
[A3] = "Nbre"
x = [B65536].End(3).Row
Range("A4:A" & x) = "=countif(zz,B4)"
Range("A4:A" & x) = (Range("A4:A" & x))
[A3].Select
End Sub

AV





Avatar
AV
Je prends la macro et je te tire mon chapeau
Garde le (chapeau) !

Avec la "caillante" qui se prépare, mieux vaut ne pas prendre de risques
inutiles ;-)

Je vais essayer de comprendre ces lignes

x = [B65536].End(3).Row
** Raccourci syntaxique pour :

Range("B65536").End(xlUp).Row
Permet, en partant du bas de la colonne B, de trouver l'index
de la dernière ligne renseignée

Range("A4:A" & x) = "=countif(zz,B4)"
** Ecrit dans la plage A4:Ax la formule :

=NB.SI(zz;B4)
qui permet de compter, pour chacune des valeurs de B4:Bx
le nbre de fois où elle est présente dans la plage "zz"
(la référence B4 étant relative, elle est incrémentée de 1 à chaque
ligne)

Range("A4:A" & x) = (Range("A4:A" & x))
** Raccourci syntaxique pour :

Range("A4:A" & x).Value = Range("A4:A" & x).Value
C'est l'équivalent d'un copier/collage spécial > valeurs

AV