Bordures comprises dans la largeur d'une colonne ?

Bonjour,

J'ai fait un petit test sur un nouveau classeur :

Dans la feuille 1, j'ai une colonne avec une largeur de 100.

Dans la feuille 2, j'ai 10 colonnes fusionnées avec une largeur de 10 chacune.

Il n'y a pas de contenu dans les cellules (2 feuilles vierges).

Il n'y a aucune bordure affichée.

Visuellement, la largeur "totale" est plus grande dans la feuille 2 (quand il y a plusieurs colonnes).

Je m'attendais pourtant à avoir exactement le même rendu (je pensais que 10*10 = 100 ).

Est-ce dû au fait que les cellules ont des bordures qui ne sont pas comprises dans la largeur définie ?

Quelle technique efficace permet d'avoir strictement la même largeur ?

Est-ce que les bordures ont toujours la même largeur (quand on n'affiche aucune bordure) ?

Bonjour,

Si tu utilises la commande Format du menu tu n'y arriveras pas.

Il faut utiliser la mesure en pixels disponible quand on clique entre deux colonnes d'en-tête. (100 = 705 pixels)

Inconvénient : il n'y a pas de demi pixels !

Tu devras donc partir de 700 pixels et mettre tes petites colonnes à 70 (ou 710 pour 71....)

A+

pixel

Ah, je vois ! Je te remercie pour ton aide.

J'ai découvert par ce biais en vba Application.ActiveWindow.PointsToScreenPixelsX(Range("plage").Width)

Mais peut-ton utiliser PointsToScreenPixelsX avec Application.ScreenUpdating = true ?

J'ai l'impression que non et pourtant c'est indispensable pour que le code soit efficace...

Avez-vous une astuce pour avoir la largeur d'une zone en pixel tout en ayant screenupdating sur true ?

Ou sinon, y a-t-il une astuce pour convertir un nombre de pixel en points ?

Damiani a écrit :

Ou sinon, y a-t-il une astuce pour convertir un nombre de pixel en points ?

Une règle de trois !

une colonne de 10 points = 75 pixels : 750 pixels = 10 colonnes... mais 106,43 points !

A+

Mhm je ne suis pas sûr de te suivre ?

Si je calcule la taille de mes 10 colonnes et que je veux une 11ème colonne qui fasse exactement la taille de mes 10 premières colonnes, comment dois-je faire ?

Désolé il y avait une coquille dans ma dernière réponse.

Le tableau suivant donne la correspondance points = pixels

ptspix

On voit clairement que 1 colonne de 3 points fait 26 pixels

On voit clairement que 1 colonne de 30 points fait 215 pixels

Mais 10 colonnes de 3 points ne font pas 215 pixels mais 10 x 26 pixels = 260 !

C'est plus clair comme ça ?

A+

Je suis désolé mais je ne comprends pas encore bien (même si ça s'éclaircit un peu)

Si j'ai 10 colonnes qui font 625 pixel quand je les selectionne en même temps mais individuellement qui font 119 pixel, soit 1190 en tout (10 x 119), comment puis-je faire pour que ma colonne 11 ait la même taille que mes 10 premières colonnes ?

Je ne comprends pas pourquoi la taille des colonnes varie selon qu'on en selectionne 1 ou 10 ?

Bonsoir, Salut Galopin !

Si je comprends bien tu veux une série de colonnes de même largeur d'un côté et d'un autre une colonne dont la largeur est égale à la largeur totale de la série ?

Je proposerais de fixer la largeur de tes colonnes en points :

Sub LColPts()
    Dim w!, c!
    With ActiveCell
        w = .Value
        If w > 1342.5 Or w < 0 Then
            .Value = CVErr(xlErrNA)
            Exit Sub
        End If
        If w > 9 Then
            c = (w - 9) / 5.25 + 1
        Else
            c = w / 9
        End If
        .ColumnWidth = c
    End With
End Sub

Cette procédure (sortie de mes archives) permet de définir la largeur d'une colonne en points.

Elle fonctionne de la façon suivante :

tu inscris dans une cellule de la colonne la largeur en points voulu, tu lances la macro, laquelle ajuste la largeur à la valeur en points inscrite dans la cellule sélectionnée.

Pour avoir ensuite une colonne faisant la largeur totale de la série, il convient de mesurer cette dernière, car il peut y avoir un écart entre la valeur inscrite et la valeur appliquée (ça fonctionne par incréments, on ne coupe pas des pixels en 2 !).

Pour la mesure tu peux simplement sélectionner une plage faisant la largeur de la série :

Sub Largeur()
    MsgBox Selection.Width
End Sub

Tu notes la largeur obtenue. Puis tu utilises cette valeur pour définir la largeur de la grande colonne avec la macro précédente.

Attention : la largeur maximale d'une colonne est de : 1342,5 points.

Là, tu n'auras pas d'écarts car cela correspond à un multiple de valeurs déjà appliquées.

Cordialement.

Bonjour Ferrand,

En fait je me suis rendu compte que tu introduis une 3ème dimensions qui n'a rien à voir avec celle affichée quand on dimensionne la colonne : C'est normal mon observation était purement expérimentale : pas scientifique du tout !

J'en ai déduit (en partant de ta Sub ) la fonction suivante :

Function LColPts(w!)
Dim c!
If w > 1342.5 Then
MsgBox "Sélection trop large !"
Exit Function
End If
If w > 9 Then
c = (w - 9) / 5.25 + 1
Else
c = w / 9
End If
LColPts = c
End Function

Ce qui permet de régler le pb de la manière suivante :

Sub test()
Worksheets(2).Columns("A:A").ColumnWidth = LColPts(Selection.Width)
End Sub

A+

Salut Galopin !

Bé faut bien aboutir à dimensionner dans l'unité qui permet de définir la largeur...

C'est vrai qu'à l'époque j'avais pensé à une fonction, mais comme on ne pouvait pas la faire fonctionner sur feuille... mais ta suggestion permet des aménagements et de programmer un lot de dimensionnements...

(NB- Cela provient d'une [maintenant] très vieille discussion, à laquelle il est bien possible que tu aies participé en son temps... !)

Bonne journée.

Oui, oui je n'ai plus la référence mais je me souviens. Il me semble bien que c'était une histoire de quadrillage imprimable...

En revanche ce dont je ne me rappelais plus c'est que la dimension affiché dans la boite de dialogue ne correspond pas au "point" qui n'est finalement connu que dans VBA.

C'est finalement assez tordu TOUSSA presque autant que le travail sur les dates... Quand on pense que c'est avec des combines comme ça que tourne l'économie : pas étonnant que de temps en temps il y ait quelques ratées !

Bon. Je garde précieusement sous le coude cette fonction...

A+

En effet... et au départ il s'agissait de définir en cm...

Je suis bien d'accord que c'est tordu... J'ai toujours eu un peu de mal à comprendre cette exception pour les largeurs de colonnes et qu'en plus on les définisse dans une unité qu'on ne peut lire et on les lise dans une unités qu'on ne peut définir...

Je vous remercie grandement tous les deux pour votre aide précieuse et détaillée !!

J'ai réutilisé le code de MFerrand dans ma feuille.

J'ai encore besoin de précisions pour comprendre ce code :

Pourquoi définir des variable avec un point d'exclamation à la fin (w! c!) ?

Comment fonctionne ce code ? Si je comprends bien, cela convertit la largeur d'une colonne .width, qui est exprimée en "nombre de caractères 0 affichés" en une largeur .columnwidth, qui est exprimée en nombre de points ?

Pourquoi est-ce que ça fonctionne plus précisément comme ceci plutôt quand affectant à une seule colonne la somme des largeur .width de chaque colonne ? Je ne comprends pas pourquoi une unité est "à ce point" plus précise qu'une autre ?

Pourquoi le calcul est-il c = (w - 9) / 5.25 + 1 (ou c = w / 9 si w < 9) ? Je n'ai retrouvé cette relation mathématique sur aucune autre page internet

Cette conversion est-elle bien universelle ? C'est à dire, fonctionne-t-elle parfaitement sur des ordinateurs avec des résolutions d'écran totalement différentes ou avec des paramètres différents (dont je ne connaitrais pas la nature ^^) ?

Bonsoir,

! = caractère de déclaration de type, signifie As Single.

Je n'ai retrouvé cette relation mathématique sur aucune autre page internet

Je dois dire que je ne l'ai pas cherchée, mais si elle y avait été elle serait certainement parvenue jusqu'à moi avant que je ne soie obligé de la calculer !

Tu as toi-même constaté que l'addition des valeurs en unités caractères n'était pas opératoire...

Si j'ai le temps, un jour, je me lancerai dans une démonstration plus exhaustive de cette relation... là je me suis contenté d'établir qu'une unité caractère correspondait approximativement à 5,25 points, mais seulement au-dessus de 1 (valeur qui correspond elle à 9 points). Cette relation donnant des résultats satisfaisants, écarts largement inférieurs à ceux provoqués par le caractère incrémentiel de la définition des largeurs et hauteurs, et non visibles à l'oeil nu, je m'en suis donc contenté.

Note que cela confirme bien tes constatations : en additionnant les valeurs de 10 colonnes, tu perds 33 à 34 points...

Cordialement.

Et sauriez-vous pourquoi l'addition des valeurs en unités caractères n'était pas opératoire (ça m'intéresserait de comprendre pourquoi) ?

Ce calcul mathématique basé sur ton observation est-elle universel selon toi ? C'est à dire, fonctionne-t-il sur des ordinateurs avec des résolutions d'écran totalement différentes (4K dans quelques années ) ou avec des paramètres différents (dont je ne connaitrais pas la nature : polices, taille du texte, ...) ?

Comme tu vois, on arrive à tourner autour du Comment, comment ça se manifeste... mais le Pourquoi, c'est autre chose.

Peut-être que les programmeurs de Microsoft pourraient répondre, mais je n'ai jusqu'à présent rien lu sur le sujet.

Déjà, il est mystérieux que ce système de défiition atypique ait été mis en place, pour les seules colonnes. Toutes les autres définitions de dimensions et position sont en points... Il y a peut-être une raison qui présidé à ce choix (faut l'espérer... !)

Quant aux caractère universel, surtout dans le temps, je ne saurais m'engager Si un tel système de définition se maintient, et si la relation de conversion se modifie avec les évolutions technologiques, il faudra recalculer comment s'établit la nouvelle relation.

Cordialement.

Je te remercie pour ces dernières précisions, qui me laissent dans le doute mais le code étant fonctionnel aujourd'hui je me poserai de nouveau la question de sa pérennité un peu plus tard ...

Rechercher des sujets similaires à "bordures comprises largeur colonne"