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

Rendre une macro présentable en public ;-)

2 réponses
Avatar
garnote
Bonjour,

Sur diverses feuilles j'ai des données de A2 à Ax
avec des doublons (x varie d'une feuille à l'autre).
Je copie cette plage dans la colonne C à partir
de C2 et j'enlève les doublons.
Ensuite, dans la colonne D à partir de D2, je veux
obtenir le nombre de fois où chaque valeur de la
plage sans doublons (colonne C) apparaît dans la plage initiale (A2:Ax).
Je dois pouvoir lancer la macro à partir d'une feuille quelconque.
Avec cette macro j'y arrive, mais l'utilisation de mes deux boucles
n'est pas très efficace pour faire de la vitesse ;-)
J'ai tenté le coup avec COUNTIF mais je m'empêtre dans ses
références relatives !
Que pouvez-vous faire pour moi ?

Sub Tableau()
Dim c1 As Range
Dim c2 As Range
Columns("C:D").ClearContents
Set ici = Range(Cells(2, 1), Cells(2, 1).End(xlDown))
ici.Copy Range("C2")
Columns(3).AutoFit
Set la = Range(Cells(2, 3), Cells(2, 3).End(xlDown))
la.RemoveDuplicates Columns:=1, Header:=xlNo
Set unique = Range(Cells(2, 3), Cells(2, 3).End(xlDown))
For Each c1 In unique
For Each c2 In ici
If c2.Value = c1.Value Then k = k + 1
Next c2
c1.Offset(0, 1) = k
k = 0
Next c1
End Sub

Serge

2 réponses

Avatar
Philippe.R
Bonsoir,
A tout hasard, un petit "application.ScreenUpdating = false" en début, remis
à true à la fin ne peut faire de mal
--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/web/mpfe
News://news.microsoft.com/microsoft.public.fr.excel
"garnote" a écrit dans le message de
news:%
Bonjour,

Sur diverses feuilles j'ai des données de A2 à Ax
avec des doublons (x varie d'une feuille à l'autre).
Je copie cette plage dans la colonne C à partir
de C2 et j'enlève les doublons.
Ensuite, dans la colonne D à partir de D2, je veux
obtenir le nombre de fois où chaque valeur de la
plage sans doublons (colonne C) apparaît dans la plage initiale (A2:Ax).
Je dois pouvoir lancer la macro à partir d'une feuille quelconque.
Avec cette macro j'y arrive, mais l'utilisation de mes deux boucles
n'est pas très efficace pour faire de la vitesse ;-)
J'ai tenté le coup avec COUNTIF mais je m'empêtre dans ses
références relatives !
Que pouvez-vous faire pour moi ?

Sub Tableau()
Dim c1 As Range
Dim c2 As Range
Columns("C:D").ClearContents
Set ici = Range(Cells(2, 1), Cells(2, 1).End(xlDown))
ici.Copy Range("C2")
Columns(3).AutoFit
Set la = Range(Cells(2, 3), Cells(2, 3).End(xlDown))
la.RemoveDuplicates Columns:=1, Header:=xlNo
Set unique = Range(Cells(2, 3), Cells(2, 3).End(xlDown))
For Each c1 In unique
For Each c2 In ici
If c2.Value = c1.Value Then k = k + 1
Next c2
c1.Offset(0, 1) = k
k = 0
Next c1
End Sub

Serge



Avatar
michdenis
Il y a ceci :

En C1, l'étiquette de colonne
En C2:Cx les données
En D2:Dx les données filtrées sans doublons
En E2:Ex le résultat dénombrant chaque donnée en D2:Dx

Tu choisis la feuille que tu désires en remplacement de Feuil3
ou tu peux même utiliser : ActiveSheet

'--------------------------------------------------
Sub test()
Dim Rg As Range
Application.ScreenUpdating = False
With Feuil3
.Range("D1") = "Résultat"
.Range("E1") = "Formule"
Set Rg = .Range("C2:C" & .Range("C65536").End(xlUp).Row)
Rg.AdvancedFilter xlFilterCopy, , .Range("D2"), True
Set Rg1 = .Range("D2:D" & .Range("D65536").End(xlUp).Row)
Rg1.Offset(, 1).Formula = "=Countif(" & .Name & "!" & _
Rg.Address & "," & .Name & "!" & Rg1(1).Address(0, 0) & ")"
End With
Application.ScreenUpdating = True
End Sub
'--------------------------------------------------




"garnote" a écrit dans le message de groupe de discussion :
#
Bonjour,

Sur diverses feuilles j'ai des données de A2 à Ax
avec des doublons (x varie d'une feuille à l'autre).
Je copie cette plage dans la colonne C à partir
de C2 et j'enlève les doublons.
Ensuite, dans la colonne D à partir de D2, je veux
obtenir le nombre de fois où chaque valeur de la
plage sans doublons (colonne C) apparaît dans la plage initiale (A2:Ax).
Je dois pouvoir lancer la macro à partir d'une feuille quelconque.
Avec cette macro j'y arrive, mais l'utilisation de mes deux boucles
n'est pas très efficace pour faire de la vitesse ;-)
J'ai tenté le coup avec COUNTIF mais je m'empêtre dans ses
références relatives !
Que pouvez-vous faire pour moi ?

Sub Tableau()
Dim c1 As Range
Dim c2 As Range
Columns("C:D").ClearContents
Set ici = Range(Cells(2, 1), Cells(2, 1).End(xlDown))
ici.Copy Range("C2")
Columns(3).AutoFit
Set la = Range(Cells(2, 3), Cells(2, 3).End(xlDown))
la.RemoveDuplicates Columns:=1, Header:=xlNo
Set unique = Range(Cells(2, 3), Cells(2, 3).End(xlDown))
For Each c1 In unique
For Each c2 In ici
If c2.Value = c1.Value Then k = k + 1
Next c2
c1.Offset(0, 1) = k
k = 0
Next c1
End Sub

Serge