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 :

Supprimer une ligne entier si une cellule est vide [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2018
    Messages : 28
    Par défaut Supprimer une ligne entier si une cellule est vide
    Bonjour forum, bonjour à tous
    Grace à ce forum, je peux petit à petit apprendre le macro. Aujourd'hui, je rencontre un autre problème. J'ai essayé de créer un macro qui permet de supprimer une ligne entier si une cellule dans cette ligne est vide. Tout d'abord, j'ai copié des données de feuille 1 vers feuille 2 et ensuit je travail uniquement sur la feuille 2. Par contre, quand je lance mon macro, je trouve que son résultat est inverse. Le résultat auquel je pense apparaitre dans la feuille 2 est affiché sur la feuille . Je regarde et verifie mon macro plusieurs fois mais je ne trouve pas son problème. Est ce que quelqu'un d'entre vous peut m'aider le verifier pourquoi j'ai ce problème? Merci d'avance

    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
     
    Sub SupprimeLigne()
    Dim i As Integer
    Dim j As Integer
    Dim FL1 As Worksheet, FL2 As Worksheet[ATTACH]386840[/ATTACH]
    'Copier des données de feuille 1 vers feuille 2
    Sheets("Feuil1").Range("A:F").Copy Sheets("Feuil2").Range("A:F")
    Set FL1 = Sheets("Feuil1")
    Set FL2 = Sheets("Feuil2")
    With FL2
          For j=1 To 6
                For i = 1 To 6
                      If Is Empty(Cells(i,j)) Then
                         Row(i).Delete
                      End if
               Next i
         Next j
    .Activate
    End With
     
    End Sub

  2. #2
    Membre Expert Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 733
    Par défaut
    Bonsoir, essayez avec ça, chez moi ça marche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Is Empty(Cells(i,j)) Then
                 Rows(i).Delete
      End if
    Cordialement

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2018
    Messages : 28
    Par défaut
    Citation Envoyé par Transitoire Voir le message
    Bonsoir, essayez avec ça, chez moi ça marche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Is Empty(Cells(i,j)) Then
                 Rows(i).Delete
      End if
    Cordialement
    Bonjour, J'ai déjà utilisé ce code dans mon macro. Le problème est que le résultat que je veux voir sur la feuille 2 est dans la feuille 1 quand je lance le calcul. J'ai déjà copié toutes les données de feuille 1 et travaillé seulement sur la feuille 2. Je ne sais pas pourquoi son résultat est dans la feuille 1 comme ça?

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2018
    Messages : 28
    Par défaut re
    Citation Envoyé par dysorthographie Voir le message
    Bonsoir,
    Au lieu de copier ta feuille1 vers a feuille2 fais un filtre élaboré de la feuille1 vers la feuille2.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    entête 1|entête 1
    <>""|<>""
    Bonjour,
    Commen je ne sais pas trop le macro, franchement je ne sais pas comment filter les deux feuille. Faut-il utiliser le code AutoFilter dans ce cas la?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par sommongkul Voir le message
    Bonjour,

    Une autre solution que celle de TRANSITOIRE :

    Attention à la cellule fusionnée Sum dans la ligne de titre. Dans mon code, cette ligne va être supprimée.

    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
    Option Explicit
     
    Sub SupprimeLigne()
     
    Dim J As Long, DerniereLigne As Long, DerniereColonne As Long
    Dim FL1 As Worksheet, FL2 As Worksheet
     
        Set FL1 = Sheets("Feuil1")
        Set FL2 = Sheets("Feuil2")
     
       FL1.Range("A:F").Copy Destination:=FL2.Range("A1")
     
       With FL2
     
            With .UsedRange
                 DerniereLigne = .SpecialCells(xlCellTypeLastCell).Row
                 DerniereColonne = .SpecialCells(xlCellTypeLastCell).Column
            End With
     
            For J = DerniereLigne To 1 Step -1
                If WorksheetFunction.CountA(.Range(.Cells(J, 1), .Cells(J, DerniereColonne))) < DerniereColonne Then
                   .Rows(J).Delete Shift:=xlUp
                End If
            Next J
      End With
     
      Set FL1 = Nothing
      Set FL2 = Nothing
     
    End Sub

  6. #6
    Invité
    Invité(e)
    Par défaut
    Je préfère te laisser entre le mains du Maitre https://philippetulliez.developpez.c...dvancedfilter/

  7. #7
    Membre Expert Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 733
    Par défaut
    bonsoir, avez vous bien remplacez Row. par Rows.
    J'ai fait un copier coller de votre code, j'ai ouvert un nouveau classeur, j'ai copié le code et j'ai mit quelques lignes en feuill1 pour test avec F1 et F2 , et ca marche!
    Je n'ai pas ouvert votre dossier, par contre!
    Cordialement

  8. #8
    Membre Expert Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 733
    Par défaut
    Re essayez avec cela, en faisant un copier coller!
    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
    Sub SupprimeLigne()
    Dim i As Integer
    Dim j As Integer
    Dim FL1 As Worksheet, FL2 As Worksheet
    'Copier des données de feuille 1 vers feuille 2
    Sheets("Feuil2").Activate
    Sheets("Feuil1").Range("A:F").Copy Sheets("Feuil2").Range("A:F")
    Set FL1 = Sheets("Feuil1")
    Set FL2 = Sheets("Feuil2")
    With FL2
          For j = 1 To 6
                For i = 1 To 6
                      If IsEmpty(Cells(i, j)) Then
                         Rows(i).Delete
                      End If
               Next i
         Next j
    .Activate
    End With
     
    End Sub
    Cordialement

  9. #9
    Invité
    Invité(e)
    Par défaut
    Désolé mais ce genre de code n'est pas fiable. Si tu supprime la ligne deux la ligne trois devient la ligne deux. Si pour ton malheur elle est également vide elle passera l'as.

    Mais une seule cellule vide suffit pour supprimer une ligne et dans ton contexte plusieurs lignes .

    Je pense pas que c'était la demande.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    dim garde as booleen 
    For j = 6 To  1 step -1
    Garde=false
                For i = 1 To 6
                      If not IsEmpty(Cells(i, j)) Then garde=true: Exit dor
                  Next i
    If garde=true  the  Rows(i).Delete
     
         Next
    Dernière modification par Invité ; 07/06/2018 à 23h14.

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonsoir
    Nom : Capture.JPG
Affichages : 204
Taille : 145,9 Ko
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2018
    Messages : 28
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    Je préfère te laisser entre le mains du Maitre https://philippetulliez.developpez.c...dvancedfilter/
    Merci, Je vais le lire toute de suite.

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2018
    Messages : 28
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    Bonjour,

    Une autre solution que celle de TRANSITOIRE :

    Attention à la cellule fusionnée Sum dans la ligne de titre. Dans mon code, cette ligne va être supprimée.

    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
    Option Explicit
     
    Sub SupprimeLigne()
     
    Dim J As Long, DerniereLigne As Long, DerniereColonne As Long
    Dim FL1 As Worksheet, FL2 As Worksheet
     
        Set FL1 = Sheets("Feuil1")
        Set FL2 = Sheets("Feuil2")
     
       FL1.Range("A:F").Copy Destination:=FL2.Range("A1")
     
       With FL2
     
            With .UsedRange
                 DerniereLigne = .SpecialCells(xlCellTypeLastCell).Row
                 DerniereColonne = .SpecialCells(xlCellTypeLastCell).Column
            End With
     
            For J = DerniereLigne To 1 Step -1
                If WorksheetFunction.CountA(.Range(.Cells(J, 1), .Cells(J, DerniereColonne))) < DerniereColonne Then
                   .Rows(J).Delete Shift:=xlUp
                End If
            Next J
      End With
     
      Set FL1 = Nothing
      Set FL2 = Nothing
     
    End Sub
    Merci Eric. Dans ce cas, je vais changer la ligne de boucle. Je fais seulement boucler des données numeriques.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par sommongkul Voir le message
    Merci Eric. Dans ce cas, je vais changer la ligne de boucle. Je fais seulement boucler des données numeriques.
    Si tu pars de la ligne 3, c'est OK.

  14. #14
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2018
    Messages : 28
    Par défaut
    Citation Envoyé par Transitoire Voir le message
    bonsoir, avez vous bien remplacez Row. par Rows.
    J'ai fait un copier coller de votre code, j'ai ouvert un nouveau classeur, j'ai copié le code et j'ai mit quelques lignes en feuill1 pour test avec F1 et F2 , et ca marche!
    Je n'ai pas ouvert votre dossier, par contre!
    Cordialement
    Merci Transitoire. Je vais essayer ton code.

  15. #15
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2018
    Messages : 28
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    Si tu pars de la ligne 3, c'est OK.
    Oui, merci encore une fois pour ton aide. Pour moi, je ne sais pas trop comment utiliser STEP-1. Ton code marche bien chez moi et je vais alors apprendre cette partie avec le syntax STEP-1.

  16. #16
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par sommongkul Voir le message
    Pour moi, je ne sais pas trop comment utiliser STEP-1. Ton code marche bien chez moi et je vais alors apprendre cette partie avec le syntax STEP-1.
    Quand tu veux supprimer une ligne, il te faut commencer par la fin. Step -1 te permet de "décrémenter" de 1.

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

Discussions similaires

  1. [XL-2010] Supprimer une ligne si une cellule est vide
    Par S.Mag dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 06/06/2017, 12h06
  2. Réponses: 3
    Dernier message: 29/03/2011, 20h38
  3. [XL-2007] ajouter une ligne automatiquement si tel cellule est remplie
    Par croky23 dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 23/01/2011, 23h19
  4. compter sur une ligne à partir de derniere cellule non vide
    Par oscar.cesar dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/04/2009, 18h23
  5. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 21h24

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