Problème listbox et bouton

Product :4D - 4D Server
4D : v14
OS : Windows

Bonjour,
C’est re-moi ( :mrgreen: )
J’ai un petit soucis avec une listbox et un bouton. :mrgreen:
J’ai une listbox qui affiche dans une colonne le nom d’un société ,dans une autre colonne le mois et une autre l’année.
Je dois choisir une ligne de la listbox,puis j’ai un bouton ,si je clique dessus 2 alerte arrive qui affiche le mois et l’année de la ligne choisie.
Sauf que hélas cela affiche tous le temps comme résultat la première ligne … Et non celle choisie par un clic de souris sur la listbox…
Merci d’avance pour votre aide. :pray:
Voici le code du bouton :
<code 4D>
C_ENTIER($rang)
C_ENTIER($mois)
c_entier($annee)
$rang:=Self->
CHERCHER([D_Journalvente];[D_Journalvente]A10_IdentJournal=TA10_IdntJVen{$rang})
$mois:=[D_Journalvente]E_Mois
$annee:=[D_Journalvente]E_Annee
NB:=Enregistrements trouves([D_Journalvente])

$a:=0
ALERTE(“nous somme le mois”+chaine($mois))
ALERTE(“et l’année”+chaine($annee))
Si (NB>0)
//Méthode a exécuter ici
Fin de si
</code 4D>

regarde ce fil
http://forums.4d.fr/Post/FR/16619983/1/16620146#16620146

Et celui-ci
http://forums.4d.fr/Post/FR/15577362/1/15577363#15577363

Salut et merci pour tes réponses.
Petit question : mon bout de code est a des année lumières de la vrai réponse ? Car de ce que je lis ce n’est absolument pas cela comparé a ce que j’ai écris … On ne doit pas normalement utilisé un self-> (ou objet lire pointeur)?
Navré mais je me sens perdu et j’aimerai bien comprendre pour pas refaire d’erreur.
Cordialement

Self est une vieille commande de 4D dont la doc dit qu’elle est obsolète et qu’on doit utiliser OBJET lire pointeur à la place. Moi, quand j’ai une commande très utile, qui marche toujours et fait en 4 lettres ce qu’une autre fait en 18 :
• je ne trouve pas que ce soit un progrès
• je continue de m’en servir
• je braille dès qu’on m’en donne l’occasion que 4D devrait comprendre que les commandes du langage qui ne concerne pas des propriétés compliqués d’objets d’interface n’ont pas besoin d’être verbeuses, au contraire
(si on les retient pas, ils vont renommer Num, String, False et Date)

S’il s’agit juste d’afficher des valeurs de champs de la ligne sélectionnée et que ta listbox est une listbox sélection, il y a plus simple, dire à 4D d’aller sur le bon enregistrement dans ta sélection :
<code 4D>
$nomLB_t:=“maListbox” //nom dans les propriétés
LISTBOX LIRE POSITION CELLULE(;$nomLB_t;$j_l;$i_l) //où le clic a eu lieu
si($i_l>0)
LISTBOX LIRE TABLE SOURCE (
;$nomLB_t; $numTable_l) //c’est quoi la table
ALLER DANS SÉLECTION($table_p->;$i_l) //aller sur l’enregistrement cliqué
ALERTE("nous somme le mois “+chaine([D_Journalvente]E_Mois)+” et l’année "+chaine([D_Journalvente]E_Annee))
Fin de si
</code 4D>

Bonjour,
Merci pour votre réponse !
J’ai suivi votre conseil avec votre bout de code mais un problème ce présente devant moi :
J’ai un vilain message d’erreur :oops:

[]19047536;“Mon vilain message”[/]

Ce qui est étrange : cela fait bien ce que ce que je veut faire (cela donne le bon mois et année) ! Mais j’ai ce message d’erreur ! :frowning:

Ma faute, j’ai oublié une ligne entre la 4 et la 5, il faut convertir le numéro de table en pointeur de table :
<code 4D>
LISTBOX LIRE TABLE SOURCE(*;$nomLB_t;$numTable_l) //c’est quoi la table
$table_p:=Table($numTable_l) //convertir en pointeur
ALLER DANS SÉLECTION($table_p->;$i_l) //là ça ira, ça ira, ça ira…
</code 4D>

Hypothèse sur le fait que ça marche malgré cette erreur :
http://doc.4d.com/4Dv16/4D/16/ALLER-DANS-SELECTION.301-3037081.fr.htmlALLER DANS SELECTION> ( {laTable ;} enregistrement )
Tu notes que le paramètre 1, laTable, est optionnel ; cela signifie que si on a utilisé http://doc.4d.com/4Dv16/4D/16/TABLE-PAR-DEFAUT.301-3037040.fr.htmlTABLE PAR DEFAUT> auparavant, 4D a peut-être considéré que le aller dans selection concernait cette table.
Maintenant que j’ai dit ça, je trace vite un gros trait sur cette possibilité d’omettre la table que plein de commandes propose, c’est un excellent moyen de rendre le code illisible et indébogable.

Merci pour ton précieux aide Arnaud. Mais je crois que je suis maudit … :oops:

[]19047654;“erreur2”[/]

Autre question : les valeurs des dates et années je pourrais les ré-exploiter sans soucis dans une autre méthode qui s’exécute juste après ? :oops:
Merci d’avance :mrgreen:

Normal si tu as utilisé le code d’Arnaud. Tu as mal recopié le nom de la variable $Num_table_l avec un L à la fin pour signifier que c’est un entier long !!!

