1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Comptable
    Inscrit en
    avril 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Finance

    Informations forums :
    Inscription : avril 2017
    Messages : 4
    Points : 1
    Points
    1

    Par défaut Supprimer et modifier des données dans une table sur excel à partir d'une sélection Listview

    Bonjour à tous,

    Cela fait un bon moment que je cherche une solution à mon problème.
    J'ai créé un formulaire avec des textbox, combobow etc qui alimentent une table dans une feuille excel.
    Sur ce formulaire, j'ai intégré une Listview pour faire des recherches. Je souhaiterais à partir d'une ligne sélectionnée dans la Listview et qui correspond à une ligne identique dans ma table dans excel, supprimer la ligne directement dans la table excel.

    J'ai testé ce code trouvé sur le site "ListView1.ListItems.Remove (ListView1.SelectedItem.Index)"
    Le souci, c'est qu'il ne supprime que la ligne dans la Listview, elle reste présente dans le fichier excel.
    Il supprime aussi les lignes non sélectionnées dans la ListView.

    J'ai aussi testé le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim SuppLigne As Long
    SuppLigne = UserForm1.ListView1.SelectedItem.Index + 1
    With UserForm1.ListView1
    .ListItems.Remove .SelectedItem.Index
    Worksheets("Missions").Rows(SuppLigne).Delete Shift:=xlUp
    End With
    Alors lui supprime bien dans la ListView et table sur excel, mais supprime même quand aucune sélection n'est fait dans la Listview.

    Concernant la modification, à vrai dire j'étais tellement à fond sur la suppression que je n'ai pas cherché.

    En espérant que mes explication sont claires, et vous remerciant par avance.

    Guinam

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    août 2010
    Messages
    2 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : août 2010
    Messages : 2 754
    Points : 5 690
    Points
    5 690

    Par défaut

    Bonjour,

    Il te faut tester si il y a bien une sélection de faite (surligné en bleu) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If ListView1.SelectedItem.Selected Then ListView1.ListItems.Remove (ListView1.SelectedItem.Index)

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Comptable
    Inscrit en
    avril 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Finance

    Informations forums :
    Inscription : avril 2017
    Messages : 4
    Points : 1
    Points
    1

    Par défaut

    Bonjour,


    ça fonctionne pour la sélection, mais la ligne reste présente dans ma table Excel.
    Ci-joint mon projet pour plus de compréhension.
    Fichiers attachés Fichiers attachés

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur VBA
    Inscrit en
    avril 2017
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur VBA
    Secteur : Finance

    Informations forums :
    Inscription : avril 2017
    Messages : 37
    Points : 65
    Points
    65

    Par défaut

    vous avez un code qui fait la suppression que vous souhaitez (1e message)

    Theze vous a expliqué comment faire le test avant de le lancer.

    Que vous manque t-il ? Vous ne savez pas combiner les deux ?

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Comptable
    Inscrit en
    avril 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Finance

    Informations forums :
    Inscription : avril 2017
    Messages : 4
    Points : 1
    Points
    1

    Par défaut

    Bonjour,

    Pour la suppression j'ai fait quelque chose comme ça :

    [CODE=vba Excel]Dim SuppLigne As Long

    If txtMNumeroLM.Value = "" Then
    MsgBox ("Merci de sélectionner un enregistrement"), vbInformation, ""
    Exit Sub
    End If

    SuppLigne = UserForm1.ListView1.SelectedItem.Index + 1
    With UserForm1.ListView1
    .ListItems.Remove .SelectedItem.Index
    Worksheets("Missions").Rows(SuppLigne).Delete Shift:=xlUp
    End With[/CODE=vba Excel]

    Il faut ensuite vider tous les textbox et autres et ça m'a l'air de fonctionner.

    Je continu de chercher pour la modification d'un enregistrement.

    Merci par avance.

    Guinam

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Comptable
    Inscrit en
    avril 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Finance

    Informations forums :
    Inscription : avril 2017
    Messages : 4
    Points : 1
    Points
    1

    Par défaut

    Bonjour à tous,

    Concernant mon problème j'ai bricolé le code suivant :

    [CODE=vba excel]Private Sub cmdMModifier_Click()

    Dim sonat As Long

    If txtMNumeroLM.Value = "" Then
    MsgBox ("Merci de sélectionner l'enregistrement à modifier"), vbInformation, ""
    Exit Sub
    End If


    sonat = ActiveCell.Row

    Cells(sonat, 1) = txtMNumeroLM.Text
    Cells(sonat, 2) = txtMDateSignature.Text
    Cells(sonat, 3) = txtMNomSociete.Text
    Cells(sonat, 4) = txtMActivite.Text


    Call VideMissions
    Call Actualisation_ListView1 ' On appelle la procédure qui actualise la ListView
    End Sub[/CODE=vba excel]


    Il fonctionne si on a bien positionné sur la ligne à modifier.
    Mon souci, c'est je n'ai pas encore trouvé comment faire, pour que la sélection dans ListView soit synchronisée à celle de mon fichier Excel en arrière plan.

    Est-que vous pourriez me confirmer que le code n'est pas déconnant et si vous avez une idée je suis preneur.

    Merci par avance.
    Guinam

  7. #7
    Expert confirmé
    Homme Profil pro
    Inscrit en
    août 2010
    Messages
    2 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : août 2010
    Messages : 2 754
    Points : 5 690
    Points
    5 690

    Par défaut

    Bonjour,

    Afin d'être sûr qu'il y est bien correspondance entre la feuille et la ListView, le mieux à mon avis est d'ajouter une colonne cachée contenant le numéro de la ligne.
    Voici la petite modif apportée à la Sub Initialize :
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    Private Sub UserForm_Initialize()
     
        '============================ Initialise la ListView Factures ==========================================
        With ListView1
     
            .Gridlines = False 'Affiche ou pas les lignes
            .View = lvwReport ' Style de rapport
            .FullRowSelect = True 'Permet de sélectionner une ligne dans la liste
            'Création des en-têtes personnalisées avec leur largeur
            .ColumnHeaders.Add Text:="Numero LM"
            .ColumnHeaders.Add Text:="Num Client"
            .ColumnHeaders.Add Text:="Nom Client"
            .ColumnHeaders.Add Text:="Type Client"
            .ColumnHeaders.Add Text:="Code Mission"
            .ColumnHeaders.Add Text:="Num Facture"
            .ColumnHeaders.Add Text:="Date Facture"
            .ColumnHeaders.Add Text:="Date Echeance"
            .ColumnHeaders.Add Text:="Montant HT"
            .ColumnHeaders.Add Text:="TVA"
            .ColumnHeaders.Add Text:="NumLigne", Width:=0 '<--- stocke le numéro de la ligne et la colonne est cachée (largeur 0)
     
        End With
     
        Call ListView1_Actualisation 'On appelle la procédure qui actualise la ListView
     
        '============================ Fin ListView ==========================================
     
        txtFDateFacture.Text = Format(Now(), "dd/mm/yyyy")
     
        With cboFRech
     
            .AddItem "Montant Facture"
            .AddItem "Nom Client"
            .AddItem "Nom Sous - Traitant"
            .AddItem "Num Client"
            .AddItem "Num Facture"
            .AddItem "Numero LM"
     
        End With
     
        With cboFOperateur
     
            .AddItem "="
            .AddItem "<"
            .AddItem ">"
     
        End With
     
        cboFOperateur.ListIndex = 0
     
    End Sub
    et la modif apportée à la Sub "cmdFSupprimer_Click()" pour la suppression dans la ListView et dans la feuille avec un message demandant si la suppression est bien voulue, adaptes :
    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
     
    Private Sub cmdFSupprimer_Click()
     
        On Error GoTo Fin 'si la ListView est vide
     
        With ListView1
     
            'avec une boite de message demandant si la suppression est vraiment désirée !
            If .SelectedItem.Selected And _
                MsgBox("Voulez-vous vraiment supprimer l'enregistrement n° " _
                & .ListItems.Item(.SelectedItem.Index).SubItems(10) _
                & " de la feuille 'Factures' ?", vbQuestion + vbYesNo) = vbYes Then
     
                Worksheets("Factures").Rows(.ListItems.Item(.SelectedItem.Index).SubItems(10)).EntireRow.Delete xlUp
                .ListItems.Remove (.SelectedItem.Index)
     
                ListView1_Actualisation
     
                'Vider le formulaire apres suppression des données dans la base
                Me.txtFNumeroLM.Value = ""
                Me.txtFNumClient.Value = ""
                Me.txtFNomClient.Value = ""
                Me.cboFTypeClient.Value = ""
                Me.txtFCodeMission.Value = ""
                Me.txtFNumFacture.Value = ""
                Me.txtFDateFacture.Value = ""
                Me.txtFDateEcheance.Value = ""
                Me.txtFMontantHT.Value = ""
                Me.cboFTVA.Value = ""
     
            End If
     
        End With
     
    Fin:
     
    End Sub

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/05/2015, 14h29
  2. Réponses: 7
    Dernier message: 24/01/2012, 18h55
  3. Réponses: 2
    Dernier message: 31/03/2011, 11h22
  4. modifier des données dans une requête multi table
    Par Bluman dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 05/02/2008, 10h00
  5. Réponses: 4
    Dernier message: 02/05/2005, 20h25

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