[Catégorie modifiée VB6 -> VBA] Macro compter les valeurs distinctes

CartmanRRCN Messages postés 5 Date d'inscription mercredi 18 mai 2011 Statut Membre Dernière intervention 20 mai 2011 - 18 mai 2011 à 15:35
CartmanRRCN Messages postés 5 Date d'inscription mercredi 18 mai 2011 Statut Membre Dernière intervention 20 mai 2011 - 20 mai 2011 à 17:01
Bonjour,
Je début en VB6 et je souhaiterais utilisé une macro VBA me permettant de compter le nombre de références différentes sur une plage.

N'ayant pas trouvé de "macro simple" pour le faire, je souhaite utiliser la fonction suivante :
SOMMEPROD(1/NB.SI(D2:D11;D2:D11))

transformé en VBA cela donne :

nbritem = Application.WorksheetFunction.SumProduct(1 / Application.WorksheetFunction.CountIf("D2:D12", "D2:D12"))



Sauf qu'un message d'erreur apparait : "Erreur de compilation : incompatibilité de type"
quelqu'un peut m'aider ?!

Merci d'avance

5 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
18 mai 2011 à 17:42
Salut

Le VBA est du VBA.
VB6 est un langage très ressemblant (un frère), mais représente un logiciel à part entière.

Quelle version de Excel (supposition) ?

Il faudrait que tu saches laquelle des deux fonction renvoie ce message : SumProduct ou CountIf
donc, décomposer ces calculs dans des variables temporaires.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
CartmanRRCN Messages postés 5 Date d'inscription mercredi 18 mai 2011 Statut Membre Dernière intervention 20 mai 2011
18 mai 2011 à 19:02
Merci Jack pour ta réponse,
désoler je n'avais pas saisi la subtilité
Comme tu l'as supposé j'utilise excel (2003)

je regarde demain pour décomposer les 2 fonctions
CartmanRRCN Messages postés 5 Date d'inscription mercredi 18 mai 2011 Statut Membre Dernière intervention 20 mai 2011
20 mai 2011 à 16:07
Sub nombre_item()

Dim inter As Integer
inter = 0
For i = 2 To 10
inter = Application.WorksheetFunction.CountIf("D2:D10", "D" & i)
nbritem = nbritem + inter
Next i

nbritem = inter
End Sub


j'ai réécris ma fonction un peu différemment et elle bloque à la déclaration de la plage "D2:D10" je ne comprends pas pourquoi ...
CartmanRRCN Messages postés 5 Date d'inscription mercredi 18 mai 2011 Statut Membre Dernière intervention 20 mai 2011
20 mai 2011 à 16:46
j'ai trouvé une alternative qui fonctionne pour ceux que ca interesse :

Sub nombre_item()
Dim inter As Integer
Dim Z1 As Range

'initialisation 
inter = 0
nbritem = 0
' définition de la plage
Set Z1 = Range("D2:D10")
'boucle de comptage des refs différentes
For i = 2 To 10
    inter = 1 / WorksheetFunction.CountIf(Z1, Worksheets("Données Détaillées").Range("D" & i).Value)
    nbritem = nbritem + inter
Next i
End Sub


il suffit ensuite de rajouter un test sur "Worksheets("Données Détaillées").Range("D" & i).Value" pour ceux qui ont des cellules vide dans la plage

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
CartmanRRCN Messages postés 5 Date d'inscription mercredi 18 mai 2011 Statut Membre Dernière intervention 20 mai 2011
20 mai 2011 à 17:01
une petite erreur s'est glissée :
Sub nombre_item()
Dim inter As [b]Single
/bDim Z1 As Range

'initialisation 
inter = 0
nbritem = 0
' définition de la plage
Set Z1 = Range("D2:D10")
'boucle de comptage des refs différentes
For i = 2 To 10
    inter = inter + (1 / WorksheetFunction.CountIf(Z1, Worksheets("Données Détaillées").Range("D" & i).Value))
Next i
End Sub
Rejoignez-nous