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

Extraction sans doublons sur plusieurs pages

4 réponses
Avatar
Patrick BASTARD
Bonjour à tous.

Dans le même classeur:
Des feuilles (une par jour travaillé) nommées 01, 02, 04,...31
Sur chaque feuille, des codes en colonne A (type 21S01, 83X4...)
Entre 2000 et 6500 lignes par feuille, mais jamais plus de 1500 codes
différents utilisé dans le mois.

Je cherche à extraire sur la feuille Total, en colonne A, à partir de A1, et
sans doublons, les codes utilisés dans toutes ces feuilles.

Données, filtrer, filtre élaboré, n'accepte pas une plage 3d (du type
'1:31'!$A:$A.
Connaissez-vous un moyen de contourner le problème ? (y compris en VBA)

D'avance, merci.
--
Bien amicordialement,
P. Bastard

Avant d'imprimer ce mail, ayez une pensée pour les arbres.

4 réponses

Avatar
MichDenis
Si tu dois faire ce travail seulement sur la colonne A,
tu devras enlever toute référence à CurrentRegion dans le code

Le principe, filtre élaboré sans doublons sur chacune des feuilles
du classseur -> résultat réporté vers une même feuille.
et pour finir -> filtre sur la plage de la feuille résultat reporté
vers la feuille de résultat final.

ça devrait aller !!!

'----------------------------------------
Sub test()
Dim R As Worksheet, RR As Worksheet
Dim Rg As Range, Sh As Worksheet
Dim ModeCalcul
On Error Resume Next
ModeCalcul = Application.Calculation
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
Application.ScreenUpdating = False
Set R = Worksheets.Add
For Each Sh In Worksheets
If Sh.Name <> R.Name Then
With R
If .Range("A1") = "" Then
Set Rg = .Range("A1")
Else
Set Rg = .Range("A" & .Range("A65536").End(xlUp)(2).Row)
End If
End With

With Sh
With .Range("A:A").CurrentRegion
.AdvancedFilter xlFilterCopy, , Rg, True
End With
If Rg.Row <> 1 Then Rg(1).EntireRow.Delete xlUp
End With
End If
Next
Set RR = Worksheets.Add(after:=Sheets(Sheets.Count))
RR.Name = "D_Résultat"
With R
Set Rg = RR.Range("A1")
With .Range("A:A").CurrentRegion
.AdvancedFilter xlFilterCopy, , Rg, True
End With
End With

Application.DisplayAlerts = False
R.Delete
Application.DisplayAlerts = True
Application.Calculation = ModeCalcul
Application.EnableEvents = True

End Sub
'----------------------------------------



"Patrick BASTARD" a écrit dans le message de news:

Bonjour à tous.

Dans le même classeur:
Des feuilles (une par jour travaillé) nommées 01, 02, 04,...31
Sur chaque feuille, des codes en colonne A (type 21S01, 83X4...)
Entre 2000 et 6500 lignes par feuille, mais jamais plus de 1500 codes
différents utilisé dans le mois.

Je cherche à extraire sur la feuille Total, en colonne A, à partir de A1, et
sans doublons, les codes utilisés dans toutes ces feuilles.

Données, filtrer, filtre élaboré, n'accepte pas une plage 3d (du type
'1:31'!$A:$A.
Connaissez-vous un moyen de contourner le problème ? (y compris en VBA)

D'avance, merci.
--
Bien amicordialement,
P. Bastard

Avant d'imprimer ce mail, ayez une pensée pour les arbres.
Avatar
Patrick BASTARD
Bonjour, *Denis*

Un grand merci pour le temps que tu as pris pour m'aider.
-mais c'est maintenant une habitude-
;-)

Je regarde et reviens en cas de souci.

Encore merci, et bonne fin de WE.


--
Bien amicordialement,
P. Bastard

Avant d'imprimer ce mail, ayez une pensée pour les arbres.


Si tu dois faire ce travail seulement sur la colonne A,
tu devras enlever toute référence à CurrentRegion dans le code