:?: J’ai beau avoir déclarer en entier long cela ne change rien…
Je redonne mon code au cas ou … Soit je suis “idiot” :cry: soit il y a un problème :-? …
<code 4D>
c_entier long($numTable_l)
Au cas ou
: (Evenement formulaire=Sur clic)
$nomLB:=“ListBox” //nom dans les propriétés
LISTBOX LIRE POSITION CELLULE(;$nomLB;$j;$i) //où le clic a eu lieu
si($i>0)
LISTBOX LIRE TABLE SOURCE(
;$nomLB;$numTable_l) //c’est quoi la table
$table:=Table($numTable_l)//convertir en pointeur
ALLER DANS SÉLECTION($table->;$i) //aller sur l’enregistrement cliqué
ALERTE("nous somme le mois “+Chaine([D_Journalvente]E_Mois)+” et l’année "+Chaine([D_Journalvente]E_Annee))
Fin de si
Fin de cas

</code 4D>

Bizarre. Fais un test de validité du numéro de table obtenu par LISTBOX LIRE TABLE SOURCE.
<code 4D>
c_entier long($numTable_l)
Au cas ou
:(Evenement formulaire=Sur clic)
$nomLB:=“ListBox”//nom dans les propriétés
LISTBOX LIRE POSITION CELLULE(;$nomLB;$j;$i)//où le clic a eu lieu
si($i>0)
LISTBOX LIRE TABLE SOURCE(
;$nomLB;$numTable_l)//c’est quoi la table
si(Non(est un numero de table valide($numTable_l)))
alerte(“y’a un problème”)
fin de si
$table:=Table($numTable_l)//convertir en pointeur
ALLER DANS SÉLECTION($table->;$i)//aller sur l’enregistrement cliqué
ALERTE("nous somme le mois “+Chaine([D_Journalvente]E_Mois)+” et l’année "+Chaine([D_Journalvente]E_Annee))
Fin de si
Fin de cas
</code 4D>
Je commence à me demande si c’est une listbox sélection, ou si tu ne t’es pas planté dans le nom de la listbox…

Voici ma listbox (cela ira plus vite). C’est une listbox on ne peut plus banale …
[]19047908;“ma listbox”[/]
J’ai fait le test et “j’ai un problème” :cry:

Merci d’avance pour vos réponse

Personne n’a une idée ? :pray:
J’ai re-vérifier : c’est une listbox basique ,j’ai tous mis en entier long, le nom de la listbox est le bon, le code s’exécute ,fait ce que je lui demande ,mais m’affiche toujours ce maudit message d’erreur :evil:
Désolé au pro si cela parait idiot comme question,mais je suis totalement novice sur 4D !
Je suis perdu…
Merci d’avance pour les réponses :pray:

On veut pas le plat, on veut la recette :wink:
envoie plutôt la copie écran de la liste des propriétés de cette listbox :
[]19048067;“Your comment here…”[/]

Arnaud Tu est mon sauveur ! :oops:
Est-ce que c’est grave docteur du coup ? :mrgreen:
[]19048078;“ListboxFenetre”[/]
Merci d’avance :mrgreen:

source de données = Tableaux :mrgreen:
listbox sélection et listbox tableau, c’est tellement différent que je les distingue d’emblée par des préfixes (LBa = array, LBs = sélection) dans mon code. Je te conseille de passer un peu de temps à http://doc.4d.com/4Dv15R5/4D/15-R5/Gestion-programmee-des-objets-de-type-List-box.300-2937096.fr.htmllire la doc> et les spécificités de chaque. Dont une - qui n’est pas la moindre - est qu’avec le type tableau il ne s’agit plus de lire des enregistrements d’une table, mais des tableaux en mémoire.

Pour en revenir à ton problème, tu as besoin de connaitre la ligne sélectionne, puis de lire année et mois de cette ligne.

Une listbox tableau a comme représentation en mémoire un tableau booléen, dont une ligne vaut Vrai si elle est sélectionnée. Quand à année et mois, apparemment les colonnes correspondantes de ta LB s’appellent “TE_annee” et “TE_mois”, ce sont les tableaux à lire.

<code 4D>
$pointeurTableauBooleen_p:=OBJET lire pointeur(Objet nommé;“Listbox”) //pointeur tableau bool
$indice_l:=Chercher dans tableau($pointeurTableauBooleen_p;Vrai) //lecture de l’indice
si($indice_l<1)
alerte(“pas de sélection”)
sinon
ALERTE(chaine(TE_mois{$i_l})+" "+chaine(TE_annee{$i_l}))
fin de si
</code 4D>

: Damien PELTIER

Arnaud Tu est mon sauveur !
[]19048302;“Your comment here…”[/]
en avant tous en chœur : allez lou-ia, allez lou-ia, allez lou-ia…

Bonjour,
Arnaud au secours ! :mrgreen: ou quelqu’un d’autre :mrgreen:

[]19051189;“Autre erreur…”[/]

Il se trouve que si je fais continuer : j’ai un résultat inférieur a 1 et donc “pas de sélection”
Le problème est que le message d’erreur pour moi “argument incompatible” veut tous et rien dire …
En regardant la doc de "chercher dans tableau " j’ai remarquer dans les exemple que le première paramètre contient “->” ,j’en ai rajouter une mais … Cela ne marche pas ! (j’ai un autre message)

[]19051195;“encore une autre erreur”[/]

Merci d’avance :pray:

Bonjour,

: Damien PELTIER

j’ai remarquer dans les exemple que le première paramètre contient
“->” ,j’en ai rajouter une
Bien

: Damien PELTIER

mais … Cela ne marche pas ! (j’ai un autre message)

remplacer $i_l par $indice_l

Allélouia comme dirait Arnaud ! :mrgreen:
Cela marche ! MERCI a tous ceux qui m’ont aider :oops:
Cordialement