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. 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
Code : Tout sélectionner
ValueItemList(.SelectedItems())
Code : Tout sélectionner
PysInf (0)
Code : Tout sélectionner
PysEnregs.absolute(1)
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
Merci d'avance