VBA Excel compter nbre valeur différente
Résolu/Fermé
linette44
Messages postés
23
Date d'inscription
dimanche 1 avril 2007
Statut
Membre
Dernière intervention
20 mai 2008
-
31 oct. 2007 à 15:23
Fred - 6 août 2014 à 09:10
Fred - 6 août 2014 à 09:10
A voir également:
- Vba compter le nombre de cellule contenant une valeur
- Excel compter cellule couleur sans vba - Guide
- Aller à la ligne dans une cellule excel - Guide
- Excel cellule couleur si condition texte - Guide
- Excel compter le nombre de cellule contenant le même texte - Guide
- Proteger cellule excel - Guide
5 réponses
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 257
1 nov. 2007 à 00:45
1 nov. 2007 à 00:45
Bonsoir,
Un code VBA absolument ? Sinon une autre solution par formule:
en B2: =1/NB.SI($A$2:$A$6;A2) à recopier vers le bas
en A1: =SOMME(B2:B6) => 3
ou bien seulement en A1: {=SOMME(1/NB.SI(A2:A6;A2:A6))} à valider par SHIFT+Ctrl+Entrée
eric
Un code VBA absolument ? Sinon une autre solution par formule:
en B2: =1/NB.SI($A$2:$A$6;A2) à recopier vers le bas
en A1: =SOMME(B2:B6) => 3
ou bien seulement en A1: {=SOMME(1/NB.SI(A2:A6;A2:A6))} à valider par SHIFT+Ctrl+Entrée
eric
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 257
1 nov. 2007 à 22:01
1 nov. 2007 à 22:01
Re,
Déjà pour la dernière solution il ne faut pas saisie les { }, excel les rajoute si tu fais bien le shift+ctrl+enter.
Reste sur la 1ère à ce moment là et remplace par:
=SI(A2="";"";1/NB.SI($A$2:$A$30;A2))
eric
Déjà pour la dernière solution il ne faut pas saisie les { }, excel les rajoute si tu fais bien le shift+ctrl+enter.
Reste sur la 1ère à ce moment là et remplace par:
=SI(A2="";"";1/NB.SI($A$2:$A$30;A2))
eric
aminea
Messages postés
2
Date d'inscription
vendredi 28 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2007
1
31 oct. 2007 à 23:57
31 oct. 2007 à 23:57
Bonjour linette44,
Voici une solution possibe:
- Tu crée un tableau dans lequel tu mets les valeurs de ta colonne
- Tu classe les éléments de ce tableau par ordre croissant
- Tu met un compteur qui parcourt le tableau et qui s'incrémente à chaque fois qu'il trouve deux cases successives de valeurs différentes.
Voici le code correspondant:
Voici une solution possibe:
- Tu crée un tableau dans lequel tu mets les valeurs de ta colonne
- Tu classe les éléments de ce tableau par ordre croissant
- Tu met un compteur qui parcourt le tableau et qui s'incrémente à chaque fois qu'il trouve deux cases successives de valeurs différentes.
Voici le code correspondant:
Sub nombreValeurs() 'Tu crée un tableau où tu va mettre les valeurs de ta colonne Dim monTableau(5) As String 'tu mets la taille de ton tableau Dim i, j, n As Integer Dim myRange As Range Dim R As Range i = 0 j = 0 k = 0 n = 1 Set myRange = Range("A2:A6") For Each R In myRange If R.Value <> "" Then '(non vides) monTableau(k) = R.Value k = k + 1 End If Next R ' Tri croissant du tableau Dim str As String For i = 0 To UBound(monTableau) - 2 For j = i + 1 To UBound(monTableau) - 1 If monTableau(i) > monTableau(j) Then str = monTableau(i) monTableau(i) = monTableau(j) monTableau(j) = str End If Next j Next i 'Calcul de n, le nombre de valeurs For i = 0 To UBound(monTableau) - 2 If monTableau(i) <> monTableau(i + 1) Then n = n + 1 End If Next i ActiveSheet.Range("A1") = n End Sub
Bonsoir,
Merci pour tes réponses.
Le fait d'être obligé de créer un tableau avec le code VBA ne m'arrange pas vraiment.
Je vais donc plutôt partir sur les formules.
J'ai testé la 1ère solution avec une formule en B2 et 1 en A1. Cela fonctionne.
Le problème c'est que les données dans la colonne A peuvent varier, de A1 à A30 par exemple. Quand je tire la formule de B2 jusqu'à B30, j'ai un #DIV/0! pour les cellules non renseignées en A et quand je demande la somme en A1, j'ai un #DIV/0! également. Peut-on empêcher ce genre de chose ?
J'ai voulu tester la dernière solution A1: {=SOMME(1/NB.SI(A2:A6;A2:A6))} à valider par SHIFT+Ctrl+Entrée mais je ne dois pas savoir faire. J'ai saisi la formule ci-dessus après la saisie j'ai appuyé sur SHIFT+Ctrl+Entrée en même temps et rien. Peux-tu me dire pourquoi une parenthèse devant la formule et crois-tu que je peux intégrer la validation dans un code VBA ?
Cordialement
linette44
Merci pour tes réponses.
Le fait d'être obligé de créer un tableau avec le code VBA ne m'arrange pas vraiment.
Je vais donc plutôt partir sur les formules.
J'ai testé la 1ère solution avec une formule en B2 et 1 en A1. Cela fonctionne.
Le problème c'est que les données dans la colonne A peuvent varier, de A1 à A30 par exemple. Quand je tire la formule de B2 jusqu'à B30, j'ai un #DIV/0! pour les cellules non renseignées en A et quand je demande la somme en A1, j'ai un #DIV/0! également. Peut-on empêcher ce genre de chose ?
J'ai voulu tester la dernière solution A1: {=SOMME(1/NB.SI(A2:A6;A2:A6))} à valider par SHIFT+Ctrl+Entrée mais je ne dois pas savoir faire. J'ai saisi la formule ci-dessus après la saisie j'ai appuyé sur SHIFT+Ctrl+Entrée en même temps et rien. Peux-tu me dire pourquoi une parenthèse devant la formule et crois-tu que je peux intégrer la validation dans un code VBA ?
Cordialement
linette44
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
16 mars 2009 à 10:26
Je voulais te demander comment tu as fait pour sortir la formule pour compter des valeurs différentes dans un excel!!
Tu m'as vraiment impressionné!
Si ça ne te dérange pas, pourrais tu m'expliquer la formule...
Je ne comprend pas ce que fait la formule 1/NB.SI(MA PLAGE:MA PLAGE), ainsi que la SOMME en terme de matrice...
Je te remercie d'avance.
Bonne journée.
16 mars 2009 à 11:06
il s'agit plus d'une astuce mathématique qu'une astuce excel.
Le but est que si une entrée est présente x fois elle compte pour x fois moins, ce que fait 1/x.
Par exemple si entrée présente 2 fois (donné par le nb.si()) chaque entrée aura un poids de 1/2 (somme=1), 3 fois => 1/3 (somme=1), etc. Soit 1 pour la somme de chaque entrée différente.
Il ne reste plus qu'à faire la somme des 1/x pour avoir le nombre d'entrées.
D'où la formule :
=SOMME(1/NB.SI(A2:A6;A2:A6))
qu'il faut valider en matriciel car certaines fonctions excel ne sont pas matricielles par défaut.
C'est éclairci ?
eric
16 mars 2009 à 15:19
Je te remercie pour ta réponse, continue comme ça!
Bonne journée,
Cordialement.
6 août 2014 à 09:10