|
|
|
|
Configuration: Windows XP Firefox 2.0.0.8
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:
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,
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 |
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 |
|
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 |
Bonjour,
Merci beaucoup eriiic, la formule convient parfaitement Cordialement linette44 |
Résultats pour VBA Excel compter nbre valeur différente
Résultats pour VBA Excel compter nbre valeur différente