synthese d'un tableau

Le
Stef
Bonjour,

J'ai un tableau composé de 7 colonnes et de x lignes (cf tab n°1)


voici la fonction qui me permet avec la valeur introduite
(Range("A2:E1000")) de connaitre de nb de lignes sans doublons
mais que je souhaiterais améliorer (voir plus bas)

Function Fctn_ud(valeur)
Set MonTab = CreateObject("Scripting.Dictionary")
A = valeur
For i = LBound(A, 1) To UBound(A, 1)
temp = ""
For k = LBound(A, 2) To UBound(A, 2)
temp = temp & " " & A(i, k)
Next k
If Not MonTab.Exists(temp) Then MonTab.Add temp, temp
Next i
Fctn_ud = MonTab.Count
End Function

et la fonction suivante qui me permet de connaitre le nombre de lignes dont
la colonnes 7 est égal à 3

Function Fctn_ud1()
k = 1
cellule = Range("A" & k)
Do
If Cells(k, 7) = 3 Then
cpte = cpte + 1
End If
k = k + 1
cellule = Range("A" & k)
Loop Until cellule = Empty
Fctn_ud1 = cpte
End Function


Mon problème est le suivant :
Je souhaiterais connaitre le nb de lignes sans doublons pour chacune des
valeurs renseignées dans la colonne A
et ensuite connaitre le nb de lignes sans doublons pour chacune des valeurs
renseignées dans la colonne A ayant dans la colonne 7 la valeur 3.

Par exemple pour le tableau n°1, je souhaiterais obtenir le résultat sur la
feuil!2 comme le tableau n°2

Tabn°1
A B C D E F G
France Bureau 3
Allemagne Bureau 1
GB Bureau 1
France Appart 1
Suisse Bureau 3



Tabn°2
Nb1 Nb2
France 2 1
Allemagne 1 0
GB 1 0
Suisse 1 1



Je vous remercie par avance de votre aide
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichD
Le #24155901
Bonjour,

Voir le fichier joint : http://cjoint.com/?BAmrWEkENIB



MichD
------------------------------------------
"Stef" a écrit dans le message de groupe de discussion : 4f0ef8a5$0$32244$

Bonjour,

J'ai un tableau composé de 7 colonnes et de x lignes (cf tab n°1)


voici la fonction qui me permet avec la valeur introduite
(Range("A2:E1000")) de connaitre de nb de lignes sans doublons
mais que je souhaiterais améliorer (voir plus bas)

Function Fctn_ud(valeur)
Set MonTab = CreateObject("Scripting.Dictionary")
A = valeur
For i = LBound(A, 1) To UBound(A, 1)
temp = ""
For k = LBound(A, 2) To UBound(A, 2)
temp = temp & " " & A(i, k)
Next k
If Not MonTab.Exists(temp) Then MonTab.Add temp, temp
Next i
Fctn_ud = MonTab.Count
End Function

et la fonction suivante qui me permet de connaitre le nombre de lignes dont
la colonnes 7 est égal à 3

Function Fctn_ud1()
k = 1
cellule = Range("A" & k)
Do
If Cells(k, 7) = 3 Then
cpte = cpte + 1
End If
k = k + 1
cellule = Range("A" & k)
Loop Until cellule = Empty
Fctn_ud1 = cpte
End Function


Mon problème est le suivant :
Je souhaiterais connaitre le nb de lignes sans doublons pour chacune des
valeurs renseignées dans la colonne A
et ensuite connaitre le nb de lignes sans doublons pour chacune des valeurs
renseignées dans la colonne A ayant dans la colonne 7 la valeur 3.

Par exemple pour le tableau n°1, je souhaiterais obtenir le résultat sur la
feuil!2 comme le tableau n°2

Tabn°1
A B C D E F G
France Bureau 3
Allemagne Bureau 1
GB Bureau 1
France Appart 1
Suisse Bureau 3



Tabn°2
Nb1 Nb2
France 2 1
Allemagne 1 0
GB 1 0
Suisse 1 1



Je vous remercie par avance de votre aide
MichD
Le #24156161
Si tu préfères, tu peux utiliser cette fonction personnalisée :
et dans une cellule de la feuille 2 de mon exemple :
=CompteValeur(A2:A7;3)
A2:A7 = Plage de cellules
3 = Valeur dans la colonne G
'------------------------------------
Function CompteValeur(Rg As Range, Valeur As Double)
Dim NbPers As Long, NbVal As Long

For Each C In Rg
If Application.CountIf(Rg, C.Value) = 1 Then
NbPers = NbPers + 1
If C.Offset(, 6) = Valeur Then
NbVal = NbVal + 1
End If
End If
Next
CompteValeur = "Nombre de personnes: " & NbPers & ", " & _
"Personnes avec valeur égale à 3: " & NbVal
End Function
'------------------------------------


MichD
------------------------------------------
Stef
Le #24167801
Je vous remercie pour votre aide et veuillez m'excuser pour ma lecture
tardive.

Cependant pourriez vous m'expliquer comment exploiter votre fichier en étant
sous excel 2003

Je vous en remercie par avance


