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

Filtre avec répétition de lignes en haut (vba)

13 réponses
Avatar
j-pascal
Bonsoir,

Dans le code qui suit (que je dois à MichDenis), seules les valeurs
situées sur les lignes 16 et plus sont fitrées ...

J'avais renoncé à exporter quelques lignes situées au dessus de ce
tableau mais finalement ça me fait défaut.

J'ai donc tenté de modifier le code pour exporter les valeurs
récurentes situées sur les lignes 10 à 14 ! Sans succès !!

Précision : ces 5 lignes seraient répétées comme dans "MiseEnPage /
Feuille / Lignes à répéter en haut".

Y-a-t-il peu de choses à changer dans le présent code pour que je
parvienne à mon but ?


'---------------------------
With ActiveSheet
Set Rg = .Range("B15:B" & .Range("b65536").End(xlUp).Row)
End With

Set Sh = Worksheets.Add

On Error Resume Next

With Rg
.AdvancedFilter xlFilterCopy, , Sh.Range("A1"), True
Worksheets(.Parent.Name).ShowAllData
End With

With Sh
Set Rg1 = .Range("A2:A" & .Range("A65536").End(xlUp).Row)
End With

For Each C In Rg1
Set Sh1 = Worksheets.Add(after:=Sheets(Sheets.Count))
Sh1.Name = C.Value
With Rg
.AutoFilter field:=1, Criteria1:=C.Value
.SpecialCells(xlCellTypeVisible).EntireRow.Copy
Sh1.Range("A1")

Sh1.Range("A1").Range("A1").CurrentRegion.EntireColumn.AutoFit
End With
'---------------------------

Merci pour votre aide,

JP

3 réponses

1 2
Avatar
j-pascal
Bonsoir Denis,

J'ai fait la modif comme ça :

'----
With Sh1
' .Range("A7").CurrentRegion.EntireColumn.AutoFit 'modif A6
' .Columns("A:A").ColumnWidth = 9 'ajout 29/04
' .Columns("K:K").ColumnWidth = 11 'ajout 29/04
' .Columns("M:M").ColumnWidth = 50 'ajout 29/04
' .Cells.Interior.ColorIndex = 2 'ajout 29/04
.UsedRange.EntireColumn.AutoFit 'modif 29/04 soir
End With
'----

J'ai dû faire une erreur d'interprétation de ton conseil, car le
résultat n'est pas à l'image du fichier d'origine. Et par ailleurs, ça
m'afficher les colonnes masquées !

Désolé, je n'ai probablement pas compris.

JP

Au lieu d'utiliser cette ligne de code ;
Sh1.Range("A6").CurrentRegion.EntireColumn.AutoFit

Emploie ceci :
Sh1.UsedRange.EntireColumn.AutoFit





"j-pascal" a écrit dans le message de groupe de
discussion : Bonjour Denis,

Tu veux dire qu'il s'agit d'une erreur ? Ok, je corrige.

J'ai trouvé un truc pour recopier la largeur des colonnes, mais (outre
qu'il faudrait que je l'adapte à ce code !), je crains que ça ne
ralentisse "sensiblement" le déroulement du code, car ça s'appliquerait
à une quarantaine de classeurs créés.

Peux-tu juste me dire (si tu veux bien !) ce que tu en pense sur le
principe ?

'--------
Sub LargCol()

x = Sheets("Feuil1").Columns.Count
For i = 1 To x
lg = Sheets("Feuil1").Columns(i).ColumnWidth
For Each F In ActiveWorkbook.Worksheets
If F.Name <> "Feuil1" Then F.Columns(i).ColumnWidth = lg
Next
Next
End Sub
'--------

jp

Sh1.Range("A6").Range("A6").CurrentRegion.EntireColumn.AutoFit



Tu n'as pas besoin de ma permission pour supprimer un des "Range("A6")

Do you ?





"j-pascal" a écrit dans le message de groupe de
discussion : C'était bien ça !

Sachant que "A6" est le début de mon tableau filtré, j'ai donc adapté
comme ceci :

'--
Sh1.Range("A6").Range("A6").CurrentRegion.EntireColumn.AutoFit
'--

Je ne comprends pas pourquoi on a deux fois "Range("A6")" !



Mais plutôt que de passer par un ".CurrentRegion.EntireColumn.AutoFit",
est-il possible de copier dans le classeur (Feuille) de destination,
les mêmes largeurs de colonnes que celles du tableau de référence ?

jp




Avatar
j-pascal
Bonsoir Denis,

Je reviens un peu tard sur ce fil.

Ma question initiale était :

"J'ai trouvé un truc pour recopier la largeur des colonnes, mais (...)"

Donc (pour moi) "recopier la largeur (...)" signifie "J'ai des colonnes
de différentes largeurs dans un fichier d'origine ... et je souhaite
copier les différentes largeurs des dites colonnes vers les classeurs
que je vais créer. A l'arrivée, le classeur d'origine ressemble (par la
largeur de ses colonnes) aux classeurs de destination.