Le principe, filtre élaboré sans doublons sur chacune des feuilles
du classseur -> résultat réporté vers une même feuille.
et pour finir -> filtre sur la plage de la feuille résultat reporté
vers la feuille de résultat final.

ça devrait aller !!!

'----------------------------------------
Sub test()
Dim R As Worksheet, RR As Worksheet
Dim Rg As Range, Sh As Worksheet
Dim ModeCalcul
On Error Resume Next
ModeCalcul = Application.Calculation
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
Application.ScreenUpdating = False
Set R = Worksheets.Add
For Each Sh In Worksheets
If Sh.Name <> R.Name Then
With R
If .Range("A1") = "" Then
Set Rg = .Range("A1")
Else
Set Rg = .Range("A" & .Range("A65536").End(xlUp)(2).Row)
End If
End With

With Sh
With .Range("A:A").CurrentRegion
.AdvancedFilter xlFilterCopy, , Rg, True
End With
If Rg.Row <> 1 Then Rg(1).EntireRow.Delete xlUp
End With
End If
Next
Set RR = Worksheets.Add(after:=Sheets(Sheets.Count))
RR.Name = "D_Résultat"
With R
Set Rg = RR.Range("A1")
With .Range("A:A").CurrentRegion
.AdvancedFilter xlFilterCopy, , Rg, True
End With
End With

Application.DisplayAlerts = False
R.Delete
Application.DisplayAlerts = True
Application.Calculation = ModeCalcul
Application.EnableEvents = True

End Sub
'----------------------------------------



"Patrick BASTARD" a écrit dans
le message de news:
Bonjour à tous.

Dans le même classeur:
Des feuilles (une par jour travaillé) nommées 01, 02, 04,...31
Sur chaque feuille, des codes en colonne A (type 21S01, 83X4...)
Entre 2000 et 6500 lignes par feuille, mais jamais plus de 1500 codes
différents utilisé dans le mois.

Je cherche à extraire sur la feuille Total, en colonne A, à partir de
A1, et
sans doublons, les codes utilisés dans toutes ces feuilles.

Données, filtrer, filtre élaboré, n'accepte pas une plage 3d (du type
'1:31'!$A:$A.
Connaissez-vous un moyen de contourner le problème ? (y compris en
VBA)

D'avance, merci.


Avatar
Patrick BASTARD
Bonjour, *Denis*

Tout fonctionne si je supprime la ligne :
'If Rg.Row <> 1 Then Rg(1).EntireRow.Delete xlUp

Encore merci...

--
Bien amicordialement,
P. Bastard

Avant d'imprimer ce mail, ayez une pensée pour les arbres.



Si tu dois faire ce travail seulement sur la colonne A,
tu devras enlever toute référence à CurrentRegion dans le code

Le principe, filtre élaboré sans doublons sur chacune des feuilles
du classseur -> résultat réporté vers une même feuille.
et pour finir -> filtre sur la plage de la feuille résultat reporté
vers la feuille de résultat final.

ça devrait aller !!!

'----------------------------------------
Sub test()
Dim R As Worksheet, RR As Worksheet
Dim Rg As Range, Sh As Worksheet
Dim ModeCalcul
On Error Resume Next
ModeCalcul = Application.Calculation
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
Application.ScreenUpdating = False
Set R = Worksheets.Add
For Each Sh In Worksheets
If Sh.Name <> R.Name Then
With R
If .Range("A1") = "" Then
Set Rg = .Range("A1")
Else
Set Rg = .Range("A" & .Range("A65536").End(xlUp)(2).Row)
End If
End With

With Sh
With .Range("A:A").CurrentRegion
.AdvancedFilter xlFilterCopy, , Rg, True
End With
If Rg.Row <> 1 Then Rg(1).EntireRow.Delete xlUp
End With
End If
Next
Set RR = Worksheets.Add(after:=Sheets(Sheets.Count))
RR.Name = "D_Résultat"
With R
Set Rg = RR.Range("A1")
With .Range("A:A").CurrentRegion
.AdvancedFilter xlFilterCopy, , Rg, True
End With
End With

