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

IHM Discussion :

mettre à jour la colonne sélectionnée


Sujet :

IHM

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 40
    Points : 17
    Points
    17
    Par défaut mettre à jour la colonne sélectionnée
    Bonjour,

    Dans un formulaire en mode feuille de données, j'ai des colonnes avec des cases à cocher.
    Voilà ce que j'aimerais faire mais c'est au-dessus de mes compétences ...
    L'utilisateur selectionne une colonne et d'un clic droit, dans le menu contextuel, il trouverait l'option "tout cocher" qui mettrait à 1 ce champ pour tous les enregistrements (donc toute la colonne).
    J'espère ne pas trop abuser en vous demandant un coup de main ...
    car là, je crois que c'est balaise, peut-être même impossible ?

    D'avance MERCI

    Bonne journée

    Claire.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 352
    Points : 415
    Points
    415
    Par défaut
    C'est tout à fait possible maintenant je vais essayer de te l'expliquer clairement :

    commençons par le début : créér un menu contextuel (menu qui apparait sur clic bouton droit)

    1) la barre de menu
    Aller dans Affichage/Barre d'outil/Personnaliser
    Là, tu crée une nouvelle barre d'outils que tu appelles par exemple menu_tout_cocher

    une barre d'outil vide apparaît
    tu peux alors faire glisser depuis l'onglet Commandes des commandes toutes prêtes ainsi qu'une commande personnalisée.

    Sélectionne celle-ci et nomme là "tout cocher" en faisant un clic bouton une fois que tu as inséré "personnalisé" dans ta barre.

    Ferme la fenêtre de personnalisation.

    2) la fonction à exécuter
    Il faut ensuite créer la macro qui effectuera les actions à faire (à savoir tout cocher). Ta macro va appeler une fonction
    POur cela dans un module créer d'abord une fonction de ce style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Public Function toutCocher()
        Dim sql As String
     
       'enregistrements des dernières modif sinon l'enregistrement en cours est verrouillé et la case à cocher ne se met pas à jour
        DoCmd.RunCommand acCmdSaveRecord
     
        sql = "update taTable set taCaseACocher = true"
        CurrentDb.Execute sql
     
       'rafraichissement du formulaire courant
        Screen.ActiveForm.Refresh
     
    End Function
    3) affectation de la fonction à une macro car seule une macro peut être appelé depuis un bouton personnalisé

    créer une nouvelle macro
    Sélectionne dans la liste executerCode et saisir dans la zone de texte en bas à gauche le nom de ta fonction (ici toutCocher() )
    Enregistre ta macro (on l'appellera macro_menu)

    4) affectation de la macro
    retourne sous Affichage/Barre d'outils/Personnaliser
    Fais afficher ta barre d'outils et clic bouton droit sur le nouveau bouton "Tout Cocher". Va dans les propriétés et dans la liste déroulante "sur action" ta macro doit apparaitre. Selectionne là

    5) définition de la barre d'outil en menu contextuel.
    Dans la fenêtre "personnalisation", dans l'onglets "Barre d'outils" sélectionne menu_tout_cocher et clique sur le bouton "Propriétés" à droite
    Dans la zone déroulante "Type" sélectionne fenêtre indépendante. un message s'affiche te disant que ça va te transformer ta barre d'outils en menu contextuel. Valide ! ATTENTION : une fois passée en fenêtre indépendante, elle n'est plus modifiable donc assure toi d'abord que quand tu clique sur le bouton ça fait bien l'action demandée

    6) affectation du nouveau menu au formulaire
    Ouvre ton formulaire en mode création. Fais afficher les propriétés
    Dans l'onglets Autres tu as une zone "barre de menu contextuel" dans la liste déroulante, menu_tout_cocher doit y apparaitre. Sélectionne le et fais afficher ton formulaire. Clic bouton : ton nouveau menu doit apparaître

    et le tour est joué

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 40
    Points : 17
    Points
    17
    Par défaut
    Ouahhh c'est super sympa de ta part de tout me détailler comme ça !
    J'essai ça tout à l'heure et je te tiens au courant.

    Décidemment, j'ADORE les toulousains !!

    Bonne soirée

    Claire.

    Heu, petit PS, est-ce qu'il va falloir que je cré ça pour chaque colonne ? (y'en a une dizaine ...)

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 40
    Points : 17
    Points
    17
    Par défaut
    Merci à tous !
    Mais j'ai encore un souci ...
    j'ai fait une "compil" de ce qui m'avait été répondu dans un précédent post (tout cocher) et dont je n'avais pas vu les réponses (bizarre, je n'ai pas reçu de mail comme quoi j'avais des réponses ...)

    Mais ça ne marche pas... Message d'erreur "trop peu de paramètre - 1 attendu" et la ligne CurrentDb.execute sql est en jaune ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Function toutCocher()
        Dim sql As String
     
        DoCmd.RunCommand acCmdSaveRecord
     
        sql = "update T_chkl_ch set T_chkl_ch.selection = -1 ;"
        CurrentDb.Execute sql
     
       'rafraichissement du formulaire courant
        Screen.ActiveForm.Refresh
     
    End Function
    Qu'est-ce qui cloche ?

    En tous cas, merci à tous pour votre aide !!!!!!!

    Bonne journée

    Claire.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 352
    Points : 415
    Points
    415
    Par défaut
    le menu contextuel ne s'affiche pas selon une colonne. il est le même pour tout le formulaire. A ce moment-là, tu peux faire dans ton menu un bouton pour chaque colonne du style "cocher toutes caseàcocher 1", "cocher toutes caseàcocher 2",...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 352
    Points : 415
    Points
    415
    Par défaut
    T_chkl_ch est bien une table ?
    Essaie d'enlever le ; à la fin de ta chaine sql. Et met true au lieu de -1.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 40
    Points : 17
    Points
    17
    Par défaut
    En fait, je n'en suis qu'au stade sur bouton (je n'ai pas encore mis dans le menu contextuel, car comme tu me le conseillais, je vérifie que ça marche avant ...)

    oups, tu as répondu de nouveau ...
    oui, T_chkl_ch est bien une table, et j'ai fait ce que tu as dit mais le message d'erreur esr toujours le même. Qu'est-ce qu'il veut dire par là ? J'aimerais bien comprendre ...

    Merci encore

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 352
    Points : 415
    Points
    415
    Par défaut
    est-ce que tu peux joindre ta base que je regarde ça de plus près ?

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 40
    Points : 17
    Points
    17
    Par défaut
    oups, là ça se complique, elle fait 22Mo ...
    Je vais essayer de la limiter et de la zipper et je t'envoie ça...
    Merci

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 40
    Points : 17
    Points
    17
    Par défaut
    Voilà, c'est mieux ...
    Dans le menu général, tu clique sur "modifier S-4" (je n'ai laissé qu'une fiche, la 10) puis ans le formaulaire suivant sur "Check-lit CHAMBRES", c'est là que je voudrais que le bouton (dans la barre de menus pour le moment) puisse agir sur selection d'une colonne ...

    Merci encore.

    Claire.
    Fichiers attachés Fichiers attachés

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 352
    Points : 415
    Points
    415
    Par défaut
    C'est normal que ça ne marche pas. Il faut qu'au lieu .selection, tu y mettes le nom de ton champ

    Par exemple pour cocher toutes les case convecteur, il faut que tu fasses
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    Public Function toutCocherConvecteur()
        Dim sql As String
     
        DoCmd.RunCommand acCmdSaveRecord
     
        sql = "update T_chkl_ch set T_chkl_ch.convecteur = true"
        CurrentDb.Execute sql
     
       'rafraichissement du formulaire courant
        Screen.ActiveForm.Refresh
     
    End Function
     
    Public Function toutCocherStore()
        Dim sql As String
     
        DoCmd.RunCommand acCmdSaveRecord
     
        sql = "update T_chkl_ch set T_chkl_ch.store = true"
        CurrentDb.Execute sql
     
       'rafraichissement du formulaire courant
        Screen.ActiveForm.Refresh
     
    End Function
    Après, tu peux peut-etre essayer de faire un seul bouton et dans ton code tu récupère le nom du champ actif de ton formulaire

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 352
    Points : 415
    Points
    415
    Par défaut
    Pour avoir un seul bouton tu peux faire comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Public Function toutCocher()
        Dim sql As String
     
       'enregistrements des dernières modif sinon l'enregistrement en cours est verrouillé et la case à cocher ne se met pas à jour
        DoCmd.RunCommand acCmdSaveRecord
     
    'screen.activeConctrol.controlName te renvoie le nombre de ta case à cocher active.
        sql = "update T_chkl_ch set T_chkl_ch." &screen.ActiveControl.ControlName & " = true"
        CurrentDb.Execute sql
     
       'rafraichissement du formulaire courant
        Screen.ActiveForm.Refresh
     
    End Function
    ATTENTION : cette fonction ne marche que si tu es en mode menu contextuel. Lorsque tu es en mode barre d'outils, screen.activecontrol.controlName te renvoie le nom du formulaire. Tu peux tester en mode contextuel sans crainte. En effet je viens de découvrir que pour modifier un menu contextuel, il faut faire afficher la barre d'outil "Menus contextuels". Ton nouveau menu apparaît à la fin et tu peux le modifier comme une barre d'outils normale

    Pour associer le menu contextuel au formulaire, dans ton cas, il faut le faire sur le sous-formulaire qui contient tes données et pas sur le formulaire père (en testant je me suis fais avoir )

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 40
    Points : 17
    Points
    17
    Par défaut

    C'est vraiment génial !!
    Au début, j'étais un peu perdue, car je m'attendais à voir le menu s'ajouter au menu contextuel de l'en-tête de la colonne quand je la sélectionne, mais en fait, il ne faut rien sélectionner, le clic droit dans n'importe quel champ de la colonne suffit pour que le petit menu apparraisse !
    Il ne me reste plus qu'à faire un autre petit menu pour décocher cette fois (si la personne se trompe, qu'elle puisse revenir en arrière sans tout faire à la main) et ce sera parfait !!
    Aller, il suffit de mettre FALSE, c'est ça ??

    GENIAL, merci encore Taoueret, tu es vriament super sympa !
    Merci aussi à Gayot, Gabout, Fevec, Jeannot45 et mout1234 qui ont répondu à l'autre post !

    Bonne fin de journée et bon WE !

    Claire.

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 352
    Points : 415
    Points
    415
    Par défaut
    juste pour finir je rajouterai tout de même une condition avant d'exécuter la requete update : tester si le 'activecontrol' est bien de type oui/non ou case à cocher.
    parce que si ton utilisateur fait un clic bouton droit alors qu'il est sur un champ texte, le update va sortir une erreur

    ou alors trouver un moyen de désactiver ton option menu "tout cocher" quand tu n'es pas sur une case à cocher

    Bon courage pour la suite

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 40
    Points : 17
    Points
    17
    Par défaut
    oui, je me suis faite piéger... En fait, ça met pas erreur, ça met -1 partout !
    mais je sais pas comment vérifier que le activecontrol est bien un oui/non
    Un détail a creuser ...

    Merci encore ...

    @ +

    Claire.

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

Discussions similaires

  1. Mettre à jour une colonne à partir d'une autre
    Par Peanut dans le forum Langage SQL
    Réponses: 4
    Dernier message: 09/06/2011, 18h19
  2. Mettre à jours une colonne CLOB dans une tabel
    Par proDZ dans le forum Oracle
    Réponses: 4
    Dernier message: 20/08/2009, 11h53
  3. impossible de mettre à jour une colonne.
    Par yass dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 18/06/2009, 09h58

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