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 :

selection dans Listbox me donne la celule dans ma feuille excel. [XL-2013]


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
    Inscrit en
    Novembre 2013
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2013
    Messages : 116
    Par défaut selection dans Listbox me donne la celule dans ma feuille excel.
    Bonjour à tous,

    J'ai une UserForm ("retour_fiche") qui contient les éléments suivant :
    - une combobox (cmb_nom) dans laquelle apparaît tous les noms des personnes qui n'ont pas eut un retour de fiche (dossier clôturé) par rapport à une feuille excel ("retour_des_fiches").
    - une listbox (Lst_retour_choix) dans laquelle apparaît, en fonction de la "cmb_nom", toutes les fiches ouvertes pour le nom sélectionné.
    - une txtbox (txt_retour_date) dans laquelle je dois saisir la date du retour de la fiche de suivi.
    - un commandbutton (cmd_retour_enregistrement) qui me permet d'enregistrer la date de retour de la fiche dans une cellule bien précise.

    J'aimerais pouvoir faire la chose suivante :
    . Je sélectionne un élément dans ma "lst_retour_choix".
    . ensuite je saisie une date dans ma "txt_retour_date".
    . Et pour finir quand je clique sur "cmd_retour_enregistrer", j'enregistre la date que je viens de saisir (dans ma feuille excel "retour_des_fiches") dans la cellule qui correspond à l'élément que je viens de sélectionné dans ma listbox !!!
    (la colonne dans laquelle je veux enregistrer la date est la colonne "F", la ligne serait en fonction de ma sélection dans la listbox).

    Je vous mets le code que j'ai déjà mis et qui fonctionne très bien.
    Il ne me manque plus que le code pour enregistrer la date que je ne trouve pas !!!!

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    Private O As Object 'déclare la variable O (Onglet)
    Private PL As Range 'déclare la variable PL (PLage)
     
     
    Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
    Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
    Dim D As Object 'déclare la variable D (Dictionnaire)
    Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
    Dim CEL As Range 'déclare la variable CEL (CELlule)
     
    Set O = Sheets("retour_des_fiches") 'définit l'onglet O
    DL = O.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée Dl de la colonne 1 (=A) de l'onglet O
    Set PL = O.Range("A2:A" & DL) 'définit la plage PL
    Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
    For Each CEL In PL 'boucle sur toutes les cellules CEL de la plage PL
        If CEL.Offset(0, 3).Value = "" Then D(CEL.Value) = ""    'alimente le dictionnaire D
    Next CEL 'prochaine cellule de la boucle
    TMP = D.keys 'récupère dans le tableau TMP la liste du dictionnaire D sans doublon
    Me.Cmb_Retour_NOM.List = TMP 'alimente la combobox "cmb_nom"
    Me.Lst_Retour_choix.ColumnCount = 2 'définit le nombre de colonnes de la listbox "lst_competence"
    End Sub
     
     
    Private Sub cmb_retour_nom_Change() 'au changement dans la combobox cmb_nom
    Dim PLV As Range 'déclare la variale PLV (PLage Visible)
    Dim CEL As Range 'déclare la variable CEL (CELlule)
     
    Me.Lst_Retour_choix.Clear 'vide la listbox "lst_competence"
    'filtre la colonne 4 (=D) de l'onglet O avec les valeurs vide comme critère
    O.Range("A1").AutoFilter Field:=4, Criteria1:=""
    'filtre la colonne 1 (=A) de l'onglet O avec la valeur de la combobox "cmb_nom" comme critère
    O.Range("A1").AutoFilter Field:=1, Criteria1:=Me.Cmb_Retour_NOM.Value
    Set PLV = PL.SpecialCells(xlCellTypeVisible) 'définit la plage PLV (cellules visibles (non filtrées) de la plage PL)
    For Each CEL In PLV 'boucles sur toutes les cellules CEL de la plage PLV
        With Me.Lst_Retour_choix 'prend en compte la listbox "lst_competence"
            .AddItem CEL.Offset(0, 1).Value 'ajoute la valeur de la cellule CEL décalée d'une colonne à droite (=colonne B)
            'ajoute la valeur de la cellule CEL décalée dd deux colonnes à droite (=colonne C)
            .Column(1, .ListCount - 1) = CEL.Offset(0, 2).Value
        End With 'fin de la prise en compte de la listbox "lst_competence"
    Next CEL 'prochaine cellule de la boucle
    O.Range("A1").AutoFilter 'supprime le filtre automatique
    End Sub

    Merci pour votre aide

  2. #2
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonsoir Nounous, bonsoir le forum,

    J'ai pris comme base le dernier fichier de ton fil précédent avec le code du bouton Enregistrer ci-dessous :


    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
    Private Sub cmd_retour_enregistrer_Click() 'bouton "Enregistrer"
    If Me.Lst_Retour_choix.ListIndex = -1 Then 'condition 1 : si aucune compétence n'est sélectionnée
        MsgBox "Vous devez sélectionner une compétence dans la liste !" 'message
        Me.Lst_Retour_choix.SetFocus 'place le curseur dans la lisbox "lst_competence"
        Exit Sub 'sort de la procédure
    End If 'fin de la condition 1
    If Me.txt_retour_date.Value = "" Then 'condition 2 : si aucune date n'est éditée
        MsgBox "Vous devez entrer la date !" 'message
        Me.txt_retour_date.SetFocus 'place le curseru dans la textbox "txt_retour_date"
        Exit Sub 'dort de la procédure
    End If 'fin de la condition 2
    If IsDate(Me.txt_retour_date) = False Then 'condition 3 : si la date n'est pas valide (par exemple 31/02/2015)
        MsgBox "Date non valide !" 'message
        With Me.txt_retour_date 'prend en compte la textbox "txt_retour_date"
            .SelStart = 0 'début de la sélection
            .SelLength = Len(.Value) 'longueur de la sélection
            .SetFocus 'place le curseur dans la textbox "txt_retour_date"
        End With 'fin de la prose en compte de la textbox "txt_retour_date"
    End If 'fin de la condition 3
    With Me.Lst_Retour_choix 'prend en compte la listbox "Lst_Retour_choix"
        'récupère le numéro de ligne dans la colonne 2 (cachée) de la listbox "Lst_Retour_choix"
        O.Cells(.Column(2, .ListIndex), 4) = Me.txt_retour_date 'place la date dans la colonne 4 (=D) de la cellule correspondante
    End With 'fin de la prose en compte de lalistbox "Lst_Retour_choix"
    Unload Me 'vide et ferme l'UserForm
    End Sub
    Pour que ce code fonctionne j'ai fait plusieurs changement dans la listbox Lst_Retour_choix.
    • Regarde la propriété [ColumnCount] = 3 (3 colonnes : Column 0, column 1 et Column 2)
    • Regarde la propriété [ColumnWidths] = ;;0 pt qui signifie que la dernière colonne (Column 2) est masquée
    Le numéro de ligne de chaque élément de la listbox Lst_Retour_choix est stocké dans la colonne 2 de la listbox. Comme elle est masquée il n'apparaît pas...
    Ensuite, quand un ou plusieurs élément de la listbox sont sélectionnés, on place la date par rapport au numéro de ligne de l'élément...
    Le fichier :

    Fichiers attachés Fichiers attachés

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2013
    Messages : 116
    Par défaut
    Bonjour à tous.

    un grand merci à toi Thautheme.

    Tu m'as énormément aidé...

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/02/2012, 18h45
  2. Réponses: 3
    Dernier message: 07/04/2010, 18h27
  3. Réponses: 3
    Dernier message: 17/09/2009, 15h26
  4. Réponses: 8
    Dernier message: 25/09/2007, 08h31
  5. Réponses: 1
    Dernier message: 30/08/2007, 19h19

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