".CurrentRegion.EntireColumn.AutoFit" ne remplit pas ce but, car tout
dépend du contenu des classeurs de destination !

Et je constate (sauf erreur d'application de ma part !) que :
Sh1.UsedRange.EntireColumn.AutoFit
ne remplit pas cette condition.

Certes, je n'ai pas mentionné les colonnes masquées, mais, si
j'applique : MaPlage.SpecialCells(xlCellTypeVisible).Copy
Sh1.Range("A5"), je fais fi des cellules masquées, quelque soit leur
emplacement ; alors j'imagine que l'endroit où se trouvent les colonnes
masquées n'a pas d'importance.

Et puis sur les dizaines de questions auxquelles tu as bien voulu (et
j'admire ta patience !) répondre ces derniers jours, s'il y en a une
(!) que je n'ai pas exprimée clairement, statistiquement c'est
acceptable.

Demain, je bosse ; ce sont les contributeurs qui vont respirer ;-)

A bientôt,

jp




Ce serait bien si tu prenais une grande respiration
avant d'énoncer ton problème ! Écrire une question
n'est pas une tâche facile... arriver à cerner la problématique,
c'est la première étape de l'élaboration de la solution.

La question était comment remplacer ceci:
Sh1.Range("A6").CurrentRegion.EntireColumn.AutoFit

En aucun moment, tu n'as mentionné ceci dans ta question :
***** - résultat n'est pas à l'image du fichier d'origine

Non plus as-tu mentionné ceci :
**** - Ça m'afficher les colonnes masquées !

Dit, comment fais-je pour savoir que tu as des colonnes masquées
dans ton tableau + connaître lesquelles ?




"j-pascal" a écrit dans le message de groupe de
discussion : Bonsoir Denis,

J'ai fait la modif comme ça :

'----
With Sh1
' .Range("A7").CurrentRegion.EntireColumn.AutoFit 'modif A6
' .Columns("A:A").ColumnWidth = 9 'ajout 29/04
' .Columns("K:K").ColumnWidth = 11 'ajout 29/04
' .Columns("M:M").ColumnWidth = 50 'ajout 29/04
' .Cells.Interior.ColorIndex = 2 'ajout 29/04
.UsedRange.EntireColumn.AutoFit 'modif 29/04 soir
End With
'----

J'ai dû faire une erreur d'interprétation de ton conseil, car le
résultat n'est pas à l'image du fichier d'origine. Et par ailleurs, ça
m'afficher les colonnes masquées !

Désolé, je n'ai probablement pas compris.

JP

Au lieu d'utiliser cette ligne de code ;
Sh1.Range("A6").CurrentRegion.EntireColumn.AutoFit

Emploie ceci :
Sh1.UsedRange.EntireColumn.AutoFit





"j-pascal" a écrit dans le message de groupe de
discussion : Bonjour Denis,

Tu veux dire qu'il s'agit d'une erreur ? Ok, je corrige.

J'ai trouvé un truc pour recopier la largeur des colonnes, mais (outre
qu'il faudrait que je l'adapte à ce code !), je crains que ça ne
ralentisse "sensiblement" le déroulement du code, car ça s'appliquerait
à une quarantaine de classeurs créés.

Peux-tu juste me dire (si tu veux bien !) ce que tu en pense sur le
principe ?

'--------
Sub LargCol()

x = Sheets("Feuil1").Columns.Count
For i = 1 To x
lg = Sheets("Feuil1").Columns(i).ColumnWidth
For Each F In ActiveWorkbook.Worksheets
If F.Name <> "Feuil1" Then F.Columns(i).ColumnWidth = lg
Next
Next
End Sub
'--------

jp

Sh1.Range("A6").Range("A6").CurrentRegion.EntireColumn.AutoFit



Tu n'as pas besoin de ma permission pour supprimer un des "Range("A6")

Do you ?





"j-pascal" a écrit dans le message de groupe de
discussion : C'était bien ça !

Sachant que "A6" est le début de mon tableau filtré, j'ai donc adapté
comme ceci :

'--
Sh1.Range("A6").Range("A6").CurrentRegion.EntireColumn.AutoFit
'--

Je ne comprends pas pourquoi on a deux fois "Range("A6")" !



Mais plutôt que de passer par un ".CurrentRegion.EntireColumn.AutoFit",
est-il possible de copier dans le classeur (Feuille) de destination,
les mêmes largeurs de colonnes que celles du tableau de référence ?

jp






Avatar
MichDenis
Largeur des colonnes :

Dans la procédure... vers la fin, il s'agit d'ajouter ceci
'--------------------------
For Each Q In Rg.CurrentRegion.Columns
.ActiveSheet.Range(Q.Address).ColumnWidth = Q.ColumnWidth
Next
'--------------------------

À cet endroit :
'---------------------------
Sh1.Copy
With ActiveWorkbook
For Each Q In Rg.CurrentRegion.Columns
.ActiveSheet.Range(Q.Address).ColumnWidth = Q.ColumnWidth
Next
'---------------------------
1 2