OVH Cloud OVH Cloud

Comment remplacer un dictionnaire ?

9 réponses
Avatar
garnote
Salut la compagnie,

Je commence à explorer CreateObject("Scripting.Dictionary")
suggéré par Daniel M. et ma foi, c'est assez tripatif !
Ma question est la suivante :
Comment obtenir le même résultat sans dictionnaire ?

Sub NombreDeValeursDistinctesDansUneSélectionDeCellules()
Dim d As Object
Set d = CreateObject("Scripting.Dictionary")
Set ici = Selection
For Each v In ici
If d.exists(v.Value) = False And v.Value <> "" Then
k = k + 1
d.Add v.Value, k
End If
Next
MsgBox "Nombre de valeurs distinctes : " & k, _
vbInformation, "En ne tenant pas compte des vides :"
End Sub

Serge

9 réponses

Avatar
Denis Michon
Bonjour Garnote,

Si la plage de cellules ne contient pas de cellules vides.
'-------------------------
Sub NombreTotal()

Selection.Name = "Nb"

msgbox "Nombrede valeurs distinctes : " & _
[sum(if(frequency(match(nb,nb,0),match(nb,nb,0))>0,1))]

End Sub
'-------------------------


Salutations!



"garnote" a écrit dans le message de news:zBlzb.2291$
Salut la compagnie,

Je commence à explorer CreateObject("Scripting.Dictionary")
suggéré par Daniel M. et ma foi, c'est assez tripatif !
Ma question est la suivante :
Comment obtenir le même résultat sans dictionnaire ?

Sub NombreDeValeursDistinctesDansUneSélectionDeCellules()
Dim d As Object
Set d = CreateObject("Scripting.Dictionary")
Set ici = Selection
For Each v In ici
If d.exists(v.Value) = False And v.Value <> "" Then
k = k + 1
d.Add v.Value, k
End If
Next
MsgBox "Nombre de valeurs distinctes : " & k, _
vbInformation, "En ne tenant pas compte des vides :"
End Sub

Serge
Avatar
garnote
Mon ordi me «répond» Incompatibilité de type !

Serge

"Denis Michon" <denis a écrit dans le message de news:
_rmzb.2294$
Bonjour Garnote,

Si la plage de cellules ne contient pas de cellules vides.
'-------------------------
Sub NombreTotal()

Selection.Name = "Nb"

msgbox "Nombrede valeurs distinctes : " & _
[sum(if(frequency(match(nb,nb,0),match(nb,nb,0))>0,1))]

End Sub
'-------------------------


Salutations!



"garnote" a écrit dans le message de
news:zBlzb.2291$

Salut la compagnie,

Je commence à explorer CreateObject("Scripting.Dictionary")
suggéré par Daniel M. et ma foi, c'est assez tripatif !
Ma question est la suivante :
Comment obtenir le même résultat sans dictionnaire ?

Sub NombreDeValeursDistinctesDansUneSélectionDeCellules()
Dim d As Object
Set d = CreateObject("Scripting.Dictionary")
Set ici = Selection
For Each v In ici
If d.exists(v.Value) = False And v.Value <> "" Then
k = k + 1
d.Add v.Value, k
End If
Next
MsgBox "Nombre de valeurs distinctes : " & k, _
vbInformation, "En ne tenant pas compte des vides :"
End Sub

Serge





Avatar
Denis Michon
Bonjour Garnote,

Tu dois sélectionner ta plage de cellule ou la définir

Selection.Name = "Nb"

OU

Worksheets("Feuil1").Range("a1:A10").Name = "Nb"


et cette formule digère mal si tu as des cellules vides à l'intérieur de la plage de cellules.
(pas faite pour)

L'autre alternative est de changer d'ordi !!! ;-))



Salutations!



"garnote" a écrit dans le message de news:zImzb.2295$
Mon ordi me «répond» Incompatibilité de type !

Serge

"Denis Michon" <denis a écrit dans le message de news:
_rmzb.2294$
Bonjour Garnote,

Si la plage de cellules ne contient pas de cellules vides.
'-------------------------
Sub NombreTotal()

Selection.Name = "Nb"

msgbox "Nombrede valeurs distinctes : " & _
[sum(if(frequency(match(nb,nb,0),match(nb,nb,0))>0,1))]

End Sub
'-------------------------


Salutations!



"garnote" a écrit dans le message de
news:zBlzb.2291$

Salut la compagnie,

Je commence à explorer CreateObject("Scripting.Dictionary")
suggéré par Daniel M. et ma foi, c'est assez tripatif !
Ma question est la suivante :
Comment obtenir le même résultat sans dictionnaire ?

Sub NombreDeValeursDistinctesDansUneSélectionDeCellules()
Dim d As Object
Set d = CreateObject("Scripting.Dictionary")
Set ici = Selection
For Each v In ici
If d.exists(v.Value) = False And v.Value <> "" Then
k = k + 1
d.Add v.Value, k
End If
Next
MsgBox "Nombre de valeurs distinctes : " & k, _
vbInformation, "En ne tenant pas compte des vides :"
End Sub

Serge





Avatar
Denis Michon
En supplément, la plage de cellules n'avait qu'une colonne ...sinon Match() va avoir des problèmes.

Le truc était seulement pour illustrer qu'avec des formules de la feuille de calcul, on peut obtenir rapidement ce que l'on
cherche en vba. Encore faut-il que la formule soit adaptée au besoin du moment.


Salutations!



"Denis Michon" <denis a écrit dans le message de news:wOmzb.2297$
Bonjour Garnote,

Tu dois sélectionner ta plage de cellule ou la définir

Selection.Name = "Nb"

OU

Worksheets("Feuil1").Range("a1:A10").Name = "Nb"


et cette formule digère mal si tu as des cellules vides à l'intérieur de la plage de cellules.
(pas faite pour)

L'autre alternative est de changer d'ordi !!! ;-))



Salutations!



"garnote" a écrit dans le message de news:zImzb.2295$
Mon ordi me «répond» Incompatibilité de type !

Serge

"Denis Michon" <denis a écrit dans le message de news:
_rmzb.2294$
Bonjour Garnote,

Si la plage de cellules ne contient pas de cellules vides.
'-------------------------
Sub NombreTotal()

Selection.Name = "Nb"

msgbox "Nombrede valeurs distinctes : " & _
[sum(if(frequency(match(nb,nb,0),match(nb,nb,0))>0,1))]

End Sub
'-------------------------


Salutations!



"garnote" a écrit dans le message de
news:zBlzb.2291$

Salut la compagnie,

Je commence à explorer CreateObject("Scripting.Dictionary")
suggéré par Daniel M. et ma foi, c'est assez tripatif !
Ma question est la suivante :
Comment obtenir le même résultat sans dictionnaire ?

Sub NombreDeValeursDistinctesDansUneSélectionDeCellules()
Dim d As Object
Set d = CreateObject("Scripting.Dictionary")
Set ici = Selection
For Each v In ici
If d.exists(v.Value) = False And v.Value <> "" Then
k = k + 1
d.Add v.Value, k
End If
Next
MsgBox "Nombre de valeurs distinctes : " & k, _
vbInformation, "En ne tenant pas compte des vides :"
End Sub

Serge





Avatar
Daniel.M
Salut Serge,

AMA, pour compter, il vaut mieux utiliser des formules.

Essaie cela (en ayant soin de remplacer Nb par une adresse de plage appropriée
si besoin est, j'ai gardé Nb de l'exemple de Denis) :

Evaluate("SUMPRODUCT((Nb<>"""")/(COUNTIF(Nb,Nb)+(Nb="""")))")

Salutations,

Daniel M.

"garnote" wrote in message
news:zBlzb.2291$
Salut la compagnie,

Je commence à explorer CreateObject("Scripting.Dictionary")
suggéré par Daniel M. et ma foi, c'est assez tripatif !
Ma question est la suivante :
Comment obtenir le même résultat sans dictionnaire ?

Sub NombreDeValeursDistinctesDansUneSélectionDeCellules()
Dim d As Object
Set d = CreateObject("Scripting.Dictionary")
Set ici = Selection
For Each v In ici
If d.exists(v.Value) = False And v.Value <> "" Then
k = k + 1
d.Add v.Value, k
End If
Next
MsgBox "Nombre de valeurs distinctes : " & k, _
vbInformation, "En ne tenant pas compte des vides :"
End Sub

Serge




Avatar
Michel Gaboly
Re, Serge

J'ai eu le même problème, la cause est peut-être identique, mais
ce n'est pas du tout sûr ;-((((

Pour tester, j'ai fait un Copier-Coller du code à partir de ton
message. J'ai récupéré ainsi des lignes commençant par ">", et
j'ai éliminé ce caractère par un "Remplacer", en choisissant "Tout".

Ce faisant, j'ai aussi éliminé un ">" dans la formule, ce qui a provoqué
le message d'erreur que tu cites.

Après correction, cela baigne ;-)))

Cependant, si tu es parti du message original et pas d'une reprise
d'un précédent, tu ne devrais pas avoir eu ces ">", sauf si cela varie
avec les lecteurs de News.

Personnellement, j'apporterais une petite modif au code en remplaçant
"nb" par "Qté", car NB() est une fonction de nombre de calcul et que je
préfère éviter pour les noms ce qui peut être confondu avec une référence
ou une fonction. Mais c'est un détail.



Mon ordi me «répond» Incompatibilité de type !

Serge

"Denis Michon" <denis a écrit dans le message de news:
_rmzb.2294$
Bonjour Garnote,

