REDIMENSIONNEMENT AUTOMATIQUE COLONNES/LIGNES POUR MSFLEXGRID

JoePatent Messages postés 171 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 20 juillet 2008 - 28 oct. 2003 à 21:00
malo777 Messages postés 88 Date d'inscription jeudi 21 avril 2005 Statut Membre Dernière intervention 13 juin 2013 - 16 sept. 2012 à 13:56
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/17345-redimensionnement-automatique-colonnes-lignes-pour-msflexgrid

malo777 Messages postés 88 Date d'inscription jeudi 21 avril 2005 Statut Membre Dernière intervention 13 juin 2013 1
16 sept. 2012 à 13:56
merci et bravo
10/10
Fullgate Messages postés 4 Date d'inscription vendredi 23 juillet 2010 Statut Membre Dernière intervention 30 juillet 2010
30 juil. 2010 à 12:23
Bonjour, aider moi dans ce cas vu ke vous avez reussi a executer ce code.
moi j'arrive pas a adapté ce code au mien ...
jai 10 cols dans mon tableau...
Nom de la grille : MSFlexgrid
Merci de m'aider....
adamo901 Messages postés 139 Date d'inscription mardi 18 janvier 2005 Statut Membre Dernière intervention 8 décembre 2008
21 avril 2007 à 17:24
Je trouve que c'est bizard de noter ce code 9/10 alors qu'il merite simplement 10/10


bravo steph62 et bon courage
ton code m'a beaucoup aidé.
grandmok Messages postés 5 Date d'inscription mercredi 20 décembre 2006 Statut Membre Dernière intervention 15 octobre 2007
15 mars 2007 à 14:35
Très bon source, c'est exactement ce dont j'avais besoin. Cependant je pense avoir trouvé un petit bug lors du redimensionnement de la hauteur d'une ligne. Celui-ci est fait pour chaque colonne parcourue, ce qui engendre un redimensionnement dès qu'une cellule du datagrid àa plus d'une ligne.

Un exemple :

hauteur de la ligne au départ : 200
1ère cellule : 1 ligne -> hauteur = 200
2ème cellule : 2 lignes -> hauteur 200 *2 400
3ème cellule : 1 ligne -> hauteur = 400
4ème cellule : 2 lignes -> hauteur 400 *2 800

Au final on se retrouve avec une hauteur correspondant à 4 lignes alors que le nombre de lignes maxi est de 2.
Je pense qu'il faut donc gérer une variable correspondant au nombre maxi de lignes dans les cellules et faire le redimensionnement quand tu as parcouru toutes les colonnes.

J'espère que j'ai été clair... En tout cas je te mets 9/10 pour ton source.
cs_titibo Messages postés 2 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 24 octobre 2006
24 oct. 2006 à 17:32
Encore plus simple et logique au lieu de parcourrir les lignes, il suffit de faire une requete avec un recordset où l'ont cherche le max du nombre de caractère max(len(CHAMPS)) et hop ! le tour est joué vous avez le nombre de caractère max sur chaque colonne et plus qu'une ligne à tester.
Zylott Messages postés 104 Date d'inscription jeudi 25 juillet 2002 Statut Membre Dernière intervention 28 septembre 2006
6 juil. 2006 à 12:53
Bjr,

Pour info , il y a mieux :

Private Type Size
cx As Long
cy As Long
End Type

Private Declare Function GetTextExtentPoint32 Lib "gdi32" Alias "GetTextExtentPoint32A" _
(ByVal hdc As Long, ByVal lpsz As String, _
ByVal cbString As Long, lpSize As Size) As Long

Public Sub ResizeColumns(hdc As Long, flexgrid As MSFlexGrid)

Dim idxRow As Long, idxCol As Long, lngMax As Long
Dim texte As String, taille As Size

With flexgrid
'Parcoure les colonnes
For idxCol = 0 To .Cols - 1
lngMax = 0
'Parcoure les lignes
For idxRow = 0 To .Rows - 1
texte = .TextMatrix(idxRow, idxCol)
'met la taille du texte de la cellule en pixels dans taille
GetTextExtentPoint32 hdc, texte, Len(texte), taille
'lngMax est la longueur du texte le plus long dans cette colonne
If taille.cx > lngMax Then lngMax = taille.cx
Next
'met lngMax en twips en ajoutant 10 pixels pour les marges
If lngMax > 0 Then lngMax = (lngMax + 10) * Screen.TwipsPerPixelX
'Applique la largeur de colonne si besoin
If lngMax > .ColWidth(idxCol) Then .ColWidth(idxCol) = lngMax
Next
End With

