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 permettant de supprimer les lignes contenant des cellules vides [XL-365]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2019
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2019
    Messages : 107
    Points : 52
    Points
    52
    Par défaut Macro permettant de supprimer les lignes contenant des cellules vides
    Bonjour,

    J'ai développé une macro me permettant de supprimer les lignes contenant une cellule vide,

    J'aimerais affiner celle-ci en lui permettant de supprimer les lignes dont les cellules de certaines colonnes sont vides,

    Voici la macro déjà développé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
    Sub Ronde1Nuit()
    '
    ' Ronde1Nuit Macro
    '
     
    '
        Range("C:D").Select
        Selection.Copy
        Sheets("Ronde1Nuit").Select
        Range("A1").Select
        ActiveSheet.Paste
     
     
        Worksheets("Ronde1Nuit").Range("A:B").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
     
        Sheets("Données brutes").Select
        Application.CutCopyMode = False
     
    End Sub
    Mon fichier excel : Excel forum.xlsm

  2. #2
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour JS, bonjour le forum,

    Ta macro fait déjà le job mais je te conseille d'éviter autant que tu le peux les Select et Activate qui ne font que ralentir l'exécution du code et dont source de nombreux plantage. Ton code modifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Ronde1Nuit()
    Worksheets("Données Brutes").Range("C:D").Copy Worksheets("Ronde1Nuit").Range("A1")
    Worksheets("Ronde1Nuit").Range("A:B").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    End Sub
    À plus,

    Thauthème

    Je suis Charlie

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2019
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2019
    Messages : 107
    Points : 52
    Points
    52
    Par défaut
    Merci pour l'astuce Thautheme

    Par contre ma macro nest pas suffisante pour ce que je veux, c'est à dire une macro qui supprime la ligne correspondante si certaines cellules en particulier de cette ligne sont vides,

    exemple si la cellule des colonnes D et E sont vides supprimer la ligne, dans ce cas là si la cellule D5 est vide et que la E5 non la ligne 5 n'est pas supprimée

  4. #4
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Bonjour,

    Essaies :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Ronde1Nuit()
    Dim c1 As Range
    Dim c2 As Range
      Worksheets("Données Brutes").Range("C:D").Copy Worksheets("Ronde1Nuit").Range("A1")
      Set c1 = Worksheets("Ronde1Nuit").Columns("A").SpecialCells(xlCellTypeBlanks)
      Set c2 = Worksheets("Ronde1Nuit").Columns("B").SpecialCells(xlCellTypeBlanks)
      Intersect(c1.EntireRow, c2).EntireRow.Delete
    End Sub
    Mais il serait préférable de limiter la recherche à la zone concernée (et donc de gérer l'erreur SpecialCells)
    Édit, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Ronde1Nuit()
    Dim r As Range
    Dim c1 As Range
    Dim c2 As Range
      Worksheets("Données Brutes").Range("C:D").Copy Worksheets("Ronde1Nuit").Range("A1")
      Set r = Worksheets("Ronde1Nuit").UsedRange
      On Error Resume Next
      Set c1 = r.Columns("A").SpecialCells(xlCellTypeBlanks)
      Set c2 = r.Columns("B").SpecialCells(xlCellTypeBlanks)
      Set r = Intersect(c1.EntireRow, c2)
      On Error GoTo 0
      If Not r Is Nothing Then r.EntireRow.Delete
    End Sub
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 729
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 729
    Points : 28 555
    Points
    28 555
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si tu dois supprimer des lignes suivants critères, tu peux utiliser le filtre avancés d'excel pour filtrer et ensuite supprimer les lignes visibles
    Voir ce billet sur le sujet Excel VBA - Supprimer des lignes suivant critères avec la méthode AdvancedFilter
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Re,


    Citation Envoyé par js777 Voir le message
    Merci pour l'astuce Thautheme
    Par contre ma macro nest pas suffisante pour ce que je veux, c'est à dire une macro qui supprime la ligne correspondante si certaines cellules en particulier de cette ligne sont vides,
    exemple si la cellule des colonnes D et E sont vides supprimer la ligne, dans ce cas là si la cellule D5 est vide et que la E5 non la ligne 5 n'est pas supprimée
    Soit ton exemple n'est pas du tout significatif de la réalité de ton projet, soit je n'y comprends rien !...
    Si tu ne copies que deux colonnes (C et D) dans A1 de l'onglet Données Brutes tu ne devrais vérifier que les colonnes A et B de cet onglet. Pourquoi les autres, elles seront vides ?!...

    Sinon, essaie ce 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
    17
    18
    19
    20
    21
    22
    Sub Ronde1Nuit()
    Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
    Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
    Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
    Dim PL As Range 'déclare la variable PL (PLage)
    Dim I As Integer 'déclare la variable I (Incrément)
    Dim J As Integer 'déclare la variable J (incrément)
     
    Set OS = Worksheets("Données Brutes") 'définit l'onglet source OS
    Set OD = Worksheets("Ronde1Nuit") 'définit l'onglet destination OD
    OS.Range("C:D").Copy OD.Range("A1") 'copie les colonne C et D de l'onglet source et les colle dans A1 de l'onglet destination
    TV = OD.Range("A1").CurrentRegion 'définit le tableau des valeurs TV de l'onglet destination
    Set PL = OD.Range("A1") 'initialise la plage PL
    For I = 1 To UBound(TV, 1) 'boucle 1 sur toutes les lignes I du tableau des valeurs TV
        For J = 1 To UBound(TV, 2) 'boucle 2 sur toutes les colonnes J du tableau des valeurs TV
            'si la donnée ligne I colonne J de tv est vide, redéfinit la plage PL (la ligne I si PL ne comptait qu'une seule cellule, sinon l'inuin de la plage PL et de la ligne I)
            'sort de la boucle 2
            If TV(I, J) = "" Then Set PL = IIf(PL.Cells.Count = 1, OD.Rows(I), Application.Union(PL, OD.Rows(I))): Exit For
        Next J 'prochaine colonne de la boucle 2
    Next I 'prochaine ligne de la boucle 1
    PL.Delete 'supprime la plage PL
    End Sub
    À plus,

    Thauthème

    Je suis Charlie

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2019
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2019
    Messages : 107
    Points : 52
    Points
    52
    Par défaut
    Bonjour Patrice,

    Merci pour ta réponse, ta méthode fonctionne seulement dans les cas où 2 cellules par lignes sont vides, dans mon cas j'aimerais supprimer la ligne quand 4 cellules (pas n'importe lesquelles) sont vides,

    J'ai donc essayé d'ajouter l'intégralité des colonnes concernées en paramètre mais ça me renvoie cette erreur :

    Nom : err91.png
