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 :

Macro VBA => Suppression de ligne via commande [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2023
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2023
    Messages : 5
    Par défaut Macro VBA => Suppression de ligne via commande
    Bonjour,

    Je souhaiterai via une commande que j'ai créée ( screen-shot en PJ) supprimer toutes les lignes contenant la valeur sélectionnée dans le menu déroulant

    Nom : 2023-05-23 09_42_47-SMB Daher Tool V1 - 09052023v2.xlsm  -  Lecture seule - Excel.png
Affichages : 150
Taille : 41,3 Ko

    Je vous met ci-dessous le code qui ne supprime que la 1er ligne, je n'arrive pas à les supprimer toutes:

    Private Sub ComdDeleteButtonProcess_Click()

    'Déclarer des variables
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim processus As String

    'On récupère la feuille de calcul active
    Set ws = ActiveSheet

    'On recherche la dernière ligne de données dans la colonne D
    lastRow = ws.Cells(ws.Rows.Count, "D").End(xlUp).Row

    'On boucle sur toutes les lignes de la feuille pour supprimer les lignes liées au processus sélectionné
    For i = lastRow To 2 Step -1
    processus = ws.Cells(i, "D").value
    If processus = Me.ComboBox1.value Then
    ws.Rows(i).Delete
    End If
    Next i

    'On supprime le processus sélectionné de la ComboBox1
    ComboBox1_Change

    End Sub

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    bonjour
    à mon modeste avis , faire avec un filtre mieux qu'une boucle
    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
    Private Sub CommandButton1_Click()
    Dim F1 As Worksheet
    Set F1 = Sheets("Feuil1")
    Dim I As Long
    Dim Filtre As String
     Application.ScreenUpdating = False
     Filtre = ComboBox1.Value
     With F1
     .Activate
    I = .Cells(Rows.Count, 1).End(xlUp).Row
     .Range("A1:A" & I).AutoFilter Field:=1, Criteria1:=Filtre
     .Range("A2:A" & I).SpecialCells(xlCellTypeVisible).EntireRow.Delete
     .ShowAllData
    End With
     Application.ScreenUpdating = True
    End Sub

  3. #3
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Bonjour, à priori, la boucle d'effacement à l'air correcte. Par contre je trouve inhabituel d'appeler l'évènement _Change de la Combobox puisqu'il se déclenche automatiquement lors d'un changement dans la combobox. Quel code y as-tu inséré ?

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2023
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2023
    Messages : 5
    Par défaut
    Citation Envoyé par Franc Voir le message
    Bonjour, à priori, la boucle d'effacement à l'air correcte. Par contre je trouve inhabituel d'appeler l'évènement _Change de la Combobox puisqu'il se déclenche automatiquement lors d'un changement dans la combobox. Quel code y as-tu inséré ?
    rivate Sub ComboBox1_Change()

    'Définition des variables
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim processToDelete As String
    Dim colProcess As String
    Dim rngProcess As Range
    Dim processFound As Range
    Dim userConfirmation As Integer

    'Définition de la feuille de travail
    Set ws = ThisWorkbook.Sheets("Process extraction")

    'Définition de la dernière ligne de la feuille
    'lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
    lastRow = ws.Range("D" & ws.Rows.Count).End(xlUp).Row

    'Définition de la colonne où se trouve le nom du /des process
    colProcess = "D"

    'Définition de la plage où chercher le nom de process sélectionné
    Set rngProcess = ws.Range(colProcess & "4:" & colProcess & lastRow)

    'Recherche du nom du process sélectionné
    Set processFound = rngProcess.Find(ComboBox1.value, LookIn:=xlValues, lookat:=xlWhole)

    'Si le nom du process est trouvé
    If Not processFound Is Nothing Then
    'Vérification si le process a déjà été extrait
    If processFound.Offset(0, 1).value = "Yes" Then
    userConfirmation = MsgBox("The process " & processFound.value & " has already extracted. Do you really want to extract again?", vbYesNo + vbQuestion, "Confirmation of extraction")
    If userConfirmation = vbNo Then Exit Sub
    End If

    'Confirmation de l'utilisateur pour supprimer le process choisi
    userConfirmation = MsgBox("Do you really want to delete the process " & processFound.value & " ?", vbYesNo + vbQuestion, "Delete confirmation")
    'Si l'utilisateur confirme la suppression
    If userConfirmation = vbYes Then
    'Suppression de toutes les lignes correspondantes au process
    ws.Range("D" & processFound.Row & ":T" & processFound.Row).Delete Shift:=xlUp
    MsgBox "The process and all related have been successfully deleted."
    End If
    Else
    MsgBox "The selected process was not found in column D."
    End If


    End Sub

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 545
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 545
    Par défaut
    ton code devrait fonctionner, la seul chose qui peut faire que ça ne marche pas, c'est que le contenu de la cellule n'est pas exactement celui du combobox

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

Discussions similaires

  1. [vba-e] Suppression de lignes
    Par alorse dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/04/2007, 21h31
  2. [VBA-WORD] Suppression de ligne
    Par Tsuna78 dans le forum VBA Word
    Réponses: 3
    Dernier message: 28/03/2007, 13h56
  3. [VBA-E] Suppression de lignes à partir d'un point particulier
    Par coxi77 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 26/07/2006, 13h22
  4. [VBA-E] macro VBA excel suppression graphiques
    Par totoza dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 30/05/2006, 08h45
  5. [VBA]Excel - Suppression de ligne
    Par Jseb de Lyon dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 29/01/2006, 15h22

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