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

Macros et VBA Excel Discussion :

Gestion base de données et listbox


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2013
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2013
    Messages : 68
    Par défaut Gestion base de données et listbox
    Bonjour à toutes et à tous,

    Petit souci sur excel 2007 en vba donc.
    L'idée du fichier est de renseigner informatiquement le planning prévisionnel d'un établissement de santé pour le week- end:
    -résidents sortants,
    -professionnel travaillant,
    -sorties et animations prévues.

    La feuille importante qui sera diffusée aux équipes est la feuille "ORGANISATION"

    J'ai choisi de gérer ces "3 blocs" de données de façon indépendante (les utilisateurs sont susceptibles de modifier le 1er, le 2eme, ou le 3eme)
    Le fonctionnement est identique pour chacun des 3 blocs; donc prenons par exemple le bloc "RESIDENTS SORTANTS): si l'utilisateur souhaite renseigner le ou les résidents sortants, il clique sur le bouton correspondant du sheets("MENU") (bouton "RENSEIGNER LES RESIDENTS SORTANTS"). Un userform s'ouvre alors (UserForm_ResidentSortant) avec des champs à remplir; une fois remplis, il clique sur le bouton vert "valider": les données sont alors transférées dans une listbox, puis clique sur le bouton "Mise à jour résidents sortant"; les données de la listbox sont alors copiées dans la feuille "RESIDENTS ABSENTS" puis par formule, dans la feuille "ORGANISATION".
    Jusque là j'ai bricolé, mais cela fonctionne bien.

    Par contre les utilisateurs sont susceptibles de modifier (en fait supprimer) certaines de ces données.Et c'est là que cela se complique.
    Je voudrai, en cliquant sur le bouton "SUPPRIMER LES RESIDENTS SORTANT" du sheets ("MENU"):
    - recharger le userform "UserForm_ResidentSortant" et bien entendu recharger la listbox avec son contenu,
    - sélectionner une ligne de cette listbox, et cliquer sur le bouton "SUPPRIMER" pour vider la ligne et de la listbox et de la feuille "RESIDENTS SORTANTS" (et donc par formule de la feuille "ORGANISATION")...

    Là, pour récupérer le contenu de la listbox, je n'ai pas trouvé d'autre moyen que de recréer un userform spécifique (UserForm_SupprResidentSortant) et je n'arrive pas à gérer la suppression de la ligne sélectionnée de la listbox et par conséquent de la ligne correspondante dans la feuille ("RESIDENTS ABSENTS").
    Quelqu'un pourrait- il m'aider?
    Merci beaucoup
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 909
    Par défaut
    Bonjour,

    Tout d'abord, dans ton code, je lis un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_SupprResidentSortant_Initialize()
     
    End Sub
    Pour initialiser ton userform, c'est plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_Initialize()
     
    end sub
    En ce qui concerne, la suppression d'items dans ta zone de liste, ce qu'il te manque, ce sont des "Me." :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    List_Residents.RemoveItem (List_Residents.ListIndex)
    me.List_Residents.RemoveItem (me.List_Residents.ListIndex)
    Pour supprimer des lignes dans un onglet Excel, c'est la fonctionnalité :
    Petits conseils pour faire ce type d'opération :
    • Dans une colonne de ta liste, intègre le numéro de la ligne correspondante à ta donnée pour ne pas avoir à recherche la ligne lors d'une opération quelconque
    • Commence par la fin de ta liste pour supprimer la ligne la plus en bas (cela évitera de supprimer les mauvaises lignes ensuite)



    Cordialement,

  3. #3
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2013
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2013
    Messages : 68
    Par défaut Gestion base de données et lsitbox
    Bonjour et merci pour ta réponse.

    J'aimerai en effet récupérer le numéro de ligne dans ma listbox avec listindex, mais je ne comprends pas bien comment cela fonctionne.
    Dans le userform_ResidentSortant, par exemple, j'ai rajouter une colonne dans ma listbox pour récupérer le numéro de ligne; dans le code du bouton "valider" du userform, j'ai rajouté:
    List_Residents.Column(6, List_Residents.ListCount - 1) = List_Residents.ListIndex + 1
    Mais je récupère toujours la valeur 1???? même si j'ai 2 lignes.... je comprends pas bien comment ça marche..

    D'autre par, mon problème essentiel, c'est comment je veux utiliser mon userform:
    - Si je clique sur le bouton "RENSEIGNER LES RESIDENTS SORTANTS", l'useform s'ouvre, je remplis les différents combobox, je clique sur "valider"--> la listbox récupère les infos, je clique alors sur "Mise à jour résidents sortants" et les données de la listbox sont transférées dans la feuille "ORGANISATION"; ça c'est OK, cela marche.
    - par contre, en cliquant sur le bouton "SUPPRIMER LES RESIDENTS SORTANTS", je voudrai rouvrir le même userform avec la listbox non pas vide mais alimentée des données renseignées dans la feuille "ORGANISATION" et gérer ensuite la suppression de lignes de la listbox et donc de la feuille "ORGANISATON".

    Je demande donc 2 rôles différents au userform. Il faudrait peut- être gérer cela avec des modules:
    - bouton "RENSEIGNER RESIDENTS SORTANTS"--> appel du module 1 qui afficherait le userform me permettant de remplir la listbox et donc la feuille "ORGANISATION"
    - bouton "SUPPRIMER RESIDENTS SORTANTS"--> appel du module 2 qui réafficherait le userform mais me permettant cette fois de supprimer des lignes de la listbox et donc de la feuille "ORGANISATION"

    J'ai eu cette idée, mais je ne sais pas si les modules peuvent gérer cela et comment....

    Je continue de chercher....
    D'avance merci
    Fichiers attachés Fichiers attachés

  4. #4
    Membre Expert Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 909
    Par défaut
    Re-bonjour,

    Si tu as besoin de plusieurs formulaires de suppression de lignes, oui, tu peux le faire avec un seul.
    Cela dépend en fait si tu as beaucoup de différences entre 2 usf ou non pour ce cas-là.

    Je parle de différences telles que :
    • Format du USF que tu souhaites donner
    • Même nombre de colonnes et même format des colonnes (en largeurs)
    • Si tu as besoin des mêmes boutons
    • etc... etc...


    Ce sont les premières idées qui me viennent à l'esprit mais tu as tout un tas de questions à te poser dessus.
    La gestion derrière se ferait à l'aide d'une variable globale et/ou de modules.

    Pour le bouton de validation de suppression, je te conseille d'en faire un pour chacun (dans le usf) si tu souhaites en utiliser qu'un seul.
    Lors de l'initialisation du USF, en fonction de ta variable globale, tu en laisse un visible et les autres invisibles.

    Mais très honnêtement, j'utilise les mêmes useforms dans les cas où j'ai les mêmes sources de données et je masque ou non les boutons en fonction des besoins, ce qui n'est pas trop le cas pour toi ici.
    Donc, je ne saurais que trop te conseiller d'en faire pour un chacun, afin de ne pas avoir de machine à gaz ni un surplus de code.


    En ce qui concerne ton problème sur ta liste, n'utilises pas listindex +1 pour indiquer le numéro de ta ligne, car dans le cas où tu auras des conditions sur l'alimentation de ta liste, cela sera totalement faut.
    Utilises plutôt range("Adresse de la donnée).row.
    Pour ton problème de code, je ne sais pas où tu l'as mis dans ton fichier mais il te faut utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Me.List_Residents.List(Me.List_Residents.ListIndex)
    ' Ou
    Me.List_Residents.value


    Cordialement,

  5. #5
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Des fois, je me dis que le forum Excel devrait être paramétré pour zigouiller automatiquement tout message qui contient base de données avec (et) Excel.

    Juste pour sauver les gens malgré eux-mêmes.

  6. #6
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2013
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2013
    Messages : 68
    Par défaut Listbox
    Désolé pour l'agacement clementmarcotte..
    Merci pour ta réponse Gado2600, même si pour moi c'est un peu chinois....
    Masquer/ afficher des boutons en fonction de l'utilité du userform et de la listbox contenue dedans, pas de souci.
    C'est d'ailleurs ce que j'ai fait dans le fichier joint.
    Par contre, comment attribuer 2 fonctions différentes à une même listbox? C'est là où je pêche.....
    Dans mon fichier, le bouton "RENSEIGNER LES RESIDENTS SORTANTS" (feuille menu) renvoie à un module qui permet d'afficher un userform. En remplissant les différents combobox et en cliquant sur le bouton "VALIDER" du userform puis sur le bouton gris "Mise à jour", je transfère les données de ma listbox vers ma feuille excel "ORGANISATION"; cela marche même si mon code n'est pas dans le module (1er problème je pense....)
    Deuxième problème: le bouton "SUPPRIMER RESIDENTS SORTANTS" renvoie à un deuxième module qui réaffiche le même userform avec en plus un bouton "SUPPRIMER". Là je souhaiterai que la listbox de l'userform m'affiche les données transférées précédemment dans la feuille "ORGANISATION", puis sélectionner une ligne et supprimer les données de cette ligne dans la listbox et dans la feuille "ORGANISATION".....
    Là je coince. Je ne sais pas si je suis très clair...
    Merci pour votre aide éventuelle
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Eclipse + gestion base de données
    Par fanette dans le forum Eclipse Java
    Réponses: 11
    Dernier message: 04/11/2018, 19h41
  2. Réponses: 5
    Dernier message: 05/11/2008, 08h10
  3. Gestion Base de Données
    Par deeperpaul dans le forum Excel
    Réponses: 1
    Dernier message: 13/12/2007, 20h51
  4. Réponses: 0
    Dernier message: 16/11/2007, 11h00
  5. Base de données et ListBox
    Par scorpion37 dans le forum C++Builder
    Réponses: 17
    Dernier message: 21/06/2006, 10h23

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