Affichages : 1412
Taille : 29,7 Ko

  8. #8
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2019
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2019
    Messages : 107
    Points : 52
    Points
    52
    Par défaut
    Thautheme,

    Ton code supprime les lignes contenant au moins une cellule vide, en gros ce que fait déjà ma macro,

    Soit ton exemple n'est pas du tout significatif de la réalité de ton projet, soit je n'y comprends rien !...
    Si tu ne copies que deux colonnes (C et D) dans A1 de l'onglet Données Brutes tu ne devrais vérifier que les colonnes A et B de cet onglet. Pourquoi les autres, elles seront vides ?!...
    Oui en effet l'exemple était pour un cas ou ma macro suffisait donc un tableau à 2 colonnes, pour les autres cas (4 et 3 colonnes) elle n'est pas suffisante

  9. #9
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 729
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 729
    Points : 28 555
    Points
    28 555
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    As-tu lu le billet que je t'ai proposé de consulter ?
    Si tu utilises la fonction "clé sur porte" proposée, il te suffit de modifier à ta guise la formule correspondant aux critères pour supprimer les lignes

    Exemple de la suppression des lignes si dans une plage de cellules ayant 13 colonnes (de A à M) 4 cellules sont vides
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub T()
      Dim rng As Range
      Dim FormulaText As String
      FormulaText = "=COUNTBLANK(A2:M2)=4"
      Backup
      Set rng = shtSource.Range("A1").CurrentRegion
      DeleteRowsByAdvancedFilter rng, FormulaText
      Set rng = Nothing
    End Sub
    Si le critère change, il suffit de modifier la formule contenue dans la variable FormulaText
    Exemple pour la suppression des lignes dont les cellules de la colonne E, G et J sont vides FormulaText = "=AND(LEN(E2)=0,len(G2)=0,LEN(J2)=0)"
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  10. #10
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Citation Envoyé par js777 Voir le message
    Merci pour ta réponse, ta méthode fonctionne seulement dans les cas où 2 cellules par lignes sont vides, dans mon cas j'aimerais supprimer la ligne quand 4 cellules (pas n'importe lesquelles) sont vides,
    Tu n'avais demandé que 2 cellules !
    Avec ta modification Intersect(b.EntireRow, c, d, e).EntireRow.Delete, c'est toujours 2 colonnes : la B et une (ou plusieurs) des trois autres.
    Pour 4 colonnes vides :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Intersect(b.EntireRow, c.EntireRow, d.EntireRow, e).EntireRow.Delete
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  11. #11
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2019
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2019
    Messages : 107
    Points : 52
    Points
    52
    Par défaut
    Merci pour ta réponse Patrice, ça fonctionne !

    Philippe, merci pour le lien je vais lire ça avec intérêt

  12. #12
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2019
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2019
    Messages : 107
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    As-tu lu le billet que je t'ai proposé de consulter ?
    Si tu utilises la fonction "clé sur porte" proposée, il te suffit de modifier à ta guise la formule correspondant aux critères pour supprimer les lignes

    Exemple de la suppression des lignes si dans une plage de cellules ayant 13 colonnes (de A à M) 4 cellules sont vides
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub T()
      Dim rng As Range
      Dim FormulaText As String
      FormulaText = "=COUNTBLANK(A2:M2)=4"
      Backup
      Set rng = shtSource.Range("A1").CurrentRegion
      DeleteRowsByAdvancedFilter rng, FormulaText
      Set rng = Nothing
    End Sub
    Si le critère change, il suffit de modifier la formule contenue dans la variable FormulaText
    Exemple pour la suppression des lignes dont les cellules de la colonne E, G et J sont vides FormulaText = "=AND(LEN(E2)=0,len(G2)=0,LEN(J2)=0)"
    Bonjour Philippe,

    J'ai testé ta fonction, pas pour supprimer les lignes dont les cellules sont vides mais pour supprimer les lignes dont le résultat de la cellule d'une colonne est inférieur à 0,

    Lorsque je lance la fonction j'ai une erreur elle n'est "pas définie":

    Nom : deleterowsbyadvancedfilter.png
