Trouver le mot le plus long d'une liste

Bonsoir à tous,

Je viens vers vous ce soir car je cherches des pistes pour ajuster mes colonnes.

Actuellement j'utilise à la création de mon fichier Colonne.autofit pour ajuste mes colonnes,....

Mais ( il y a toujours un mais) mes entêtes de colonne étant écrit verticalement mes colonnes sont relativement étroites.

Je ne veux pas fixer en dure une taille par défaut,, ni ajuster à chaque "modification de cellules" j'aimerai l'ajuster au nom le plus long de la liste utilisé dans la colonne.

Exemple sur l'onglet "semainier" les colonnes sont étroites et les noms débordent des cellules. ( liste de nom onglet parametres)

Merci pour vos idées

j'ai trouver plusieurs exemple avec Len(ActiveCell) mais ceci calcule que pour une cellules hors je cherches à définir qu'elle est le mot le plus long dans une liste ( plage )

J'ai essayer Len(plage) mais sans résultat.

Si quelqu'un avait un debut de piste à me fournir,

Merci,

Salut,

Dans Excel, tu peux résoudre ce cas avec une formule matricielle :

=MAX(NBCAR(A2:A100))

que l'on valide avec MAJ-CTRL-Entrée

En VBA la formule serait :

Range("C10").FormulaArray = "=MAX(LEN(A2:A100))"

A+

H

Bonjour LordNelson45,

Merci pour cet élément de réponse

je viens de tester ta solution mais elle ne correspond pas exactement à mon besoin. Ton code permet d'écrire la formule dans la cellule.

j'ai essayé d'adapter ceci à mon besoin. c'est a dire de calculer dans la liste utiliser (ici Alist2) le nom qui à le plus de caractère pour ensuite définir cette longueur comme valeur pour mes colonnes.

j'ai commencer ceci

a = WsPrm.Range("NomAg") ' récupère le nom de la liste utiliser ici Alist2
b = Range(a).Value ' normalement récupère les valeurs de la liste ici des noms
c = MAX(LEN(b ))

en "c" j'aimerai donc avoir la taille du nom le plus long puis définir avec cette variable la taille de mes colonnes

With Wshebdo.Cells(1, 3).Select
        Range(Selection, Selection.End(xltoright)).Select
Selection.ColumnWidth = c

Je reste à votre disposition pour toutes idées,

Merci

Bonjour,

je crois que tu n'abordes pas le problème de la bonne façon. Ajuste lors du changement si qq chose est affiché non ?

Sinon ça sera toujours qq d'approximatif vu les différentes unités de largeur utilisées par excel selon ce que tu regardes.

Et le plus long en caractères n'est pas forcément le plus large.

[C2:AA8].Columns.AutoFit

Sinon tu colles ta liste de nom dans une colonne temporaire, autofit dessus et tu relèves la largeur.

eric

Merci eriiic pour cette idée,

Mais comment je peux déterminer la largeur d'une cellule ? puisque effectivement je cherches plutôt le nom le plus "large " que le plus long.

J'avais complété mon post, tu n'as pas dû lire la dernière ligne.

eric

Re à tous,

Je pense ne plus êtres loin de la solution mais j'ai encore un petit probleme,

Sub test()
With WsPrm.Columns("A:BZ").AutoFit
a = WsPrm.Range("NomAg")
b = Range(a).Width ' -----------> la valeur qui revient est à 54.75 alors que ma colonne a une largeur d'environ 9
End With
With Wshebdo
.Columns("C:AA").ColumnWidth = b
End With
End Sub

j'ai un très gros écart entre la valeur récupérée et ma valeur réelle. Je me demande donc ou il récupère cette valeur de 54,75.

si vous avez des idées là je sèches. Sinon le reste du code fonctionne bien.

j'ai trouver mon erreur

La solution est

b = Range(a).Width remplacer par b = Range(a).ColumnWidth

Et c'est parfait,

Merci aux différents coup de pouce qui m'on mit sur la bonne piste.

A bientôt

Normal, comme je te disais excel n'utilise pas les même unités selon ce que tu regardes.

ColumnWidth est en 'largeur du caractère "0" en style Normal', et Width est en points (voir l'aide)

Et tu dois mettre toute ta liste sur 1 colonne, pas plusieurs :

Application.ScreenUpdating = False

Columns(1).Insert Shift:=xlToRight ' colonne temporaire ou liste déjà prête qq part

With Columns(1)

' coller la liste en colonne

[A1] = "Ben"

[A2] = "Pierre-Marie-Paul"

.AutoFit

[B:E].ColumnWidth = .ColumnWidth

.Delete

End With

Application.ScreenUpdating = True

Oui effectivement c est en lisant sur un forum que j ai compris qu il y avait une différence d unité entre .width et .columwidth. maintenant j ai plusqu à harmoniser la taille de mes polices pour que rien ne depasse. ..

Parcontre j applique la taille à tte mes colonnes car elles accueillent toutes la même liste. Il reste plus qu a rendre dinamique la deincrementation de ma liste.

Si d ailleurs certain d entre vous peuvent jetter in oeil je suis preneur parce que je suis dessus depuis quelques semaines

https://forum.excel-pratique.com/excel/liste-deroulante-avec-choix-qui-se-desincremente-t86704.html

Rechercher des sujets similaires à "trouver mot long liste"