Si la plage de cellules ne contient pas de cellules vides.
'-------------------------
Sub NombreTotal()

Selection.Name = "Nb"

msgbox "Nombrede valeurs distinctes : " & _
[sum(if(frequency(match(nb,nb,0),match(nb,nb,0))>0,1))]

End Sub
'-------------------------


Salutations!



"garnote" a écrit dans le message de
news:zBlzb.2291$

Salut la compagnie,

Je commence à explorer CreateObject("Scripting.Dictionary")
suggéré par Daniel M. et ma foi, c'est assez tripatif !
Ma question est la suivante :
Comment obtenir le même résultat sans dictionnaire ?

Sub NombreDeValeursDistinctesDansUneSélectionDeCellules()
Dim d As Object
Set d = CreateObject("Scripting.Dictionary")
Set ici = Selection
For Each v In ici
If d.exists(v.Value) = False And v.Value <> "" Then
k = k + 1
d.Add v.Value, k
End If
Next
MsgBox "Nombre de valeurs distinctes : " & k, _
vbInformation, "En ne tenant pas compte des vides :"
End Sub

Serge






--
Cordialement,

Michel Gaboly
http://www.gaboly.com


Avatar
garnote
Impeccable et ultra rapide,

Sub CompteCellulesDistinctes()
Selection.Name = "n"
MsgBox Evaluate("=SUMPRODUCT((n<>"""")/(COUNTIF(n,n)+(n="""")))")
End Sub

Et je me demande bien comment utiliser les [ ] pour remplacer Evaluate !

Merci bien,

Serge



"Daniel.M" a écrit dans le message de
news:
Salut Serge,

AMA, pour compter, il vaut mieux utiliser des formules.

Essaie cela (en ayant soin de remplacer Nb par une adresse de plage
appropriée

si besoin est, j'ai gardé Nb de l'exemple de Denis) :

Evaluate("SUMPRODUCT((Nb<>"""")/(COUNTIF(Nb,Nb)+(Nb="""")))")

Salutations,

Daniel M.

"garnote" wrote in message
news:zBlzb.2291$
Salut la compagnie,

Je commence à explorer CreateObject("Scripting.Dictionary")
suggéré par Daniel M. et ma foi, c'est assez tripatif !
Ma question est la suivante :
Comment obtenir le même résultat sans dictionnaire ?

Sub NombreDeValeursDistinctesDansUneSélectionDeCellules()
Dim d As Object
Set d = CreateObject("Scripting.Dictionary")
Set ici = Selection
For Each v In ici
If d.exists(v.Value) = False And v.Value <> "" Then
k = k + 1
d.Add v.Value, k
End If
Next
MsgBox "Nombre de valeurs distinctes : " & k, _
vbInformation, "En ne tenant pas compte des vides :"
End Sub

Serge








Avatar
Michel Gaboly
Re,

MsgBox [=SUMPRODUCT((n<>"""")/(COUNTIF(n,n)+(n="""")))]

;-))


Impeccable et ultra rapide,

Sub CompteCellulesDistinctes()
Selection.Name = "n"
MsgBox Evaluate("=SUMPRODUCT((n<>"""")/(COUNTIF(n,n)+(n="""")))")
End Sub

Et je me demande bien comment utiliser les [ ] pour remplacer Evaluate !

Merci bien,

Serge

"Daniel.M" a écrit dans le message de
news:
Salut Serge,

AMA, pour compter, il vaut mieux utiliser des formules.

Essaie cela (en ayant soin de remplacer Nb par une adresse de plage
appropriée

si besoin est, j'ai gardé Nb de l'exemple de Denis) :

Evaluate("SUMPRODUCT((Nb<>"""")/(COUNTIF(Nb,Nb)+(Nb="""")))")

Salutations,

Daniel M.

"garnote" wrote in message
news:zBlzb.2291$
Salut la compagnie,

Je commence à explorer CreateObject("Scripting.Dictionary")
suggéré par Daniel M. et ma foi, c'est assez tripatif !
Ma question est la suivante :
Comment obtenir le même résultat sans dictionnaire ?

Sub NombreDeValeursDistinctesDansUneSélectionDeCellules()
Dim d As Object
Set d = CreateObject("Scripting.Dictionary")
Set ici = Selection
For Each v In ici
If d.exists(v.Value) = False And v.Value <> "" Then
k = k + 1
d.Add v.Value, k
End If
Next
MsgBox "Nombre de valeurs distinctes : " & k, _
vbInformation, "En ne tenant pas compte des vides :"
End Sub

Serge








--
Cordialement,

Michel Gaboly
http://www.gaboly.com



Avatar
Daniel.M
Et je me demande bien comment utiliser les [ ] pour remplacer Evaluate !


[SUMPRODUCT((n<>"")/(COUNTIF(n,n)+(n="")))]

Salutations,

Daniel M.