PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Champ tableur - largeur automatique des colonnes du contenu des cellules
Champ tableur - largeur automatique des colonnes du contenu des cellules
Débuté par Jean-Christophe, 02 déc. 2021 13:04 - 5 réponses
Posté le 02 décembre 2021 - 13:04
Bonjour à tous,

Dans le champ tableur si on positionne la souris entre deux entêtes de colonne et qu'on double-clique, la largeur de la colonne (à gauche du point cliqué) adapte automatiquement sa largeur en fonction du contenu de ses cellules.

En revanche, je n'ai pas trouvé si on faire lancer la même action par programmation ?

Merci d'avance,

Jean-Christophe
Membre enregistré
3 845 messages
Popularité : +227 (347 votes)
Posté le 02 décembre 2021 - 15:22
Bonjour,
A priori, pas directement style(TableurAjusteColonne).
Toutefois, une solution de contournement consisisterait à
1 parcourir la colonne en question (e.g "B") pour rechercher le contenu le plus long
2 Récupérer la largeur en pixel de cette cellule via TexteLargeur(TBLR_MonTableur["B"],saContenuLePlusLong)
3-Affecter le résultat à la largeur de la colonne via la propriété Largeur

--
Il y a peut être plus simple, mais, ça tourne
Membre enregistré
3 845 messages
Popularité : +227 (347 votes)
Posté le 02 décembre 2021 - 20:39
le code suivant fait le boulot :
tabSelection est tableau de chaîne
saNomColonne est chaîne

tabSelection=TableurRécupèreSélection(TBLR_Test)
SI tabSelection..Occurrence=0 ALORS
RETOUR
FIN

saNomColonne=TableurRécupèreColonne(tabSelection[1])
TableurAjusteColonne(TBLR_Test,saNomColonne)


// Remarques : Le nom de la cellule peut être ABC123, on ne peut pas déduire immédiatement le nom de la colonne
FONCTION TableurRécupèreColonne(saNomCellule est chaîne) :chaîne
nNoColonne est un entier
saNomColonne est une chaîne


nNoColonne=xlsNomVersCoordonnées(saNomCellule,xlsNumColonne)
saNomColonne=xlsCoordonnéesVersNom(nNoColonne,1) //On est maintenant sur de la taille du nom de la cellule

RENVOYER Gauche(saNomColonne,Taille(saNomColonne)-1)


Procedure TableurAjusteColonne(chMonTableur est Champ, saNomColonne est chaîne)
saNomCellule est une chaîne
nTailleMax est entier
nLargeurMax est entier
nLigneEnCours est entier

//On cherche la colonne la plus large
POUR nLigneEnCours=1 _À_ chMonTableur..NombreLigne
saNomCellule=ChaîneConstruit("%1%2",saNomColonne,nLigneEnCours)
SI nTailleMax<Taille(chMonTableur[saNomCellule]) ALORS
nTailleMax=Taille(chMonTableur[saNomCellule])
FIN
FIN

nLargeurMax= TexteLargeur(TBLR_Test["A1"],Complete("",nTailleMax,"A")) //Une autre cellule que A1 aurait pu faire l'affaire
TBLR_Test[saNomCellule]..Largeur= nLargeurMax


--
Il y a peut être plus simple, mais, ça tourne
Membre enregistré
3 845 messages
Popularité : +227 (347 votes)
Posté le 02 décembre 2021 - 20:40
Au lieu de
TBLR_Test[saNomCellule]..Largeur= nLargeurMax

lire
chMonTableur[saNomCellule]..Largeur= nLargeurMax


--
Il y a peut être plus simple, mais, ça tourne
Membre enregistré
948 messages
Popularité : +30 (92 votes)
Posté le 02 décembre 2021 - 22:43
//On est maintenant sur de la taille du nom de la cellule

s^r
Posté le 03 décembre 2021 - 23:35
Merci Voroltinquo ça marche nickel.

J'ai juste ajusté le choix de la cellule "A1" pour choisir une cellule de la colonne qui à le format le plus contraignant (taille de police en particulier).