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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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" <garnote3@videotron.ca> a écrit dans le message de
news:%23HjfBxvMKHA.220@TK2MSFTNGP02.phx.gbl...
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
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
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
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" <garnote3@videotron.ca> a écrit dans le message de groupe de discussion :
#HjfBxvMKHA.220@TK2MSFTNGP02.phx.gbl...
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
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