Dimension d'une feuille à imprimer sous VBA et chamgement dimension cellules

guainflo

XLDnaute Junior
Bonjour,

Je souhaite connaître la dimension d'une feuille que je crée sur vba excel 2000 (pour impression), je régle les marges dans un premier temps (voir en dessous).
En fonction des variables : nombre de ligne et nombre de colonne (entrée par l'utilisateur), le prg créé cette feuille et n'affiche que le nombre de ligne et le nombre de colonne souhaité et les adaptes sur toute la feuille.

Voila comment je pense faire cela mais il faut que je connaisse les dimensions de la feuille en retirant les marges:
Par exemple pour les lignes :
taille_colonne = taille_largeur_feuille / nbcolonne
Columns("B:C").ColumnWidth = taille_colonne
Comment mettre en variable les colonnes à modifier?

Code:
    With ActiveSheet.PageSetup
        .LeftMargin = Application.InchesToPoints(0.25)  'marge gauche
        .RightMargin = Application.InchesToPoints(0.25) 'marge droite
        .TopMargin = Application.InchesToPoints(0.31)   'marge haut
        .BottomMargin = Application.InchesToPoints(0.31) 'marge bas
        .HeaderMargin = Application.InchesToPoints(0.19) 'marge tout en haut
        .FooterMargin = Application.InchesToPoints(0.19) 'marge tout en bas
        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = 1
    End With

Merci par avance et si vous avez une meilleur idée.
 

guainflo

XLDnaute Junior
Re : Dimension d'une feuille à imprimer sous VBA et chamgement dimension cellules

D'abord je n'arrive pas à sélectionner une plage de colonne à partir d'un incide (de A à A+nbcolonne) et de changer la taille de ces colonnes.
Et ensuite, il y a t'il une ligne de code permettant de connaître les dimensions entre les marges.
 
G

Guest

Guest
Re : Dimension d'une feuille à imprimer sous VBA et chamgement dimension cellules

Bonjour,

Plusieurs problèmes avec excel et la taille de colonnes:

La propriété columnwidth est exprimée dans une unité relative à une police de caractère normale (voir l'aide en ligne).

La propriété .width des colonnes est exprimée, en points mais n'est qu'en lecture seule

Les macros ci-dessous tiennent compte de cela mais on n' arrive toujours qu'a des résultats approximatifs car excel arrondit les largeurs de colonnes suivant ses propres normes.

La macro CalculHauteurLargeur ne tient pas compte des éventuelles marges minimales de l'imprimante.

Teste et vois si cela te convient.
A mettre dans un module.
Code:
Option Explicit
Dim HauteurPagePoints As Single
Dim LargeurPagePoints As Single
Sub Test()
 
    CalculeHauteurLargeur
 
    Dim ColDep As Long, LigDep As Long
    Dim coefLargeur
    ColDep = 2: LigDep = 1  'Ligne  et colonne de départ
    'une plage qui commence en ligne1 colonne 2 et fini en ligne 55 et colonne 4 (F)
    With Range(Cells(LigDep, ColDep), Cells(LigDep + 54, ColDep + 3))
        'Les unités de largeur de colonnes (columnWidth)sont proportionnelles a une police normale
        'De plus la propriété Width exprimée en points n'est qu'en lecture seule
        'Alors que RowHeight et Row.Height sont toutes deux exprimées en point
 
        .Columns(1).EntireColumn.ColumnWidth = 20
        coefLargeur = .Columns(1).Width / 20
 
        .Columns.EntireColumn.ColumnWidth = (LargeurPagePoints / 4) / coefLargeur
        .Rows.EntireRow.RowHeight = HauteurPagePoints / 55
 
        ActiveSheet.PageSetup.PrintArea = .Address
    End With
End Sub
 
Sub CalculeHauteurLargeur()
 
    'Hauteur et largeur d'une page A4
    'Sachant qu'un pouce = 2.54 cm
    HauteurPagePoints = Application.InchesToPoints(29.7 * 1 / 2.54)
    LargeurPagePoints = Application.InchesToPoints(21 * 1 / 2.54)
 
    With ActiveSheet.PageSetup
        .LeftMargin = Application.InchesToPoints(0.25)  'marge gauche
        .RightMargin = Application.InchesToPoints(0.25) 'marge droite
        .TopMargin = Application.InchesToPoints(0.31)   'marge haut
        .BottomMargin = Application.InchesToPoints(0.31) 'marge bas
        .HeaderMargin = Application.InchesToPoints(0.19) 'marge tout en haut
        .FooterMargin = Application.InchesToPoints(0.19) 'marge tout en bas
        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = 1
        HauteurPagePoints = HauteurPagePoints - .TopMargin - .FooterMargin
        LargeurPagePoints = LargeurPagePoints - .LeftMargin - .RightMargin
    End With
 
End Sub
A+
 

guainflo

XLDnaute Junior
Re : Dimension d'une feuille à imprimer sous VBA et chamgement dimension cellules

Tous d'abord merci Hasco,

J'ai ajouté ton prg au mien et il y a quelques problèmes.

Je crée une feuille nommée "Cartographie" et je veut que ce soit cette feuille qui soit modifié, pas la feuil1 (là, la feuil1 est modifié).

Ensuite, je vois que sur la feuil1 "cartographie", qu'il y a aussi des modifications mais visible que lorsque l'on fait aperçu avant impression. En fait je veut que la modif des dimensions des lignes et colonnes soit visible dans la feuille et que lorque l'on imprime, tout tiens sur une feuille.
De plus, il y a une erreur sur les lignes (sur la hauteur de la feuille).

J'assaye de modifier le programme mais je fais du pire que mieux.

Peut-tu regarder le prg en pièce jointe.
 

Pièces jointes

  • Cartographie_cales_alternateur.zip
    16 KB · Affichages: 97
G

Guest

Guest
Re : Dimension d'une feuille à imprimer sous VBA et chamgement dimension cellules

Re,

Ce que je t'ai donné, n'avait comme je l'ai dit que valeur de démonstration des limites de ce genre de modifications.

Pour ma part je ne m'attaquerait pas à ce genre de choses ici, c'est trop complexe pour un bénéfice toujours aléatoire.

En espérant que tu trouveras quelqu'un qui puisse t'aider,

A+
 

guainflo

XLDnaute Junior
Re : Dimension d'une feuille à imprimer sous VBA et chamgement dimension cellules

Re,

Ok, je vais me débrouiller autrement pour la taille de la feuille (sur mon pc elle fait à peu près 100, donc pour avoir la largeur des colonnes, je vais faire 100/nb de colonne, ou je trouverais autre chose).

Mais je bloque tjs ici :
J'ai un problème de sélection des colonnes, je fais cela, ca marche quand je le fais sur la feuil1, mais si je le fais sur la feuille "Cartographie", ca plante :

Code:
Private Sub CommandButton1_Click()
    Dim nbcalelongueur
    Dim nbcalelargeur

    If (Range("C4") = "" Or Range("C5") = "") Then
        MsgBox ("Veuillez entrer le nombre de cale en longueur et en largeur")
        GoTo finprg
    End If
    
    nbcalelongueur = Range("C5")
    nbcalelargeur = Range("C4")
    
    If FeuilleExiste(ThisWorkbook, "Cartographie") Then
        Application.DisplayAlerts = False
        Worksheets("Cartographie").Delete
        Application.DisplayAlerts = True
    End If
    Worksheets.Add  'Création d'une nouvelle feuille
    ActiveSheet.Name = "Cartographie"   'Nouvelle feuille appelée "Cartographie"
    Worksheets("Cartographie").Select
    
    With ActiveSheet.PageSetup
        .LeftMargin = Application.InchesToPoints(0.25)  'marge gauche
        .RightMargin = Application.InchesToPoints(0.25) 'marge droite
        .TopMargin = Application.InchesToPoints(0.31)   'marge haut
        .BottomMargin = Application.InchesToPoints(0.31) 'marge bas
        .HeaderMargin = Application.InchesToPoints(0.19) 'marge tout en haut
        .FooterMargin = Application.InchesToPoints(0.19) 'marge tout en bas
        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = 1
    End With
[COLOR="Red"]    Worksheets("Feuil1").Select
    Range(Cells(1, 1), Cells(1, nbcalelongueur)).Select
    Selection.EntireColumn.ColumnWidth = 80 / nbcalelargeur[/COLOR]
    
finprg:
End Sub

Si j'en remplace par, ca plante (erreur de select):
Worksheets("Cartographie").Select
Range(Cells(1, 1), Cells(1, nbcalelongueur)).Select
Selection.EntireColumn.ColumnWidth = 80 / nbcalelargeur
 
G

Guest

Guest
Re : Dimension d'une feuille à imprimer sous VBA et chamgement dimension cellules

Re,

Code:
with Worksheets("Cartographie")
 
    [COLOR=red]With .PageSetup[/COLOR]
        .LeftMargin = Application.InchesToPoints(0.25)  'marge gauche
        .RightMargin = Application.InchesToPoints(0.25) 'marge droite
        .TopMargin = Application.InchesToPoints(0.31)   'marge haut
        .BottomMargin = Application.InchesToPoints(0.31) 'marge bas
        .HeaderMargin = Application.InchesToPoints(0.19) 'marge tout en haut
        .FooterMargin = Application.InchesToPoints(0.19) 'marge tout en bas
        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = 1
    [COLOR=red]End With[/COLOR]
 
[COLOR=red]   .Range(.Cells(1, 1),. Cells(1, nbcalelongueur)).EntireColumn.ColumnWidth = 80 / nbcalelargeur[/COLOR]
[COLOR=#ff0000]End With[/COLOR]

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 275
Messages
2 086 707
Membres
103 377
dernier inscrit
fredy45