End Sub


Voici comment appeler la procédure ResizeColumns :
vb
ResizeColumns Me.hdc, MSFlexGrid1



Trouver sur un autre site , je n'en suis pas l'auteur.
Utilisateur anonyme
23 juin 2006 à 14:54
Juste un petit "bug" a signaler,
la fonction .FormatString interprete le ";" comme une commande d'entete de ligne.
Et forcément j'ai des données avec des ";" donc ça merdouille

pour y remedier j'ai remplacé la ligne 61
"If Len(Texte) > Len(LongTexte(Colonne)) Then LongTexte(Colonne) = Texte 'stockage du texte dans le tableau des texte les plus long "

Par
"If Len(Texte) > Len(LongTexte(Colonne)) Then
TexteRemplacement = ""
For i = 1 to Len(Texte)
TexteRemplcement =TexteRemplacement & "A"
next
LongTexte(Colonne) = TexteRemplacement
end if


Sinon merci ça m'a fait gagner beucoup de temps
thkiller Messages postés 168 Date d'inscription mercredi 24 mai 2006 Statut Membre Dernière intervention 11 septembre 2007
20 juin 2006 à 00:23
Pour cela il te suffi de copier ce code dans ton source aprés le "Option explicit" mais pas dans le form_load
et ensuite dans ton form_load tu écrit le code suivant pour appeler la fonction que tu veint de définir en copiant dans ton source !!:

Call nom_de_la_fonction

Cela fonctionne avec n'importe quel fonction si je ne m'avance pas trops j'ais encore du mal avec les "Piblic" et les "Private" je me doute qu'il doit y avoir une autre methode mais bon....

Pour codé une focntion tu écrit : Public MaFonction -->return sans les "--".
Voila bon code..
cs_Moumoud Messages postés 16 Date d'inscription mardi 7 mars 2006 Statut Membre Dernière intervention 4 septembre 2008
20 juin 2006 à 00:00
Bonsoir Monsieur...
SVP comment utiliser ce module dans le code Form_load ???
j'attend votre réponse !!
merci
thkiller Messages postés 168 Date d'inscription mercredi 24 mai 2006 Statut Membre Dernière intervention 11 septembre 2007
15 juin 2006 à 13:29
Bonjour comment je peut faire pour que ce code prenne en compte tout les case de de mon grid ?
Goldeneye007 Messages postés 70 Date d'inscription mercredi 7 décembre 2005 Statut Membre Dernière intervention 9 juillet 2010
7 mai 2006 à 08:32
comment appeller ce module dans la datagrid car moi elle se redimensionne pas
cs_mophi Messages postés 1 Date d'inscription mercredi 12 février 2003 Statut Membre Dernière intervention 18 avril 2006
18 avril 2006 à 00:57
Pratique et efficace. Merci
Utilisateur anonyme
14 mars 2006 à 14:17
Cool ! C'est exactement ça que je cherchais, j'ai trouvé en 2mn
foofur Messages postés 13 Date d'inscription mardi 25 février 2003 Statut Membre Dernière intervention 5 février 2008
17 févr. 2006 à 15:53
Exactement ce dont j'avais besoin. Parfait. Merci
pouda Messages postés 264 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 27 octobre 2014
4 déc. 2005 à 00:54
tout simplement génial merci a toi...
MrAlgo Messages postés 13 Date d'inscription vendredi 10 décembre 2004 Statut Membre Dernière intervention 22 juin 2005
30 mai 2005 à 17:19
Désolé de vous embeter avec mon problème masi moi je commence en vb, et j'avais ce problème pour redimensionner, ainsi comme l'inventeur de ce code la dit j'ai copié ce code dans un module mais cela ne fait rien..est ce que je dois rajouté un code dans le form_load du MsflexGrid??

Question stupide pour vous certes mais je ne connais pas trop encore ce qui est procédure et fonction..sorry

Merci pour vos réponses.

