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

Reproduire la largeur de colonne

23 réponses
Avatar
Bruno RCSC
Bonjour,

Obligé de recréer un fichier composé de 46 onglets différents, je voudrais
savoir s'il est possible par macro à partir du fichier initial d'obtenir les
mêmes largeurs de colonne pour le nouveau fichier et ce pour tous les
onglets ? Dois je utiliser l'enregistreur de macro ?
Le fichier initial contient tellement de styles différents qu'Excel plante,
j'ai supprimé tous les styles sauf le "normal" et le "monétaire" mais la
largeur des colonnes a variée.

Sous Excel 2002.

Merci pour votre aide.

BH

10 réponses

1 2 3
Avatar
michdenis
Je n'ai pas vérifié de la version 1997 à 2007 d'excel,
(de mémoire, il y a au moins problème avec la version 2000)
mais la constante "texte", l'usage de "xlPasteColumnWidths"
retourne une erreur et pour contourner ceci, il s'agit d'utiliiser sa
constante numérique "8" et tout devrait être OK pour toutes les
versions d'excel !

Selection.PasteSpecial Paste:=8, Operation:=xlNone, _
SkipBlanks:úlse, Transpose:úlse


"Modeste" a écrit dans le message de news:

Bonsour® lSteph avec ferveur ;o))) vous nous disiez :

For i = 1 To Sh.Columns.Count
Sh.Columns(i).ColumnWidth = Sh1.Columns(i).ColumnWidth
Next i







heu ... cela ne sera pas plus simple ????
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:úlse, Transpose:úlse


--
--
@+
;o)))
Avatar
lSteph
Regarde ma troisième proposition au lieu de la seconde
mais on devrait pouvoir utiliser ce que suggéré par Modeste et
MichDenis


J'y reviens..

@+
--
lSteph


On 1 août, 13:08, "Bruno RCSC" wrote:
Merci à tous les 3 pour vos réponses.

Pour Denis, je n'ai pas compris ta proposition.

Pour FFO, cela ne convient pas, je ne veux pas copier l'ensemble des
onglets, je souhaite ne copier que la valeur de largeur des colonnes.

Pour Steph, cela fonctionne mais que pour le 1er onglet. Il copie
parfaitement les valeurs de l'onglet1 du classeur1 mais vers tous les
onglets du classeur2 or je voudrais que les valeurs de l'onglet1 du
classeur1 se duplique sur l'onglet1 du classeur2, puis l'onglet2 de
classeur1 vers l'onglet2 du classeur2 et ainsi de suite, sachant que les
onglets ont excactement le même nom en classeur1 et classeur2.

J'essaie de fournir une explication complémentaire :
J'ouvre le fichier initial (toto.xls) et ses 46 onglets.
Je supprime tous les styles exitants ne conservant que "normal".
A ce stade, la plus part des colonnes changent de largeur.
J'enregistre sous un nouveau nom le résultat obtenu (toto2.xls).
Comment faire pour que les largeurs de colonnes des 46 onglets de TOTO.XL S
soient les mêmes dans TOTO2.XLS ?

Merci pour votre aide.

BH.


Avatar
Bruno RCSC
Génial, bravo et merci.
Le code donne le résultat demandé
MAIS
Pourquoi dans l'un des fichiers, pour une colonne donnée j'ai largeur =9.50
(62 pixels) et dans l'autre fichier j'ai largeur =9.50 (81 pixels) ?
A quoi correspond cette différence sachant que dans un cas j'ai des ## ?

BH


"lSteph" a écrit dans le message de news:

...enfin pour chaque onglet avec à l'origine des largeurs différentes
dans chaque onglet aussi!

Sub clarg()
Dim i As Integer, j As Integer, wb1 As Workbook, wb2 As Workbook

Set wb1 = Workbooks("Classeur3")
Set wb2 = Workbooks("Classeur2")
Application.ScreenUpdating = False
With wb2
For j = 1 To .Worksheets.Count
With .Worksheets(j)
For i = 1 To .Columns.Count
.Columns(i).ColumnWidth = _
wb1.Worksheets(j).Columns(i).ColumnWidth
Next i
End With
Next j
End With
End Sub


'lSteph

On 1 août, 11:43, "Bruno RCSC" wrote:
Bonjour,

Obligé de recréer un fichier composé de 46 onglets différents, je voudrais
savoir s'il est possible par macro à partir du fichier initial d'obtenir
les
mêmes largeurs de colonne pour le nouveau fichier et ce pour tous les
onglets ? Dois je utiliser l'enregistreur de macro ?
Le fichier initial contient tellement de styles différents qu'Excel
plante,
j'ai supprimé tous les styles sauf le "normal" et le "monétaire" mais la
largeur des colonnes a variée.

Sous Excel 2002.

Merci pour votre aide.

BH


Avatar
lSteph
On 1 août, 13:08, "Bruno RCSC" wrote:
Merci à tous les 3 pour vos réponses.

Pour Denis, je n'ai pas compris ta proposition.

Pour FFO, cela ne convient pas, je ne veux pas copier l'ensemble des
onglets, je souhaite ne copier que la valeur de largeur des colonnes.

Pour Steph, cela fonctionne mais que pour le 1er onglet. Il copie
parfaitement les valeurs de l'onglet1 du classeur1 mais vers tous les
onglets du classeur2 or je voudrais que les valeurs de l'onglet1 du
classeur1 se duplique sur l'onglet1 du classeur2, puis l'onglet2 de


Essaie donc ainsi:

Sub clarg()
Dim i As Integer, j As Integer, wb1 As Workbook, wb2 As Workbook


Set wb1 = Workbooks("Classeur3")
Set wb2 = Workbooks("Classeur2")
Application.ScreenUpdating = False
With wb1
For j = 1 To .Worksheets.Count
With .Worksheets(j)
.Columns.Copy
wb2.Worksheets(j).Columns.PasteSpecial _
Paste:=xlPasteColumnWidths

End With
Next j
End With
End Sub

'lSteph



classeur1 vers l'onglet2 du classeur2 et ainsi de suite, sachant que les
onglets ont excactement le même nom en classeur1 et classeur2.

J'essaie de fournir une explication complémentaire :
J'ouvre le fichier initial (toto.xls) et ses 46 onglets.
Je supprime tous les styles exitants ne conservant que "normal".
A ce stade, la plus part des colonnes changent de largeur.
J'enregistre sous un nouveau nom le résultat obtenu (toto2.xls).
Comment faire pour que les largeurs de colonnes des 46 onglets de TOTO.XL S
soient les mêmes dans TOTO2.XLS ?

Merci pour votre aide.

BH.


Avatar
Modeste
Bonsour® Bruno RCSC avec ferveur ;o))) vous nous disiez :

Génial, bravo et merci.
Le code donne le résultat demandé
MAIS
Pourquoi dans l'un des fichiers, pour une colonne donnée j'ai largeur
=9.50 (62 pixels) et dans l'autre fichier j'ai largeur =9.50 (81
pixels) ?
A quoi correspond cette différence sachant que dans un cas j'ai des
## ?



la police standard du style normal n'est pas la même
Menu Outils > options > onglet General
Police standard :
taille :

voir aussi :Menu Format > Styles...
Nom du style : Normal
--
@+
;o)))
Avatar
Bruno RCSC
Steph, ton dernier post est Top.
Sincèrement,merci.

En résumé, pour les amateurs, voici le code qu'il faut utiliser (sous excel
2002) :

Sub steph()
Dim i As Integer, j As Integer, wb1 As Workbook, wb2 As Workbook

Set wb1 = Workbooks("classeur_initial.xls")
Set wb2 = Workbooks("classeur_final.xls")
Application.ScreenUpdating = False
With wb1
For j = 1 To .Worksheets.Count
With .Worksheets(j)
.Columns.Copy
wb2.Worksheets(j).Columns.PasteSpecial _
Paste:=xlPasteColumnWidths

End With
Next j
End With

End Sub

Merci à tous.
BH.
Avatar
FFO
Rebonjours Bruno
Je me permet d'insister fort de tes dernières explications
Avec ma proposition corrigée ainsi :