Application.DisplayAlerts = False
R.Delete
Application.DisplayAlerts = True
Application.Calculation = ModeCalcul
Application.EnableEvents = True

End Sub
'----------------------------------------



"Patrick BASTARD" a écrit dans
le message de news:
Bonjour à tous.

Dans le même classeur:
Des feuilles (une par jour travaillé) nommées 01, 02, 04,...31
Sur chaque feuille, des codes en colonne A (type 21S01, 83X4...)
Entre 2000 et 6500 lignes par feuille, mais jamais plus de 1500 codes
différents utilisé dans le mois.

Je cherche à extraire sur la feuille Total, en colonne A, à partir de
A1, et
sans doublons, les codes utilisés dans toutes ces feuilles.

Données, filtrer, filtre élaboré, n'accepte pas une plage 3d (du type
'1:31'!$A:$A.
Connaissez-vous un moyen de contourner le problème ? (y compris en
VBA)

D'avance, merci.


Avatar
MichDenis
Cette ligne sert (servait) à enlever les étiquettes de colonnes
(j'ai supposé que chaque feuille avait leurs propres étiquettes)

L'important c'est que cela fonctionne ;-)

"Patrick BASTARD" a écrit dans le message de news:

Bonjour, *Denis*

Tout fonctionne si je supprime la ligne :
'If Rg.Row <> 1 Then Rg(1).EntireRow.Delete xlUp

Encore merci...

--
Bien amicordialement,
P. Bastard

Avant d'imprimer ce mail, ayez une pensée pour les arbres.



Si tu dois faire ce travail seulement sur la colonne A,
tu devras enlever toute référence à CurrentRegion dans le code

Le principe, filtre élaboré sans doublons sur chacune des feuilles
du classseur -> résultat réporté vers une même feuille.
et pour finir -> filtre sur la plage de la feuille résultat reporté
vers la feuille de résultat final.

ça devrait aller !!!

'----------------------------------------
Sub test()
Dim R As Worksheet, RR As Worksheet
Dim Rg As Range, Sh As Worksheet
Dim ModeCalcul
On Error Resume Next
ModeCalcul = Application.Calculation
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
Application.ScreenUpdating = False
Set R = Worksheets.Add
For Each Sh In Worksheets
If Sh.Name <> R.Name Then
With R
If .Range("A1") = "" Then
Set Rg = .Range("A1")
Else
Set Rg = .Range("A" & .Range("A65536").End(xlUp)(2).Row)
End If
End With

With Sh
With .Range("A:A").CurrentRegion
.AdvancedFilter xlFilterCopy, , Rg, True
End With
If Rg.Row <> 1 Then Rg(1).EntireRow.Delete xlUp
End With
End If
Next
Set RR = Worksheets.Add(after:=Sheets(Sheets.Count))
RR.Name = "D_Résultat"
With R
Set Rg = RR.Range("A1")
With .Range("A:A").CurrentRegion
.AdvancedFilter xlFilterCopy, , Rg, True
End With
End With

Application.DisplayAlerts = False
R.Delete
Application.DisplayAlerts = True
Application.Calculation = ModeCalcul
Application.EnableEvents = True

End Sub
'----------------------------------------



"Patrick BASTARD" a écrit dans
le message de news:
Bonjour à tous.

Dans le même classeur:
Des feuilles (une par jour travaillé) nommées 01, 02, 04,...31
Sur chaque feuille, des codes en colonne A (type 21S01, 83X4...)
Entre 2000 et 6500 lignes par feuille, mais jamais plus de 1500 codes
différents utilisé dans le mois.

Je cherche à extraire sur la feuille Total, en colonne A, à partir de
A1, et
sans doublons, les codes utilisés dans toutes ces feuilles.

Données, filtrer, filtre élaboré, n'accepte pas une plage 3d (du type
'1:31'!$A:$A.
Connaissez-vous un moyen de contourner le problème ? (y compris en
VBA)

D'avance, merci.