"MichD" jen974$psr$
Si tu préfères, tu peux utiliser cette fonction personnalisée :
et dans une cellule de la feuille 2 de mon exemple :
=CompteValeur(A2:A7;3)
A2:A7 = Plage de cellules
3 = Valeur dans la colonne G
'------------------------------------
Function CompteValeur(Rg As Range, Valeur As Double)
Dim NbPers As Long, NbVal As Long

For Each C In Rg
If Application.CountIf(Rg, C.Value) = 1 Then
NbPers = NbPers + 1
If C.Offset(, 6) = Valeur Then
NbVal = NbVal + 1
End If
End If
Next
CompteValeur = "Nombre de personnes: " & NbPers & ", " & _
"Personnes avec valeur égale à 3: " & NbVal
End Function
'------------------------------------


MichD
------------------------------------------


MichD
Le #24168241
Utilise ceci :

Dans une cellule de ta feuille, tu inscris :
=CompteValeur(A2:A7;3)
A2:A7 = Plage de cellules, tu adaptes la plage selon ton application
3 = Valeur dans la colonne G , tu peux remplacer 3 par la valeur de ton choix qui est contenu dans la colonne G

Tu copies ce qui suit dans un module STANDARD
'------------------------------------
Function CompteValeur(Rg As Range, Valeur As Double)
Dim NbPers As Long, NbVal As Long

For Each C In Rg
If Application.CountIf(Rg, C.Value) = 1 Then
NbPers = NbPers + 1
If C.Offset(, 6) = Valeur Then
NbVal = NbVal + 1
End If
End If
Next
CompteValeur = "Nombre de personnes: " & NbPers & ", " & _
"Personnes avec valeur égale à 3: " & NbVal
End Function
'------------------------------------



MichD
------------------------------------------
"Stef" a écrit dans le message de groupe de discussion : 4f140b96$0$15059$

Je vous remercie pour votre aide et veuillez m'excuser pour ma lecture
tardive.

Cependant pourriez vous m'expliquer comment exploiter votre fichier en étant
sous excel 2003

Je vous en remercie par avance


"MichD" jen974$psr$
Si tu préfères, tu peux utiliser cette fonction personnalisée :
et dans une cellule de la feuille 2 de mon exemple :
=CompteValeur(A2:A7;3)
A2:A7 = Plage de cellules
3 = Valeur dans la colonne G
'------------------------------------
Function CompteValeur(Rg As Range, Valeur As Double)
Dim NbPers As Long, NbVal As Long

For Each C In Rg
If Application.CountIf(Rg, C.Value) = 1 Then
NbPers = NbPers + 1
If C.Offset(, 6) = Valeur Then
NbVal = NbVal + 1
End If
End If
Next
CompteValeur = "Nombre de personnes: " & NbPers & ", " & _
"Personnes avec valeur égale à 3: " & NbVal
End Function
'------------------------------------


MichD
------------------------------------------


Stef
Le #24170971
Je ne suis pas devant mon poste mais merci déjà pour votre réponse
"MichD" jf1850$31n$
Utilise ceci :

Dans une cellule de ta feuille, tu inscris :
=CompteValeur(A2:A7;3)
A2:A7 = Plage de cellules, tu adaptes la plage selon ton application
3 = Valeur dans la colonne G , tu peux remplacer 3 par la valeur de ton
choix qui est contenu dans la colonne G

Tu copies ce qui suit dans un module STANDARD
'------------------------------------
Function CompteValeur(Rg As Range, Valeur As Double)
Dim NbPers As Long, NbVal As Long

For Each C In Rg
If Application.CountIf(Rg, C.Value) = 1 Then
NbPers = NbPers + 1
If C.Offset(, 6) = Valeur Then
NbVal = NbVal + 1
End If
End If
Next
CompteValeur = "Nombre de personnes: " & NbPers & ", " & _
"Personnes avec valeur égale à 3: " & NbVal
End Function
'------------------------------------



MichD
------------------------------------------
"Stef" a écrit dans le message de groupe de discussion :
4f140b96$0$15059$

Je vous remercie pour votre aide et veuillez m'excuser pour ma lecture
tardive.

Cependant pourriez vous m'expliquer comment exploiter votre fichier en
étant
sous excel 2003

Je vous en remercie par avance


"MichD" jen974$psr$
Si tu préfères, tu peux utiliser cette fonction personnalisée :
et dans une cellule de la feuille 2 de mon exemple :
=CompteValeur(A2:A7;3)
A2:A7 = Plage de cellules
3 = Valeur dans la colonne G
'------------------------------------
Function CompteValeur(Rg As Range, Valeur As Double)
Dim NbPers As Long, NbVal As Long

For Each C In Rg
If Application.CountIf(Rg, C.Value) = 1 Then
NbPers = NbPers + 1
If C.Offset(, 6) = Valeur Then
NbVal = NbVal + 1
End If
End If
Next
CompteValeur = "Nombre de personnes: " & NbPers & ", " & _
"Personnes avec valeur égale à 3: " & NbVal
End Function
'------------------------------------


MichD
------------------------------------------






Publicité
Poster une réponse
Anonyme