IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Access Discussion :

Ligne vide dans control zone de liste


Sujet :

Access

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2003
    Messages : 281
    Par défaut Ligne vide dans control zone de liste
    Bonjour,

    j'ai un formulaire dans le même genre que le tutoriel de cafeine sur les recherches multi critère. J'ai donc une liste qui récupère ses valeurs via maListe.rowsource = ...

    Pour une ligne, je peux lancer des macros qui m'ouvrent d'autres formulaires (modif, suppr...). Tout marche super bien quand il y a qqchose dans la ligne.
    Mais quand je fais une recherche qui me donne aucun résultat, ma liste n'est pas tout à fait vide, elle contient une ligne (qui n'a pas de valeur). Et quand je lance des actions sur cette ligne vide, cela me lance les formulaires sur le dernier enregistrement sélectionné précédemment...

    Ce qui je voudrais, c'est qu'il ne se passe rien, ou que l'on ai un message d'erreur, mais pas qu'on lance une action sur un enregistrement qui n'est pas visible.

    Mon problème, c'est que je ne vois pas du tout comment faire !
    MERCI

  2. #2
    Membre Expert
    Avatar de Papy Turbo
    Homme Profil pro
    Développeur Office/VBA
    Inscrit en
    Mars 2004
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Office/VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 822
    Par défaut
    Bonjour,
    je vais essayer de décortiquer cela pour y voir plus clair.
    Merci de tes précisions.

    Citation Envoyé par sunvialley
    Bonjour,

    j'ai un formulaire dans le même genre que le tutoriel de cafeine sur les recherches multi critère. J'ai donc une liste qui récupère ses valeurs via maListe.rowsource = ...

    Pour une ligne, je peux lancer des macros qui m'ouvrent d'autres formulaires (modif, suppr...). Tout marche super bien quand il y a qqchose dans la ligne.
    OK jusque là.
    Citation Envoyé par sunvialley
    Mais quand je fais une recherche qui me donne aucun résultat, ma liste n'est pas tout à fait vide,
    Ça, a priori, ça s'appelle un bug. Donc, faut déjà trouver pourquoi ta liste n'est pas vide s'il n'y a aucun résultat ?
    Citation Envoyé par sunvialley
    elle contient une ligne (qui n'a pas de valeur).
    Même dans ce cas, si la ligne "n'a pas de valeur", la liste doit renvoyer soit la valeur Null, soit une chaîne vide (""). Tu peux tester cela et bloquer toute action (ou afficher un message), non ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2003
    Messages : 281
    Par défaut
    Ça, a priori, ça s'appelle un bug. Donc, faut déjà trouver pourquoi ta liste n'est pas vide s'il n'y a aucun résultat ?
    En fait non je pense pas que ce soit un bug. Essaie de créer un control list, sans lui affecter de valeur ou de contenu. Il y a toujours une ligne vide (blanche, sans valeur,...) que l'on peut selectionner.


    Même dans ce cas, si la ligne "n'a pas de valeur", la liste doit renvoyer soit la valeur Null, soit une chaîne vide (""). Tu peux tester cela et bloquer toute action (ou afficher un message), non ?
    j'ai tester en mettant un msgbox(maliste.value) sur un evenement clic : quand il y a des valeurs, cela me renvoi la clef de l'enregistrement, quand c'est la fameuse ligne vide en question cela me renvoie rien du tout (pas de null, rien du tout, meme avec des test isnull ou ="", rien)
    Mais si je fais pareil sur un évènement doubleClic ou depuis l'appuis sur un bouton, dans le cas de la ligne vide, ca me donne toujours la clef précedente



    Le problème vient que avec cette ligne vide, on continue a avoir accès aux évènements du control de type list, meme si cette liste est vide.
    Le truc, c'est que Access se souvient du dernier enregistrement "visité", et s'il n'a pas de valeur de clef à allez "visité", il va sur l'enregistrement sur lequel il avait en mémoire (sur lequel il pointe...)


    Si on arrivait à détecter que cette ligne est vide sur DoubleClic, on pourrait surement passer par VB au lieu d'une macro pour lancer ma boite de dialogue...

    Je sais que c pas très clair (voir super obscure), donc je joint mon appli pour apporter un peu de lumière et permettre de tester.

    edit : j'ai enlevé la pièce jointe, car ca prenait de la place...

  4. #4
    Expert éminent

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    Quelle version d'access ?

  5. #5
    Expert éminent

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    Je viens de tester, quand la fameuse ligne est sélectionnée, la zone de liste retourne NULL

    Tu pourrais donc utiliser :

    Private Sub Liste0_DblClick(Cancel As Integer)
    If Not IsNull(Liste0.Value) Then
    MsgBox "Liste pleine"
    Else
    MsgBox "Liste Vide"
    End If
    End Sub

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2003
    Messages : 281
    Par défaut
    pas tout a fait , si on met ce code sur une liste dont le contenu ne change pas, ok ca marche.

    Mais essaie sur mon appli(stp), si tu met ca, et qu'avec les critères de recherche tu change le contenu de la liste, on obtient "Liste Pleine" pour la fameuse ligne en question.

    (la liste se trouve dans le formulaire F_FICHIER, et se lance depuis F_PRINCIPAL (onglet Fichier))

  7. #7
    Expert éminent

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    Oui en fait c'est logique puisque l'évenement double clic a lieu sur la liste et pas sur les lignes. Une listview te donnerait surement de meilleurs résultat

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2003
    Messages : 281
    Par défaut
    oui c'est ce que je pensais (action non pas sur la ligne mais sur le control) ; mais j'ai une question de boulet :

    c'est quoi une listView ?

    Car le mon control est une "Zone de liste", c'est pas la même chose ?
    Faut mettre le control activeX : "Microsoft ListView Control (version 6.0)" ?

    Avec ce control, j'ai l'impression qu'il n y a pas plein de truc (genre, rowsource, largeur de colone...). Ca va me demander de changer beaucoup de choses sans savoir si ca va marcher...

  9. #9
    Membre Expert
    Avatar de Papy Turbo
    Homme Profil pro
    Développeur Office/VBA
    Inscrit en
    Mars 2004
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Office/VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 822
    Par défaut
    Autant pour moi : il y a effectivement une "ligne vide" dans une liste vide !

    Et c'est vrai également que, quand on change le contenu de la liste, ça ne change pas sa valeur.

    C'est à toi, lorsque tu modifies le contenu, de remettre la valeur à Null.

    Dans ton cas, avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Private Sub cbox_valeurFiltreFichier_afterUpdate()
        '--- appel de la fontion filtrerFichiers selon les valeurs des filtres
        Dim typeFiltre As String
        Dim valFiltre As String
        valFiltre = Me.controls("cbox_valeurFiltreFichier").Text
        If Not (IsNull(cbox_TypeFiltreFichier.Value)) Then
            typeFiltre = Me.controls("cbox_TypeFiltreFichier").Value
            filtrerFichiers Me, valFiltre, typeFiltre
        End If
        list_Fichiers = Null
    End Sub
    ça marche, et la liste renverra Null

    Pour savoir si la valeur renvoyée par la liste correspond à une des lignes, tu peux surtout tester la valeur de la propriété .ListIndex, ainsi que .ListCount qui sera = 0, si la liste est vide. :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Private Sub list_Fichiers_DblClick(Cancel As Integer)
        If list_Fichiers.ListIndex > 0 Then
            MsgBox "Liste pleine -> lancement de la macro avec la valeur [" & list_Fichiers & "]"
        Else
            If list_Fichiers.ListCount = 0 Then
                 MsgBox "Liste vide : veuillez changer les critères"
            Else
                MsgBox "Liste pleine, rien n'est sélectionné. Veuillez sélectionner un élément dans la liste"
            End If
        End If
    End Sub
    ListIndex prend la valeur -1 s'il ne correspond à rien, ou bien le n° de la ligne.

    Mais je préfère mettre la liste à Null à chaque changement. Méthode la plus sûre.

  10. #10
    Expert éminent

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    Le soucis est que si dans la zone de liste tu sélectionne le premier enregistrement et que aprés, tu essaie de doublecliquer sur le dernier mais un peu trop pas, tu doubles clic dans le vide ce qui fait que la valeur de la zone de liste est toujours égale au premier élément, vu qu'en fait on a pas sélectionner le dernier ... ET là, booum, le code de sunvialley basé sur le double clic ouvre le formulaire correspondant au premier enregistrement.

    Tu vois ce que je veux dire papy ?

    C'est pour cela que je conseil la listview qui je crois propose certains événements sur les items et non sur la listview au complet

  11. #11
    Membre Expert
    Avatar de Papy Turbo
    Homme Profil pro
    Développeur Office/VBA
    Inscrit en
    Mars 2004
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Office/VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 822
    Par défaut
    C'est sûr qu'au 3ème litre de Côtes, il m'arrive moi aussi de double (ou triple)-cliquer carrément à côté de la liste, puis de poser la question sur le forum (-coke ou -orange ?)

    La listview est certes plus puissante, mais moins facile à utiliser qu'un contrôle access interne. Au choix.

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2003
    Messages : 281
    Par défaut
    je viens de voir les post, j'ai pas encore eu le temps de tester

    Pour ce qui est de cliquer à côté, c'est vrai que c'est pénible, mais ce n'est pas dramatique car même si on double clic dans la zone vide, la ligne que l'on veut ouvrir reste sélectionnée... et je me dis que tout changer maintenant va me retarder dans mon projet (surtout si listView est moins facile à utiliser)

    Je pense donc garder ma liste comme elle est (pour le moment, on verra plus tard si j'ai le temps), et utiliser .ListCount (j'avais cherché un truc du genre, mais j'ai du le louper , puis j'ai penser à virer la fameuse ligne vide). Car mettre la liste à Null, ca marche bien pour ma comboBox "filtrer", mais pas pour mon champs texte (car avec le champs texte je ne sais pas à l'avance si ma liste sera vide, cela dependra du recordCount...).

    En tout cas merci, je test et vous tiens au courant.

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2003
    Messages : 281
    Par défaut
    pour les évenement double clic et sur clicBouton, ca marche bien. Il me reste plus qu'à trouver comment passer pas VB depuis le menu contextuel (car pour le moment cela me lance les macro directement sans test, donc toujours le même pb)

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2003
    Messages : 281
    Par défaut
    C'est tout bon. C'est pas très propre, mais ca marche. Depuis le menu contextuel je lance une macro, qui lance du code, qui lance la macro initiale. Tout marche bien.

    Un grand MERCI à tous.
    et hop :

    PS :
    dans le code de papy (merci), j'ai mis : "list_Fichiers.ListIndex >= 0" au lieu de ">" car sinon je ne pouvait pas sélectionner la première ligne (donc ca doit commencer à 0)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 18/01/2016, 16h21
  2. Réponses: 2
    Dernier message: 28/09/2011, 13h51
  3. Réponses: 2
    Dernier message: 17/04/2007, 23h35
  4. Réponses: 3
    Dernier message: 27/09/2006, 11h35
  5. zone vide dans une zone de liste
    Par julio02200 dans le forum Access
    Réponses: 9
    Dernier message: 30/05/2006, 08h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo