Twitter iPhone pliant OnePlus 12 PS5 Disney+ Orange Livebox Windows 11 ChatGPT

synthese d'un tableau

5 réponses
Avatar
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

5 réponses

Avatar
MichD
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
Avatar
MichD
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
------------------------------------------
Avatar
Stef
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" a écrit dans le message de news:
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
------------------------------------------


Avatar
MichD
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" a écrit dans le message de news:
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
------------------------------------------


Avatar
Stef
Je ne suis pas devant mon poste mais merci déjà pour votre réponse
"MichD" a écrit dans le message de news:
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" a écrit dans le message de news:
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
------------------------------------------