Affichages : 1373
Taille : 30,3 Ko

    Je l'ai pourtant définie dans "ThisWorkbook":

    Nom : deleterowdefinition.png
Affichages : 1349
Taille : 49,1 Ko

    Que n'ai-je pas fait que j'aurais du faire pour que ça fonctionne ?

  13. #13
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Il faut mettre la Sub dans un module Standard (dans ThisWorkbook, elle n'est pas publique donc non utilisable ailleurs)
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  14. #14
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2019
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2019
    Messages : 107
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par Patrice740 Voir le message
    Il faut mettre la Sub dans un module Standard (dans ThisWorkbook, elle n'est pas publique donc non utilisable ailleurs)
    Merci Patrice,

  15. #15
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2019
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2019
    Messages : 107
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    As-tu lu le billet que je t'ai proposé de consulter ?
    Si tu utilises la fonction "clé sur porte" proposée, il te suffit de modifier à ta guise la formule correspondant aux critères pour supprimer les lignes

    Exemple de la suppression des lignes si dans une plage de cellules ayant 13 colonnes (de A à M) 4 cellules sont vides
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub T()
      Dim rng As Range
      Dim FormulaText As String
      FormulaText = "=COUNTBLANK(A2:M2)=4"
      Backup
      Set rng = shtSource.Range("A1").CurrentRegion
      DeleteRowsByAdvancedFilter rng, FormulaText
      Set rng = Nothing
    End Sub
    Si le critère change, il suffit de modifier la formule contenue dans la variable FormulaText
    Exemple pour la suppression des lignes dont les cellules de la colonne E, G et J sont vides FormulaText = "=AND(LEN(E2)=0,len(G2)=0,LEN(J2)=0)"
    Bonjour Philippe,

    J'ai pu finalement tester ta fonction mais celle-ci ne supprime pas les colonnes mais seulement les valeurs de certaines cellules,

    Ici les lignes contenant des cellules "#REF!" après exécution de la macro auraient du être entièrement supprimées :

    Nom : ref.png
Affichages : 1371
Taille : 57,2 Ko

  16. #16
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 729
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 729
    Points : 28 555
    Points
    28 555
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'ai pu finalement tester ta fonction mais celle-ci ne supprime pas les colonnes mais seulement les valeurs de certaines cellules,
    La fonction DeleteRowsByAdvancedFilter effectue trois opérations
    1. un filtre avancé sur place basé sur les critères placés dans la zone des critères
    2. suppression des lignes visibles
    3. suppression du filtre

    donc si la zone des données et la zone des critères sont bien définies, tu dois obtenir le résultat escompté
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  17. #17
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2019
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2019
    Messages : 107
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,

    La fonction DeleteRowsByAdvancedFilter effectue trois opérations
    1. un filtre avancé sur place basé sur les critères placés dans la zone des critères
    2. suppression des lignes visibles
    3. suppression du filtre

    donc si la zone des données et la zone des critères sont bien définies, tu dois obtenir le résultat escompté
    En effet ta fonction marche très bien, les #REF! sont du au fait que les cellules des colonnes concernées utilises les cellules des lignes précédentes pour obtenir leur valeur, le problème c'est que quand toute la ligne est supprimée le calcul se fait sur une référence qui n'existe plus,

  18. #18
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2019
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2019
    Messages : 107
    Points : 52
    Points
    52
    Par défaut
    En fait dans mon cas c'est surtout la ligne se trouvant sous la ligne avec la valeur négative qui pose problème,

    Y aurait-il moyen avec ta fonction de supprimer la ligne se trouvant en dessous de celle avec le critère ?

  19. #19
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 729
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 729
    Points : 28 555
    Points
    28 555
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Y aurait-il moyen avec ta fonction de supprimer la ligne se trouvant en dessous de celle avec le critère ?
    Le secret de la réussite de ce que va exécuter la fonction se trouve dans la manière dont on écrit la formule logique que l'on place dans la zone des critères
    Exemple simple : Imaginons une zone des données A1:L500 dont on souhaite supprimer les lignes dont la colonne B contient la lettre "T", le test logique sera =B2="T" alors que si l'on souhaite supprimer les lignes dont la valeur de colonne B de la ligne qui précède contient la lettre "T", le test logique sera =B1="T"

    Est-ce plus clair ?
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  20. #20
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2019
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2019
    Messages : 107
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,

    Le secret de la réussite de ce que va exécuter la fonction se trouve dans la manière dont on écrit la formule logique que l'on place dans la zone des critères
    Exemple simple : Imaginons une zone des données A1:L500 dont on souhaite supprimer les lignes dont la colonne B contient la lettre "T", le test logique sera =B2="T" alors que si l'on souhaite supprimer les lignes dont la valeur de colonne B de la ligne qui précède contient la lettre "T", le test logique sera =B1="T"

    Est-ce plus clair ?
    J'ai testé en remplaçant la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FormulaText = "=AND(D2<0)"
    Par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FormulaText = "=AND(D2<0, D1<0)"
    et ça m'a de nouveau affiché les résultats négatifs,

    Quelque chose m'échappe visiblement...

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

Discussions similaires

  1. Supprimer les lignes contenant que des 0
    Par Paul Pit dans le forum MATLAB
    Réponses: 2
    Dernier message: 21/05/2014, 15h43
  2. Réponses: 2
    Dernier message: 09/06/2011, 15h38
  3. Supprimer les lignes contenants un mot specifique en batch file
    Par stpaul04 dans le forum Scripts/Batch
    Réponses: 6
    Dernier message: 12/02/2011, 15h11
  4. [XL-2007] Macro, pour supprimer les lignes contenant « #REF! »
    Par LittleDaddy dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/01/2011, 01h05

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