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 :

Supprimé plusieurs ligne?


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 106
    Points : 64
    Points
    64
    Par défaut Supprimé plusieurs ligne?
    Bonjour,

    j'aimerai savoir comment supprimé plusieurs ligne dans ma liste de ma feuille excel?

    voici mon code qui me permet d'effacé une seule ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub delete_click()
     
    Dim NumLigne As Integer
     
    If Nligne.Value = "" Then
       MsgBox "Vous n'avez pas saisie le numéro de la ligne à supprimer"
       Nligne.Value = "0"
       Exit Sub
    End If
     
        NumLigne = Nligne.Value
        ActiveSheet.Listobjects("Liste1").ListRows(NumLigne - 1).Delete 'suppression de la ligne saisi
        Nligne.Value = ""
    End Sub
    je souhaiterai saisir mes lignes à supprimé de la même façon, sauf que si il y a par exemple 3 lignes à supprimé, et bien je saisi dans mon Textbox(Nligne)

    64;68;89

    en fait pour les différencier, on y ajouterai un ;

    si quelqu'un peut m'aider

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 258
    Points : 306
    Points
    306
    Par défaut
    Je vais peut etre répondre à coté mais ca me parait bien compliqué poiur supprimer quelques lignes alors que l'utilisateur peut le faire simplement à partir d'un racourci clavier.

    Autre possibilité, tu laisse une case libre sur cette ligne que l'utilisateur pour selectionner en y mettant un "X" par exemple (Colonne intitulée "Supprimer") comme c'est le cas dans de nombreuses applications comme les mails par exemple.

    Un boutons appelé Mise à Jour ou Suppression fera un test sur cette cellule et supprimera les lignes des cellules ou la case est non vide.

    C'est ce que je ferais!

  3. #3
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 106
    Points : 64
    Points
    64
    Par défaut
    j'ai compris ce que ta dis, mais c'est pas vraiment ça que je recherche...

    et t-il possible dans un textBox de lui donné plusieur information à traité?

    celle-ci serai séparé par un ";" en gros

  4. #4
    Membre chevronné Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Points : 1 900
    Points
    1 900
    Par défaut
    Bonjour skorpio

    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
     
    dim tablo(0 to 100) as long
    If Nligne.Value = "" Then
       MsgBox "Vous n'avez pas saisie le numéro de la ligne à supprimer"
       Nligne.Value = "0"
       Exit Sub
    End If
    if instr(nligne.value,";")>0 then 
      tablo = split(Nligne.value;";")
      for i = 0 to 100
          if tablo (i) = 0 then exit for
          ActiveSheet.Listobjects("Liste1").ListRows(tablo(i) - 1).Delete
      next i
    else
        ActiveSheet.Listobjects("Liste1").ListRows(cint(NLigne.value) - 1).Delete 
    end if
    essaye cela, et dis nous

  5. #5
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 106
    Points : 64
    Points
    64
    Par défaut
    il y a une erreur de compilation

    impossible d'affecter à un tableau.

    et ça me selection

  6. #6
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 106
    Points : 64
    Points
    64
    Par défaut
    c'est bizar car ton code à l'air correct, j'comprend pas pourquoi ça plante

  7. #7
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    A mon avis il faut convertir les données du split en long. (par défaut ca retourne du string)

  8. #8
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Petite erreur je crois.Dans le split le ; est a ermplacer par une virgule

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    tablo = split(Nligne.value , ";")
    au lieu de tablo = split(Nligne.value;";")

  9. #9
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 919
    Points
    55 919
    Billets dans le blog
    131
    Par défaut
    Bonjour.

    Il ne faut pas donner de taille à TABLO.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    dim tablo
    tablo=split(...)
    et il faut remplacer le ; par ,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tablo = split(nligne.value,";")
    Pour effacer les lignes d'une feuille excel, il faut commencer par le bas du tableau, sinon, comme la position des lignes change après une suppression de lignes, ce ne seront pas les bonnes lignes qui seront supprimées.
    Ex: Suppression des lignes 1;4;9
    Je supprime la 1, la 4 devient la 3, la 5 devient la 4 et la 9 devient la 8. Donc, si je supprime la 4 après avoir supprimé la 1, je supprime en fait la ligne qui était la 5 lorsque j'ai renseigné mes lignes, et la 9 initiale, devenue la 8 après la suppression de la 1, devient la 7, et donc, lorsque je supprime la 9, je supprime en fait la 11 initiale.

    Donc, toujours supprimer les lignes en commençant pas le bas, et les colonnes en commençant par la droite.

    Ok?

  10. #10
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 106
    Points : 64
    Points
    64
    Par défaut
    je comprend pas, moi ça ne marche pas
    vous ça marche?

    ça me dit que c'est impossible d'affecter à un tableau???

  11. #11
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 919
    Points
    55 919
    Billets dans le blog
    131
    Par défaut
    C'est parce que tu n'as pas lu mon précédent message. Tu ne dois pas donner de dimensions à ton tableau
    Remplace
    par Voici un code qui fait ce que tu souhaites (du moins, je pense...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Sub SupprimerLignes()
        Dim Lignes As String
        Dim Tableau
        Dim i As Integer
     
        Lignes = InputBox("Saisissez les numéros de ligne à supprimer dans l'ordre croissant et en les séparant par un point-virgule", "Suppression de lignes")
        If Lignes = "" Then Exit Sub
     
        Tableau = Split(Lignes, ";")
        For i = UBound(Tableau) To 0 Step -1
            If IsNumeric(Tableau(i)) Then Rows(Tableau(i)).EntireRow.Delete
        Next i
    End Sub
    Il faut aussi tenir compte sur ma remarque concernant le fait que tu dois commencer à supprimer par le bas pour éviter de supprimer des lignes qui doivent être conservées.
    Mon code fonctionne correctement à partir du moment où l'on a encodé les lignes dans l'ordre croissant.

    Ok?

  12. #12
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 106
    Points : 64
    Points
    64
    Par défaut
    il obligatoire d'avoir un tableau?

  13. #13
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 919
    Points
    55 919
    Billets dans le blog
    131
    Par défaut
    Split(...) renvoie un tableau, il est donc préférable d'utiliser un tableau. Mais si tu ne le dimensionnes pas, cela ne pose pas de problème de l'utiliser avec Split...

    Le code que j'ai fourni ne te convient pas?

  14. #14
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 106
    Points : 64
    Points
    64
    Par défaut
    si si c'est absolument parfait c'est ce que je coulais

    je te remerci 1000fois

  15. #15
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 106
    Points : 64
    Points
    64
    Par défaut
    en fait il y a encore un problème

    car en fait comme j'ai expliqué au début toute mes données sont dans une liste

    ActiveSheet.Listobject("Liste1")....

    et c'est ces lignes à l'interieur que je veux supprimé...

    or ton code tu te sers de Rows(Tableau(i)).EntireRow.Delete

    pour supprimé

    mais moi ça les supprimes correctement que lorsqu'à droite de ma liste il y a du vide, je sais pas je suis clair,

    en fait j'ai un liste A et à sa droite il y a une liste B plus petite

    je supprime des donnes dans la A, mé lorsque je supprime une ligne qui se situe dans la même longueur de l'autre c'est mort, ça marche

    je sais vraiment pas si j'ai été clair

    le message d'error est: La méthode Delete de la classe Range a échoué.

  16. #16
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 919
    Points
    55 919
    Billets dans le blog
    131
    Par défaut
    Si j'ai bien compris, tu veux supprimer uniquement la cellule, et pas toute la ligne

    En regardant le code que je t'ai donné, tu peux t'apercevoir que la ligne qui supprime utilise EntireRow. Il te suffit donc d'adapter cette ligne pour ne supprimer que la cellule, en utilisant le déplacement adéquat (vers le haut, dans ton cas...)
    Dès lors, dans la boucle for i = ubound(...), remplace la ligne de code par celle-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If IsNumeric(Tableau(i)) Then Range("a" & Tableau(i)).Delete shift:=xlUp
    Tu dois évidemment adapter à ton cas, par exemple si tu souhaite supprimer les données dans une autre colonne que A...


    Ok?

  17. #17
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 106
    Points : 64
    Points
    64
    Par défaut
    non ce n'est pas qu'une cellule, c'est la ligne entière "dans la liste" pas en dehors


    ton code d'avant il marché bien mais quand à droite de ma liste il y a une autre liste ça foire

  18. #18
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 919
    Points
    55 919
    Billets dans le blog
    131
    Par défaut
    Désolé, je ne comprends pas ton problème

  19. #19
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 106
    Points : 64
    Points
    64
    Par défaut
    ça y est je sais comment m'expliquer, enfin je pense


    en fait cette suppression n'est pas très approprié pour mon problème.

    je vous explique depuis le début:

    j'ai une liste, mais c'est une liste qui est créer grace à Données/Liste/Créer une liste (jusqu'ici tout va bien)

    à l'intérieur de cette liste qui est constitué de 15 colonnes sont situé des donnes...

    et c'est la qui vous etes aparu, c'est que j'arrive à bien delete les lignes que je désire, MAIS à droite de ma liste, donc sur ma feuille excel j'ai d'autre données que je ne veux pas delete, mé vu qu'elles sont dans la même, elles sont malheureusement effacer...

    il faut que le delete s'applique que dans ma liste... please

    en gros le delete de ma ligne se ferai grâce à quelque chose comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Listobjects("Liste1").ListRows(NumLigne).Delete

  20. #20
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 919
    Points
    55 919
    Billets dans le blog
    131
    Par défaut
    Imaginons que ta liste va de A à H, tu utilises la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If IsNumeric(Tableau(i)) Then Range("a" & Tableau(i) & ":h" & tableau(i)).Delete shift:=xlUp
    dans la boucle que je t'ai donnée précédemment. A toi d'adapter au sein du code pour supprimer les cellules uniquement dans les colonnes de ta "liste" ("table" serait plus approprié).

    Cela étant dit, j'essaie toujours de ne pas mettre des données à droite d'une table, car c'est beaucoup plus délicat à gérer.

    Il y a souvent moyen d'utiliser d'autres onglets, en considérant qu'un onglet (une feuille) ne contient qu'une table.

    Tu testes et tu dis ce qu'il en est?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [DataSet] Supprimer plusieurs lignes
    Par Harry_polin dans le forum Linq
    Réponses: 10
    Dernier message: 08/06/2009, 22h54
  2. Supprimer plusieurs lignes avec VBA
    Par Nounours1 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 30/03/2008, 11h50
  3. VBA supprimer plusieur ligne excel
    Par morgan47 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 20/06/2006, 20h56
  4. [querydataset] supprimer plusieurs lignes
    Par doudine dans le forum JBuilder
    Réponses: 5
    Dernier message: 21/10/2005, 13h21
  5. Supprimer plusieurs lignes d'un DBGrid via Popupmenu?
    Par BVK dans le forum Bases de données
    Réponses: 1
    Dernier message: 02/12/2004, 11h27

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