Amicalement Damien
2clo Messages postés 1 Date d'inscription lundi 23 mai 2005 Statut Membre Dernière intervention 23 mai 2005
23 mai 2005 à 12:32
Tres bon ctl. je gere plusieurs listes et tous va bien.
Juste une remarque, on recupére la taille de la chaine la plus longue mais si la fonte n'est pas de taille fixe il y a souci.
Peux tu me dire comment recuperer la taille reelle (en pixel ...) d'une chaine de caratere et de sa fonte ce qui permettrai de mettre la chaine la plus large et non pas la chaine la plus longue.
Merci pour ce code.
ydx35 Messages postés 8 Date d'inscription vendredi 12 septembre 2003 Statut Membre Dernière intervention 19 octobre 2005
3 nov. 2004 à 14:21
Bnjr,

Interessant.....
Question (bete, peut-etre, mais, n'est-ce pas ?) :
y-a-t-il dan sle meme genre un moyen de pré-formater
la saisie et le format numérique (saisie par un KeyPressed...)

@+
cs_rodcobalt22 Messages postés 193 Date d'inscription dimanche 10 février 2002 Statut Membre Dernière intervention 16 février 2016
19 juil. 2004 à 08:35
Est tu sur de passer un MSF ? La première, j'avais pas fait gaffe et je me servait d'un grid !
Après, ça dépend également des données que tu insère dans ton MSF : "Texte only ?!".
Sinon, peut être que ton appel n'est pas correct, vérifie l'état de ton paramètre. Normalement 1 seul controle fonctionne, le premier appelé par la procédure.
Conseil simple qui ne te seront peut être pas utile, mais bon ça peut toujors aider ! ;-)
maxdebide Messages postés 13 Date d'inscription lundi 7 juin 2004 Statut Membre Dernière intervention 26 juillet 2004
16 juil. 2004 à 16:14
Elle ne fait rien chez moi ,y a t-il qqchose à faire vis à vis du commentaire précédent ??
maxdebide Messages postés 13 Date d'inscription lundi 7 juin 2004 Statut Membre Dernière intervention 26 juillet 2004
16 juil. 2004 à 16:14
Elle ne fait rien chez moi ,y a t-il qqchose à faire vis à vis du commentaire précédent ??
cs_rodcobalt22 Messages postés 193 Date d'inscription dimanche 10 février 2002 Statut Membre Dernière intervention 16 février 2016
6 févr. 2004 à 11:57
C'est re moi.
J'ai bien annalyser ton code, je veux t'avouer que j'ai pas tout compris.
Mais j'ai remarqué aussi quelque chose.
Cette procédure ne marche qu'une seule fois. en effet lorsque je renvoie un autre MSFlex ( diffèrent du premier ( MSF_Resultat))
La procédure ne le redimensionne pas ( MSF_Selection ).
de ce fait, j'ai fait "msflex.name" et c'est bien le bon controle qu'il a en paramètre.
Pourrais comprendre ce bug et y remédié.
ça serait cool.
cs_rodcobalt22 Messages postés 193 Date d'inscription dimanche 10 février 2002 Statut Membre Dernière intervention 16 février 2016
4 févr. 2004 à 10:19
je veux simplement dire une chose : " Géniaaaaaaalllllll" 9/10
Un truc qui pourrait être utile, est ce possible de redimensionner la fenêtre qui contient le msfgrid ????
Si tu sais le faire ou quelqu'un d'autre dailleur, ça serait intéressant de l'intégré dans le module.
sinon c'est une procédure fort utile. Bravo
Cobham Messages postés 1 Date d'inscription vendredi 4 avril 2003 Statut Membre Dernière intervention 12 janvier 2004
12 janv. 2004 à 11:32
Merci pour ce code bien pratique et rapide d'exécution.

Grâce à toi, des africains (mes clients) pourront visionner les données
de manière optimale !!!
cs_trabice Messages postés 328 Date d'inscription mercredi 26 novembre 2003 Statut Membre Dernière intervention 24 novembre 2005 1
26 nov. 2003 à 18:12
merci bcp pr ce petit code
fabrice
tres utile
JoePatent Messages postés 171 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 20 juillet 2008
28 oct. 2003 à 21:09
Oublie mon dernier commentaire. Tout fonctionne tres bien ! Merci pour cette sources... tres tres utiles !
JoePatent Messages postés 171 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 20 juillet 2008
28 oct. 2003 à 21:00
Est-ce normal que j'obtienne un message d'erreur quand je tente de passer un msflexgrid ou un mshflexgrid en parametres ?