Copie = Workbooks.Add.Name
For i = 1 To Workbooks("toto.xls").Sheets.Count
Workbooks("toto.xls").Sheets(i).Copy Workbooks(Copie).ActiveSheet
Workbooks(Copie).ActiveSheet.Name = Workbooks("toto.xls").Sheets(i).Name
Workbooks(Copie).ActiveSheet.Cells.Clear
Next

Il suffit avec ce code d'ouvrir le classeur toto.xls et de l'éxécuter
Un nouveau classeur sera automatiquement créé avec les 46 Onglets à
l'identique de ceux du classeur toto.xls en ce qui concerne le format des
colonnes et le nom des Onglets et sans aucune valeur

Il ne resetera plus qu'à l'enregistrer

Celà devrait convenir
Dis moi !!!
Avatar
lSteph
Bonjour FFO,

Tu te demandes sans doute pourquoi est-on allé chercher un truc plus
compliqué.
Dans une solution comme celle que tu propose, on embarque les formats
et selon
ce que nous avons compris c'est ce qui pose souci à Bruno qui ne veut
que les largeurs de colonnes.
Sinon il suffirait effectivement de supprimer les valeurs et de faire
Enregistrer sous un nouveau classeur.

Cordialement.

--
lSteph

On 1 août, 14:34, FFO wrote:
Rebonjours Bruno
Je me permet d'insister fort de tes dernières explications
Avec ma proposition corrigée ainsi :

Copie = Workbooks.Add.Name
For i = 1 To Workbooks("toto.xls").Sheets.Count
Workbooks("toto.xls").Sheets(i).Copy Workbooks(Copie).ActiveSheet
Workbooks(Copie).ActiveSheet.Name = Workbooks("toto.xls").Sheets(i).Nam e
Workbooks(Copie).ActiveSheet.Cells.Clear
Next

Il suffit avec ce code d'ouvrir le classeur toto.xls et de l'éxécuter
Un nouveau classeur sera automatiquement créé avec les 46 Onglets à
l'identique de ceux du classeur toto.xls en ce qui concerne le format des
colonnes et le nom des Onglets et sans aucune valeur

Il ne resetera plus qu'à l'enregistrer

Celà devrait convenir
Dis moi !!!


Avatar
FFO
Salut lSteph

Je te rassure aucune proposition de qui que soit me parait compliqué
Je les trouve toujours trés interressante et ne manque pas une occasion de
les capitaliser au moins pour ma formation personnelle

Vous avez tous d'excellentes solutions que je garderais bien de critiquer
Et c'est trés souvent par la petite porte que je glisse les miennes parmis
les votres espérant ne pas faire triste mine
Je suis convaincu et serai un ardent défenseur du respect de toute
proposition dans la mesure où elle fonctionne et répond à l'attente du
demandeur

C'est ce qui fait la richesse et la diversité

A l'utilisateur de faire son choix ne crois tu pas ????
Avatar
lSteph
c'est gentil mais dans ce coup là il faut remercier Modeste d'avoir
songé à

xlPasteColumnWidths

On peut aussi le remplacer par 8 selon la suggestion de MichDenis
D'ailleurs c'est ce qui est plaisant dans le forum c'est quand on se
met à plusieurs pour avancer.

@+

--
lSteph

On 1 août, 14:33, "Bruno RCSC" wrote:
Steph, ton dernier post est Top.
Sincèrement,merci.

En résumé, pour les amateurs, voici le code qu'il faut utiliser (sous excel
2002) :

Sub steph()
Dim i As Integer, j As Integer, wb1 As Workbook, wb2 As Workbook

Set wb1 = Workbooks("classeur_initial.xls")
Set wb2 = Workbooks("classeur_final.xls")
Application.ScreenUpdating = False
With wb1
For j = 1 To .Worksheets.Count
With .Worksheets(j)
.Columns.Copy
wb2.Worksheets(j).Columns.PasteSpecial _
Paste:=xlPasteColumnWidths

End With
Next j
End With

End Sub

Merci à tous.
BH.


1 2 3