OVH Cloud OVH Cloud

Problème VBA

13 réponses
Avatar
azerty
Bonjour,


Soit une colonne Excel qui contient des valeurs :


TOTO
TOTO
TOTO
TOTO
TATA
TATA
TITI



Comment écrire :

Tant que pas la colonne vide
compter le nombre de valeurs différentes


Ici TOTO= 4, TATA = 2 et TITI =1



Merci

3 réponses

1 2
Avatar
azerty
MERCI DANIEL

Ca marche !

Tu peux me commenter ce code ?




Et si tu veux conserver les résultats dans un fichier texte ?







Voila du code :

Sub test()
Dim Plage As Range, c As Range
Dim Tabl, Ctr As Long, ind As Boolean
Ctr = 0
ReDim Tabl(Ctr)
Set Plage = Range("A1", Range("A65536").End(xlUp))
For Each c In Plage
ind = True
For i = 0 To UBound(Tabl)
If c.Value = Tabl(i) Then
ind = False
End If
Next i
If ind = True Then
Ctr = Ctr + 1
ReDim Preserve Tabl(Ctr)
Tabl(Ctr) = c.Value
MsgBox c.Value & " " &
WorksheetFunction.CountIf(Range("A:A"), c)
End If
Next c
End Sub

Daniel
"azerty" a écrit dans le message de news:
43de28ac$0$18329$


Bonjour,


Soit une colonne Excel qui contient des valeurs :


TOTO
TOTO
TOTO
TOTO
TATA
TATA
TITI



Comment écrire :

Tant que pas la colonne vide
compter le nombre de valeurs différentes


Ici TOTO= 4, TATA = 2 et TITI =1



Merci




TOTO et TATA... c'est des exemples !
Pas des valeurs réelles !!!!


Et je souhaite du code :

Do while

...


















Avatar
Antoine
Bonjour Lionel,

Effectivement je n'aurais pas appréhendé les choses comme cela, mais c'est
simple, clair et logique !

No comment !

Merci

Antoine
"Lionel" a écrit dans le message de news:
43de3137$0$29180$
Bonjour Antoine,

C'est le côté fonction matricielle de SOMMEPROD qui fait tout. Je reprends
l'exemple d'azerty :

TOTO
TOTO
TOTO
TOTO
TATA
TATA
TITI

La fonction NB.SI(Plage, "TOTO") donnerait 4, mais si on indique sous
forme
Matricielle NB.SI(A1:A7:A1:A7), on va avoir NB.SI(Plage;A1) puis
NB.SI(Plage,A2) etc. jusqu'à A7. Résultats de la fonction :
NB.SI(A1:A7:A1) = 4 inverse = 1/4
NB.SI(A1:A7:A2) = 4 inverse = 1/4
NB.SI(A1:A7:A3) = 4 inverse = 1/4
NB.SI(A1:A7:A4) = 4 inverse = 1/4
NB.SI(A1:A7:A5) = 2 inverse = 1/2
NB.SI(A1:A7:A6) = 2 inverse = 1/2
NB.SI(A1:A7:A7) = 1 inverse = 1/1

et la somme des inverses donne bien 3 ;-)

Amicalement
Lionel


"Antoine" a écrit dans le message de
news:
bonjour
la fonction que tu nous communiques fonctionne à merveille, sauf que je
ne
comprends pas comment !
pas du côté de sommeprod mais du côté de nb.si... et le pourquoi du
1/x...

Quelques lueurs de savoir m'aideraient à sortir de cette incapacité à
comprendre §

Merci

Antoine
"Lionel" a écrit dans le message de news:
43de2969$0$21260$
Bonjour,

Souhaites-tu seulement connaître le nombre de valeurs sans doublon ?
i.e.


3
dans ton exemple : TOTO, TATA et TITI.
Si c'est le cas, cette formule devrait convenir :

=SOMMEPROD(1/NB.SI(A1:A7;A1:A7))

Pour des données de A1 à A7.

Amicalement
Lionel








Avatar
Daniel
Voici :

Sub test()
' Principe : à chaque cellule, on compare avec les cellules
' précédentes stockées dans un tableau
Dim Plage As Range, c As Range
Dim Tabl, Ctr As Long, ind As Boolean
Ctr = 0
ReDim Tabl(Ctr)
' Ouverture du fichier texte
Open "FichierTexte.txt" For Output As #1
' Sélection de la plage de cellules
Set Plage = Range("A1", Range("A65536").End(xlUp))
' Traitement de chaque cellule de la plage
For Each c In Plage
' On positionne ind à true
ind = True
' Comparaison de la vaaleur de la cellule avec les éléments du
tableau
For i = 0 To UBound(Tabl)
If c.Value = Tabl(i) Then
ind = False
End If
Next i
' Si ind est égal à true (pas de correspondance dans le tableau
If ind = True Then
' On augmente de 1 la taille du tableau
Ctr = Ctr + 1
ReDim Preserve Tabl(Ctr)
Tabl(Ctr) = c.Value
' Ecriture du fichier texte
Print #1, c.Value & " " &
WorksheetFunction.CountIf(Range("A:A"), c)
End If
Next c
' Fermeture du fichier texte
Close #1
End Sub

Cordialement.
Daniel
"azerty" a écrit dans le message de news:
43de34d3$0$18342$
MERCI DANIEL

Ca marche !

Tu peux me commenter ce code ?




Et si tu veux conserver les résultats dans un fichier texte ?







Voila du code :

Sub test()
Dim Plage As Range, c As Range
Dim Tabl, Ctr As Long, ind As Boolean
Ctr = 0
ReDim Tabl(Ctr)
Set Plage = Range("A1", Range("A65536").End(xlUp))
For Each c In Plage
ind = True
For i = 0 To UBound(Tabl)
If c.Value = Tabl(i) Then
ind = False
End If
Next i
If ind = True Then
Ctr = Ctr + 1
ReDim Preserve Tabl(Ctr)
Tabl(Ctr) = c.Value
MsgBox c.Value & " " &
WorksheetFunction.CountIf(Range("A:A"), c)
End If
Next c
End Sub

Daniel
"azerty" a écrit dans le message de news:
43de28ac$0$18329$


Bonjour,


Soit une colonne Excel qui contient des valeurs :


TOTO
TOTO
TOTO
TOTO
TATA
TATA
TITI



Comment écrire :

Tant que pas la colonne vide
compter le nombre de valeurs différentes


Ici TOTO= 4, TATA = 2 et TITI =1



Merci




TOTO et TATA... c'est des exemples !
Pas des valeurs réelles !!!!


Et je souhaite du code :

Do while

...




















1 2