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 :

[VBA] Comment supprimer une ligne entiere dans excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 31
    Points : 18
    Points
    18
    Par défaut [VBA] Comment supprimer une ligne entiere dans excel
    Bonjour,
    Pouvez vous m'aidez

    voici mon code :

    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
    Public Function differences()
    Dim Cell As Range
     
    For Each Cell In Range("A2:A16")
     
    If Cell Like "*" & Cell.Offset(0, 1) & "*" Or _
    Cell.Offset(0, 1) Like "*" & Cell & "*" Then GoTo 1 Else GoTo 2
     
    1: MsgBox Cell & "  /  " & Cell.Offset(0, 1) & vbLf & vbLf & "SEMBLABLES"
     ' Supprimer la ligne entiére et remonter les lignes du dessous
     
    2: MsgBox Cell & "  /  " & Cell.Offset(0, 1) & vbLf & vbLf & "ERREURS"
     
    Next Cell
     
    End Function
    Ce programme me permet de comparer deux zone de texte et j'aimerai pouvoir supprimer les lignes entiéres qui correspondes à "SEMBLABLES" afin de ne garder que les erreurs et si possible faire remonter les lignes afin qu'il n'y est pas de trou dans mon tableau.

    Peut on aussi dans la ligne du code "For Each Cell In Range("A2:A16")"
    spécifier dans une variable la derniére ligne de la ranger.
    Ex: For Each Cell In Range("A2:Ax")

    Merci

  2. #2
    Membre expérimenté Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Points : 1 405
    Points
    1 405
    Par défaut
    Hello!
    Déjà, il me semble que ton code n'est pas une "Function", mais une procédure => "Sub"
    Ensuite, je crois bien aussi qu'il faut que tu sépares les différents "morceaux" de ton programme (le test principal, puis 1:, et 2. Place des "Exit Sub" entre.
    Et pour modifier la zone de travail, tu peux faire ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim MaZone As Range
    Dim n As Integer
    n = 20
    MaZone = Range(Cells(1,1),Cells(n,1))
    Puis enchainer sur le "For Each Cell In MaZone"

  3. #3
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 128
    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 128
    Points : 55 940
    Points
    55 940
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Avec Excel, lorsque tu souhaites traiter des lignes en vue de leur effacement éventuel, tu dois toujours commencer par le bas du tableau, sinon, il y a des lignes que tu ne traiteras pas...

    Pour déterminer la dernière cellule utiliser de la colonne A, tu peux utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    range("a65536").end(xlup)
    Tu peux aussi en connaître le numéro de ligne via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    range("a65536").end(xlup).row
    Personnellement, je n'aime pas trop les GOTO. Dans ton cas, tu peux facilement les éviter en utilisant une structure du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    If ... then
        ...
        Else
        ...
    End if
    J'ai donc adapté le code que tu proposes comme suit:
    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
     
    Sub Differences()
        Dim Cellule As Range
        Dim Derniere_Ligne As Long
        Dim Compteur As Long
     
        ' Déterminer la dernière ligne utilisée de la colonne A
        Derniere_Ligne = Range("a65536").End(xlUp).Row
     
        ' Démarrer du bas pour scanner toutes les lignes
        For Compteur = Derniere_Ligne To 2 Step -1
            ' Déterminer la cellule à traiter
            Set Cellule = Range("a" & Compteur)
            If Cellule = Cellule(0) Then
                ' Cellules semblables, on supprime
                MsgBox Cellule & " / " & Cellule(0) & " Semblables"
                Cellule.EntireRow.Delete
                Else
                ' Cellules différentes, on avertit
                MsgBox Cellule & " / " & Cellule(0) & " Erreur"
            End If
        Next Compteur
    End Sub
    Ok?

    Pierre Fauconnier

  4. #4
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Salut

    Tu dis :
    ... afin de ne garder que les erreurs et si possible faire remonter les lignes afin qu'il n'y est pas de trou dans mon tableau.
    Pour supprimer une ligne et que les autres remontent c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Rows("31:31").Select
        Selection.Delete Shift:=xlUp
    Ici selection de la ligne 31 puis suppression.

    Tu dis :
    Peut on aussi dans la ligne du code "For Each Cell In Range("A2:A16")"
    spécifier dans une variable la derniére ligne de la ranger.
    Oui c'est possible! La meilleurs solution est celle de Megaxel tu peux également (si tu ne maitrise pas bien le gestion des Cells)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim selec As String
    Dim lign As Long
    '
    '... ton code
    '
    selec = "A2:A" & Trim(Str(lign))
    For Each Cell In Range(selec)
    '... la suite de ton code
    Voilà en espérant avoir répondu a ton problème

    Igloobel

    PS : Je suis comme Pierre Fauconnier j'aime pas trop les GoTo parce que pour le déboggage c'est galère !

  5. #5
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 128
    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 128
    Points : 55 940
    Points
    55 940
    Billets dans le blog
    131
    Par défaut
    Salut Igloobel

    Tu dis
    Pour supprimer une ligne et que les autres remontent c'est :Code:
    Rows("31:31").Select
    Selection.Delete Shift:=xlUp
    Ici selection de la ligne 31 puis suppression.
    Il faut noter (le répétera-t-on assez??) qu'il n'est pas nécessaire de sélectionner une ligne, une colonne, une cellule pour travailler avec.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    rows("31:31").delete shift:=xlup
    fonctionne plus rapidement...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Tu dis : Citation: 
    Peut on aussi dans la ligne du code "For Each Cell In Range("A2:A16")" 
    spécifier dans une variable la derniére ligne de la ranger. 
    Oui c'est possible! La meilleurs solution est celle de Megaxel
    C'est tout à fait exact, mais cette méthode ne permet pas de sélectionner la dernière ligne utilisée de la rangée (je préfère le mot "colonne")... mais de spécifier arbitrairement une valeur n pour l'utiliser dans la création d'une référence de plage. La meilleure façon de situer la dernière ligne utilisée d'une colonne est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    range("a65536").end(xlup)
    qui remonte de la toute dernière ligne possible (65536) en s'arrêtant à la première cellule non vide rencontrée (équivalent du raccourci CTRL+Flèche vers le haut dans une feuille excel)

    Ok?

    Pierre Fauconnier

  6. #6
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Il faut noter (le répétera-t-on assez??) qu'il n'est pas nécessaire de sélectionner une ligne, une colonne, une cellule pour travailler avec.
    Oui, oui pardon

    Le pire c'est que je le sais

    Igloobel

    PS : En fait, comme je suis un peu faignant, j'ai fait faire la macro par VBA et oublier de la modifer

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 31
    Points : 18
    Points
    18
    Par défaut Merci
    Merci pour vos reponses,
    C'est exactement ce que je cherchais mais la condition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Cell Like "*" & Cell.Offset(0, 1) & "*" Or _
    Cell.Offset(0, 1) Like "*" & Cell & "*" Then

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set Cellule = Range("a" & Compteur)
            If Cellule = Cellule(0) Then
    ne renvoi pas les même erreurs, et ce que je peut adapter la premiére condition au code donnée par Pierre Fauconnier ?

    Merci

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 31
    Points : 18
    Points
    18
    Par défaut Un oublie
    Un oublie
    Voici le code que j'utilise , pardon

    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
    Sub Differences()
        Dim Cellule As Range
        Dim Derniere_Ligne As Long
        Dim Compteur As Long
     
        ' Déterminer la dernière ligne utilisée de la colonne A
        Derniere_Ligne = Range("a65536").End(xlUp).Row
     
        ' Démarrer du bas pour scanner toutes les lignes
        For Compteur = Derniere_Ligne To 2 Step -1
            ' Déterminer la cellule à traiter
            Set Cellule = Range("a" & Compteur)
            If Cellule = Cellule(0) Then
                ' Cellules semblables, on supprime
                MsgBox Cellule & " / " & Cellule(0) & " Semblables"
                Cellule.EntireRow.Delete
                Else
                ' Cellules différentes, on avertit
                MsgBox Cellule & " / " & Cellule(0) & " Erreur"
            End If
        Next Compteur
    End Sub

    [balises ajoutées par DarkVader]
    SVP
    Veuillez éditer le contenu de votre post (absence de balises de code *)
    afin de vous conformer aux régles d'utilisation des forums.

    Prière de lire les régles d'utilisation avant de poster.

    Merci

    * Mode d'emploi du BBCode

  9. #9
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 128
    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 128
    Points : 55 940
    Points
    55 940
    Billets dans le blog
    131
    Par défaut
    Les deux conditions ne renvoient pas les mêmes valeurs...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cellule = cellule(0)
    teste une égalité stricte entre une cellule et la cellule qui la précède...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cellule like "*" & cellule(0) & "*" or cellule(0) like "*" & cellule & "*"
    teste si la chaîne de caractères d'une cellule est présente dans la chaîne de caractères de la cellule qui la précède... ou l'inverse

    Il est donc normal que les résultats soient différents. A toi d'adapter, selon mon deuxième extrait de code, par exemple...

    Dans mes précédents messages, je m'étais plus attaché au code qu'à cette égalité...

    Pierre Fauconnier

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 31
    Points : 18
    Points
    18
    Par défaut
    Merci,
    le test de la chaine marche bien cependant j'ai remarquer un souci :
    le programme ne compare pas les 2 chaines de caractéres de la même ligne.
    Il compare par exemble A56 avec B55, ce qui me fausse tous mon tableau.
    Dois-je remplacer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If Cellule Like "*" & Cellule(0) & "*" Or Cellule(0) Like "*" & Cellule & "*" Then
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If Cellule Like "*" & Cellule(0) & "*" Or Cellule Like "*" & Cellule & "*" Then
    Merci pour vos précieuses réponses

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Dois-je remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Cellule Like "*" & Cellule(0) & "*" Or Cellule(0) Like "*" & Cellule & "*" Then
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Cellule Like "*" & Cellule(0) & "*" Or Cellule Like "*" & Cellule & "*" Then
    Il est clair que tu n'as pas compris ce que fait like, sinon tu n'aurais pas posé cette question. Un coup sur F1 t'en dira autant que nous, sinon, un tour dans la FAC peut-être...
    Comprendre le code qu'on te donne est la seule manière de progresser, sinon, le boulot, c'est nous qui le faisons, pas toi...

    J'en reviens à ton code car j'ai besoin d'explications
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Cellule = Range("a" & Compteur)
    puis, la ligne du dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Cellule = Cellule(0) Then
    Dans le premier cas tu as un objet, dans le second tu as à la fois un objet et un tableau du même nom. J'ignore si c'est possible dans une autre version que la mienne mais chez moi, un tableau reste un tableau et ne peux avoir d'homonyme.
    Ensuite, tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Cell Like "*" & Cell.Offset(0, 1)
    Peux-tu préciser de qu'est Cell ?

    A tout'

  12. #12
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 128
    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 128
    Points : 55 940
    Points
    55 940
    Billets dans le blog
    131
    Par défaut
    En fonction de ton premier message, tu dois utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cellule like "*" & cellule(1,2) & "*" or cellule(1,2) like "*" & cellule & "*"
    ou, si tu préfères travailler avec offset
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cellule like "*" & cellule.offset(0,1) & "*" or cellule.offset(0,1) like "*" & cellule & "*"
    Ok?

    Pierre Fauconnier

  13. #13
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 128
    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 128
    Points : 55 940
    Points
    55 940
    Billets dans le blog
    131
    Par défaut
    Ouskel'n'or

    Tu écris

    If Cellule = Cellule(0) Then
    Dans le premier cas tu as un objet, dans le second tu as à la fois un objet et un tableau du même nom. J'ignore si c'est possible dans une autre version que la mienne mais chez moi, un tableau reste un tableau et ne peux avoir d'homonyme.
    Cellule(0) n'est pas un tableau, c'est la forme condensée de cellule.offset(), en sachant que dans la forme condensée, on part de 1 et non de 0 dans les indices, ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cellule(1,1) = cellule.offset(0,0)
    Pierre Fauconnier

  14. #14
    Membre expérimenté Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Points : 1 405
    Points
    1 405
    Par défaut
    Ha ben là, je suis scié! C'est la première fois que je vois cette syntaxe!!
    Merci, Pierre

  15. #15
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    C'est la première fois que je vois cette syntaxe!!
    Merci, Pierre
    ++

    Cependant je ne comprends toujours pas Cell dans mon message précédent...

    A+

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 31
    Points : 18
    Points
    18
    Par défaut [résolu] Merci
    Merci Pierre et à vous tous pour vos précieuse informations, j'espére qu'un jour je pourai à mon tour, aider les autres.

  17. #17
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1
    Points : 0
    Points
    0
    Par défaut Problème
    Bonjour quelqu'un pourrait m'aider je n'arrive pas à supprimer les lignes vides.

    Merci d'avance pour votre réponse

    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
    Option Explicit
     
    Sub Inventaire_vide()
     
    'Declaration et initialisation des variables'
        Dim Nb_ligne As Integer
        Dim ligne As Integer
     
     
        Nb_ligne = 1
        ligne = 1
     
    'Demander à l'utilisateur le nombre de lignes
        Nb_ligne = InputBox("Entrer le nombre de lignes que vous avez : ")
     
    'Dire que quand la cellule de la colonne 1 est vide, supprimer la ligne entière
        While ligne < Nb_ligne
            If Sheets("Feuil1").Cells(ligne, 1) = "" Then
                Worksheets("Feuil1").Row((ligne)).Delete
            End If
            ligne = ligne + 1
        Wend
     
    End Sub

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/09/2008, 11h42
  2. Comment transférer une ligne d'une feuille Excel vers une autre
    Par iboulaye1980 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/05/2007, 10h32
  3. Réponses: 1
    Dernier message: 24/04/2007, 17h20
  4. [VBA-E] Inserer une ligne vide dans Excel
    Par monsurf dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/07/2006, 16h48
  5. [C#] Comment supprimer une ligne dans DataGrid ?
    Par BAUDIER dans le forum ASP.NET
    Réponses: 2
    Dernier message: 20/07/2004, 16h03

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