oui c'est sur.
tu n'aurais pas une autre solution pour que je puisse laisser afficher 2 colonnes?
faire une autre listbox et les synchroniser? Mais comment les synchroniser pour que quand on descend une liste l'autre suive????
oui c'est sur.
tu n'aurais pas une autre solution pour que je puisse laisser afficher 2 colonnes?
faire une autre listbox et les synchroniser? Mais comment les synchroniser pour que quand on descend une liste l'autre suive????
Synchroniser deux listes c'est pas gagné gagné d'avance.
Il faudrait synchroniser les ascenseur verticaux et arrivé en bas de liste la position des ascenseurs n'est plus correcte et ça va faire un décalage.
En tout ça ne facilitera pas les choses côté programmation (API à coup sûr).
Avec un formulaire ça reste jouable, il faut programmer quand même un peu pour lier les contrôles aux champs de la requête si elle change...
Et pis rajouter la classe clScrollForm pour figer les contrôles.
Tu peux faire quelque chose de générique avec une fonction d'initialisation dans le sous-form qui prendrait en paramètre la requête, la taille des colonnes, la colonne liée, le contrôle du formulaire parent à mettre à jour...
Faudrait voir le résultat pour savoir si ça vaut le coup...
en gros c'est compliqué à mettre en place. le problème c'est que j'ai vraiment besoin de figer 2 colonnes et d'apres tout ce que tu me dis ca m'a l'air bien compliqué et long. en plus je ne sais pas trop comment faire
aieeee aieeee aieeee
Je ne veux pas te décourager non plus, c'est pas si énorme que ça.
Si la fonctionnalité est vraiment importante ça peut valoir le coup c'est à toi d'en juger.
ben en fait il me faut figer les 2 colonnes pour avoir en permanence ces informations affichées mais c'est pas vital non plus. cependant j'aimerais bien arrivé à le faire. mais je sais plus par où commencer et quoi faire !!!
lol suis perdue !!!![]()
![]()
Voici mon code d'erreur avec ton code
(Formulaire1 est le nom du formulaire ou se situe le sous formulaire ssform)
Pourquoi ce message d'erreur???
Bon dès que j'ai le temps je ferai un formulaire de test pour voir...
Ton erreur apparemment c'est que tu ne peux pas affecter du SQL directement à la propriété SourceObject, il faut y mettre un objet (requete,table ou formulaire).
Le formulaire c'est sûrement nécessaire pour pouvoir personnaliser le sous-form (edition non autorisée, pas de boutons de déplacement en bas, lecture de la valeur sélectionnée, ...)
Un petit exemple en pièce jointe.
Le formulaire SousFormListe devrait pouvoir être utilisé tel quel, en le copiant dans ton appli.
Tu mets ensuite ce formulaire dans ton contrôle sous-formulaire, propriété SourceObject.
Et dans le formulaire principal, "sur ouverture" par exemple tu initialises le sous-form :
CadreSousForm : c'est le contrôle qui contient le sous-formulaire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Me.CadreSousForm.Form.InitializeList "select * from tabletest", "TxtValue", 0, 1, Array(-2, 0, 1, 2) '
Il y a dans le formulaire SousFormListe la fonction InitializeList pour initialiser tout ça, les paramètres dans l'ordre sont :
- pSQL : Le SQL de la source de données
- pValueInControl : le nom du contrôle du formulaire principal qui doit prendre la valeur sélectionnée dans le sous-form
- pLinkColumn : le numéro de la colonne qui contient la valeur à renvoyer
(la numérotation commence à zéro)
- pFixColumns : nombre de colonnes figées
- pColumnWidth : largeurs des colonnes
C'est un tableau de la forme : Array(TailleColonne0, TailleColonne1, ...)
Avec 0 pour masquer la colonne, -2 pour un dimension automatique en fonction de la taille du texte.
(Seul pSQL est un paramètre obligatoire)
Quelques explications :
- J'ai mis 10 contrôles dans le formulaire, nommé TxtChampX avec X de 0 à 9.
- Ces dix contrôles ont une étiquette attachée pour recevoir le libellé du champ (propriété légende ou à défaut le nom du champ)
- Au chargement du sous-formulaire, les champs source des contrôles sont changés en fonction des champs de la requête; les légendes des étiquettes sont également modifiées.
- Les formats des champs sont propagés (si il y a par exemple "Date, Complet" dans le champ de table, alors le format sera appliqué à la colonne du formulaire)
- Le sous-formulaire s'affiche en mode feuille de données, en fait on arrive quand même à figer les colonnes en mode feuille de données
- Pour figer les colonnes c'est embêtant la propriété est en lecture seule, donc il faut mettre le focus sur la colonne à figer puis lancer la commander FreezeColumn (c'est fait sur le premier déclenchement de l'événement "Sur Activation", on ne peut pas le faire au chargement du formulaire)
- Lorsqu'on change d'enregistrement dans le sous-formulaire, le champ pValueInControl est mis à jour dans le formulaire principal
Peut-être encore quelques corrections et changements à apporter en fonction de ce que tu veux faire.
Bye.
Merci beaucoup pour ton code je vais l'étudier et je te demanderais si j'ai des petits problèmes.
J'ai testé ton code il fonctionne mais j'ai quelques petits problèmes. Quelque soit le nombre de colonnes dans ma requête, il m'affiche toujouts que les 3 premières. (J'ai rajouter d'autres controles avec la même logique de nom) donc je comprend pas pourquoi ca ne m'affiche que les 3 premières colonnes
![]()
J'ai compris comment afficher les autres colonnes.
Je continue à tester
Ton code marche bien mais j'aimerais savoir comment remettre a vide le sous formulaire?
J'explique : voila j'initialise mon sous formulaire en cliquant sur un bouton. et la requête est a chaque fois différente. Quand je reclique sur mon bouton et que ma requête contient moin de champs que la précédente, dans le sous formulaire il reste les colonnes en plus. et Il m'affiche #Nom? dans les cellules en trop.
Comment faire pour éviter ca?
et pour masquer les colonnes ca ne marche pas. le code est le suivant
ca ne me masque pas les colonnes. Pourquoi??
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ' Largeur nulle --> on masque la colonne Me.Controls(gPrefixChamp & lCpt) = True
dans ce bout de code
apparemen le lCtrl.ColumnHidden ne marche pas car il ne me cache pas les colonnes superflu pourquoi???
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ' Masque les colonnes superflues ou celles dont la taille demandée est nulle lCtrl.ColumnHidden = (lNumCtrl >= lRS.Fields.Count) Or pColumnWidth(lNumCtrl) = 0
C'est bon j'ai trouver j'ai remplacer le bout de code
par
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ' Masque les colonnes superflues ou celles dont la taille demandée est nulle lCtrl.ColumnHidden = (lNumCtrl >= lRS.Fields.Count) Or pColumnWidth(lNumCtrl) = 0
et ca me cache les colonnes superflues
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 If lNumCtrl >= lRS.Fields.Count Or pColumnWidth(lNumCtrl) = 0 Then lCtrl.ColumnHidden = True Else lCtrl.ColumnHidden = False End If
(je sais je fais moi même les questions et les réponses lol)
slt,
à priori la ligne devraient être :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Me.Controls(gPrefixChamp & lCpt).ColumnHidden = True
désolé je t'ai peut-être attaché un fichier ancien, je devais être fatigué moi...
c'est pas grave ton fichier joint m'a été d'une grande aide et j'ai réussi a résoudre ce petit problème, maintenant tout marche bien et c'est exactement ce que je cherchais a faire
Merci bcp
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager