[Résolu][Base] Formulaire ouvert quand champ de liste vide

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
belleva
Membre OOrganisé
Membre OOrganisé
Messages : 87
Inscription : 16 déc. 2008 14:54

[Résolu][Base] Formulaire ouvert quand champ de liste vide

Message par belleva »

exemple.odb
Bonsoir à tous.

Près recherche et tâtonnement infructueux, je m'en réfère à vous.
Dans le fichier joint, sur le formulaire devis, j'ai une liste déroulante client qui va s'afficher en détail à côté de cette liste.
Cette liste est associée à deux macros que j'ai repris et bidouillé un peu.
- Une macro sur perte de focus qui rafraichi la liste ce qui a pour effet d'afficher les données à jour à côté.
- Une macro sur changement contenu modifié, qui fait la recherche et qui ouvre un autre formulaire si il n'y a pas de résultat de recherche.

Mon souci, se trouve dans le fait, que ma liste déroulante n'a pas de champ vide et que visiblement, ce n'est pas possible d'en avoir un.
Sans titre.png
Note: Je tiens à garder cette présentation de liste pour un confort d'utilisation de recherche. La liste apparait donc grâce à un Concat.

Du coup la macro ne peut fonctionner puisqu'il n'y a pas de champ vide. Je vous met la macro:

Code : Tout sélectionner

option explicit
Sub SaisieDevisRechercherOuvrirNouveauClient(PysEvent)
const PysNomForm = "Clients", PysColID = "ID_Client"
dim PysForm as object
dim PysEnregs as object
dim PysEnCours as object
dim PysTrouve
dim PysInf as Long
dim PysSup as Long
dim PysMilieu as Long
dim PysCherche as String

with PysEvent.Source.Model
   PysCherche = .ValueItemList(.SelectedItems(0))
end with

PysForm = thiscomponent.drawPage.forms.getByName(PysNomForm)
PysEnregs = PysForm.createResultSet()

PysInf = 0
PysSup = PysEnregs.rowCount
PysTrouve = false

PysEnregs.absolute(1)

PysEnCours = PysEnregs.columns.getByName(PysColID)


if PysCherche = PysEnCours.String then
   PysTrouve = true
else
   Do while PysInf <= PysSup
      PysMilieu = INT((PysInf + PysSup) / 2)
      PysEnregs.absolute(PysMilieu)
      PysEnCours = PysEnregs.columns.getByName(PysColID)
       if PysCherche = PysEnCours.String then PysTrouve = true:Exit Do
       If PysCherche < PysEnCours.String then PysSup = PysMilieu - 1
       If PysCherche > PysEnCours.String then PysInf = PysMilieu + 1
   Loop
end if

if PysTrouve = true then
   PysForm.moveToBookmark(PysEnregs.Bookmark)
   thiscomponent.currentcontroller.getControl(PysForm.getByName("fmtRéfClient")).setFocus
else
   msgbox "Enregistrement non trouvé. Vous allez être redirigé vers l'enregistrement d'un nouveau client.", 64, "Rechercher"
   ThisDatabaseDocument.FormDocuments.getByName("Les Formulaires Clients").getByName("F_SaisieNouveauClient").open
end if
End Sub
J'ai essayé en changeant les valeurs

Code : Tout sélectionner

ValueItemList(.SelectedItems())
ou

Code : Tout sélectionner

PysInf (0)
ou

Code : Tout sélectionner

PysEnregs.absolute(1)
mais rien n'y fait.
J'ai également envisagé de mettre la première ligne de ma table client vide, afin que lorsque la macro tombe sur cette ligne, elle m'ouvre le second formulaire, mais la aussi je me suis retrouvée face à deux choses que je n'ai pas su régler:
1er - La première ligne n'est jamais complètement vide puisqu'il y a la clé primaire, du coup si on sélectionne cette ligne la valeur retournée n'est pas vide
2ème - Dire à la macro que la liste commence au deuxième enregistrement et que donc tout ce qui se trouve est considéré comme False, car je ne sais tout simplement pas le faire.

Donc si quelqu'un voit une solution... Elle sera la bienvenue :D
Merci d'avance
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par belleva le 08 mai 2015 17:01, modifié 4 fois.
Open Office 4.1 sous Windows sept
Avatar de l’utilisateur
TheHache
PassiOOnné
PassiOOnné
Messages : 653
Inscription : 02 déc. 2009 09:43

Re: [Base]Macro ouvre un formulaire quand champ de liste nul

Message par TheHache »

Bonsoir,

Tu pourrai créer un enregistrement qui n'est pas un client et lorsque celui-ci est choisi, ta macro s’exécute.

J'ai créer un enregistrement fictif : Id Client --> 'Saisissez' et des 'x' dans les autres champs. Un test de cette valeur à la ligne 48 de ta macro et si ce test est vérifié, ton deuxième formulaire s'ouvre.

A toi de modifier l'enregistrement ajouté comme tu l'entends et à le placer en première position. Tu pourrai même demander à ce que les renseignements complémentaires ne s'affichent pas lorsque c'est ce "client" qui est choisi.

@+
 Ajout : 21h08 : Je viens de lire ton post en section [Base], du coup je ne sais pas si ma solution va te ravir. 
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibO 7.4.4.2 - Windows 10 Pro
AOO 4.1.13 - Windows 10 Pro
belleva
Membre OOrganisé
Membre OOrganisé
Messages : 87
Inscription : 16 déc. 2008 14:54

Re: [Base]Macro ouvre un formulaire quand champ de liste nul

Message par belleva »

Je viens de regarder le fichier que tu as fourni, effectivement le test à l'air de fonctionner mais je n'ai pas compris pourquoi en fait, car rien dans la macro n'a été changé (de ce que j'ai vu) du coup, je m'interroge et aimerai arriver à comprendre.

De plus à force de d'enlever et ajouter des lignes clients (ça ne marche pas à tous les coups), la liste déroulante c'est retrouvée avec un grand espace blanc comme je le voulais, mais je ne sais pas comment je suis arrivée à ce résultat.
Sans titre.png
TheHache a écrit : 21h08 : Je viens de lire ton post en section [Base], du coup je ne sais pas si ma solution va te ravir.
Ne t’inquiètes pas, c'est juste que lorsque j'ajoutais un champ avec des lignes vide directement sur ma table, la macro me la comptait comme un client existant, du coup la macro ne fonctionnait pas. Mais visiblement ça ne le fait plus. Pourquoi... La est toute la question.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Open Office 4.1 sous Windows sept
Avatar de l’utilisateur
TheHache
PassiOOnné
PassiOOnné
Messages : 653
Inscription : 02 déc. 2009 09:43

Re: [Base]Macro ouvre un formulaire quand champ de liste nul

Message par TheHache »

Bonjour,
belleva a écrit :... car rien dans la macro n'a été changé (de ce que j'ai vu) du coup, je m'interroge et aimerai arriver à comprendre.. .
TheHache a écrit :... Un test de cette valeur à la ligne 48 de ta macro et si ce test est vérifié, ton deuxième formulaire s'ouvre.
@+
LibO 7.4.4.2 - Windows 10 Pro
AOO 4.1.13 - Windows 10 Pro