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
'---------------------------
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 '--------
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 ?
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" <messages@venir.com> a écrit dans le message de groupe de
discussion : mn.e9b57d94be6ee35b.81386@venir.com... 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
'--------
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 ?
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 '--------
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
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 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 '--------
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
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" <messages@venir.com> a écrit dans le message de groupe de
discussion : mn.ecf37d9441c32819.81386@venir.com... Bonsoir Denis,
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" <messages@venir.com> a écrit dans le message de groupe de
discussion : mn.e9b57d94be6ee35b.81386@venir.com... 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
'--------
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 ?
"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 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 '--------
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
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 '---------------------------
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
'---------------------------
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 '---------------------------