IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Largeur des cellules Excel


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 37
    Points : 31
    Points
    31
    Par défaut Largeur des cellules Excel
    Bonjour à tous.

    En voulant créer un jeu sur Excel pour mon petit fils, à un moment donné j'ai voulu ajuster automatiquement la largeur de deux colonnes en fonction de la largeur de la fenêtre Excel, qui varie d'un PC à un autre. Extrêmement simple, me direz vous. Hé bien non ! Ou alors, je suis nul... Mais je vais m'améliorer, comme à chaque fois que je viens sur ce forum !

    Bien. Tout d'abord une chose incompréhensible : Lorsque je crée les deux lignes de code suivantes, je suis censé "mesurer" la taille de la colonne N° 1, n'est_ce pas ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Test1 = Columns(1).ColumnWidth
    Test2 = Cells(1,1).Width
    Mais le résultat est surprenant, puisque j'obtiens Test1 = 2, et Test2 = 15. Et la mesure "directe" sur la feuille Excel donne le résultat suivant : Largeur = 2 (25 pixels). Alors, quelle correspondance entre les valeurs "2", "15" et "25" ?? Je n'ai toujours pas la réponse. J'ai commencé par en déduire un ratio de 7,5 (15/2), mais c'aurait été trop simple. Une autre mesure sur la colonne 2 me donne respectivement 10,33 et 60, et Largeur = 10,33 (100 pixels). Du coup mon fameux ratio passe à 5,808 (60/10,33) au lieu de 7,5 auparavant... C'est raté pour le ratio !

    Je précise par ailleurs que grâce à un autre sujet publié sur ce forum, je connais maintenant la résolution de l'écran (1680 x 945 dans mon cas) et - sauf erreur - les valeurs correspondant à "Screen.TwipsPerPixelX" et "Screen.TwipsPerPixelY", qui sont toutes les deux à 20. Mais est-ce que ça va me servir ?


    Maintenant, je vais expliquer ma démarche. Je mesure la largeur totale de la feuille Excel par le code suivant (je n'en connais pas d'autre, alors s'il y a une bonne âme !) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Largeur = Application.ExecuteExcel4Macro("Get.workspace(13)")
    Pour info, j'obtiens 1005,6. Puis je mesure la largeur des 'N' cellules 'immuables' correspondant à l'espace du jeu créé (j'obtiens 950,2). Et c'est là que je veux ajuster les deux colonnes restantes (à gauche et à droite de cet espace), soit : (1005,6 - 950,2) / 2 = 27,7 pour chaque colonne.

    Précision complémentaire ajoutée par la suite : Toutes les colonnes qui sont à droite de la colonne 'finale' sont masquées.


    Mon problème, c'est que la seule commande que je connaisse pour modifier la largeur de colonne est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Columns(1).ColumnWidth = 27,7
    En effet, les commandes Range("A1").Width ou Cells(1,1).Width =27,7 provoquent une erreur.

    Mais quand je fais ça, la colonne est beaucoup trop large, puisqu'elle passe à 257 pixels. Bref, j'y arrive bien en augmentant mes colonnes d'une unité à chaque fois, puis en vérifiant, puis en recommençant à nouveau tant que ce n'est pas bon. Mais ça fait sacrément sauter l'image, et de toute façon le but de l'opération c'est d'y arriver du premier coup. En fait, je m'aperçois que je suis en train de vouloir soustraire des oranges à des citrons. Et ça ne passe pas vraiment...

    Voilà, je crois que j'ai tout dit. Encore une prise de tête pour un truc banal, et pas mal de temps perdu.

    Merci de m'apporter, sinon une solution, au moins une explication.

    Cordialement,
    JR

  2. #2
    Membre éprouvé Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Points : 929
    Points
    929
    Par défaut
    Bonjour,

    Alors tout d'abord ici, tu trouveras des tableaux de conversion entre les différentes unités de mesure.

    Pour ton cas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Test1 = Columns(1).ColumnWidth
    d'après l'aide: l'unité de largeur de colonne est égale à la largeur d'un caractère du style Normal. Dans le cas des polices proportionnelles, la largeur du caractère 0 (zéro) est utilisée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Test2 = Cells(1,1).Width
    ici l'unité est en point

    Tu devrais t'en sortir avec ça.

  3. #3
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Bonjour,

    voir aussi l'article Comment faire pour convertir des Twips en Pixels

    Concernant la largeur de colonne, c'est en fait un peu plus compliqué car y est intégré une notion de marge,
    voir le dernier point du tableau width (Column Width) de la documentation Column Class
    indiquant aussi la méthode d'arrondi pour tomber pile poil sur la largeur de colonne deux chiffres après la virgule …

    Ensuite pour les écrans n'étant pas en résolution standard de 72 dpi,
    reste à extrapoler un iota pour se caler sur la bonne largeur.
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 37
    Points : 31
    Points
    31
    Par défaut Avancée dans mes recherches
    Bonjour (re) et merci pour les réponses.


    En fait, le tableau des correspondances (pas très clair à la première approche, ils auraient du présenter ça sous forme d'un vrai tableau) ne m'a rien apporté. Par contre, l'idée de l'unité du caractère du style "normal" (que j'appellerai l'unité "N") est à creuser. Par ailleurs, en poursuivant mes recherches, je me suis aperçu de la chose suivante :

    Si X est la valeur que je donne dans l'instruction "Columns(1).ColumnWidth = X", on peut voir que :

    La première valeur de largeur de colonne lue directement dans la feuille Excel est égale à X. Si je comprends bien, c'est ici que l'on a affaire à la fameuse unité dépndant du style normal. La seconde valeur, exprimée en pixels, est égale à : Y1 = 9 X + constante. Dans mon cas, cette constante est égale à 4.

    Maintenant, si je lis la largeur de cellule par une macro, je constate que la valeur (donc exprimée en points si j'ai bien compris) est égale à : Y2 = 5,4 X + constante, avec Cte = 4,2 dans mon cas. Et pour ces deux équations, ça tombe vraiment pile poil !

    Quelqu'un sait-il d'où viennent ces constantes ?


    Ceci me permet donc de convertir directement la valeur cherchée pour la largeur de cellule, en me servant de la seconde équation à l'envers. En réalité, je ne tombe pas tout à fait juste et il faut que j'ajoute 1 point. Ja n'ai pas encore compris pourquoi, mais ça va venir.

    Alors, comme apparemment l'unité "N" dépend du style normal, ma dernière question sera la suivante : Quel est le code qui permet de connaitre la valeur correspondant au caractère du style normal ?


    Merci et @ plus pour vos réponses
    JR

  5. #5
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Les constantes viennent des marges et de la grille comme indiqué dans le document, normalement ce sont des valeurs entières …

    Il y a moyen de trouver la largeur d'un caractère via des API mais pour l'avoir lu sur un autre forum,
    non seulement c'était un peu l'usine et le résultat ne me convenait pas selon la résolution de l'écran en PPP (points par pouce)
    d'où mon reste à extrapoler

    __________________________________________________________________________________________
    On ne dit pas une biroute mais une route à deux voies …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

Discussions similaires

  1. [VBA-E]Largeur des cellules Excel adaptée au contenu de la cellule
    Par pauletta22 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 24/05/2006, 08h33
  2. Formater des cellules excel en format nombre
    Par _developpeur_ dans le forum Access
    Réponses: 7
    Dernier message: 09/01/2006, 14h13
  3. Insérer automatiquement des boutons dans des cellules excel
    Par Oaurelius dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/11/2005, 18h38
  4. [Spreadsheet-WriteExcel] Largeur des colonnes Excel
    Par Longrais dans le forum Modules
    Réponses: 2
    Dernier message: 17/10/2005, 16h41
  5. [Automation Excel] ajuster des cellules excel
    Par willich dans le forum Access
    Réponses: 4
    Dernier message: 10/10/2005, 10h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo