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 en fonction d'une valeur de cellule [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Débutant   Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    885
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 885
    Points : 267
    Points
    267
    Par défaut Supprimer une ligne en fonction d'une valeur de cellule



    Je voudrais savoir comment faire pour supprimer une ligne en fonction d'une valeur d'une des cellules de la ligne.

    Sauf qu'on ne sait pas dans quelles colonne se trouve la cellules ni dans quelle ligne

    En fait il me faut chercher dans une feuille le mot "Total" (on ne sait pas où il est) et supprimer la ligne dans laquelle se trouve la cellule avec le mot "Total"

  2. #2
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    bonjour FCL31 fait une recherche SUR FIND si tu trouves pas repost a+

    un exemple simple: si total vide la ligne attention code pour une occurence si plusieurs total possible il faut un autre code a adapter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Option Explicit
    Option Compare Text
    Sub es()
      Dim c As Variant
        Set c = [A:iv].Find(What:="total", LookIn:=xlValues, LookAt:=xlWhole)
        If c Is Nothing Then
          MsgBox "Non trouvé"
        Else
          c.EntireRow.Delete
        End If
    End Sub

  3. #3
    Débutant   Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    885
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 885
    Points : 267
    Points
    267
    Par défaut
    Sa a l'air de bien marché

    J'ai juste oublié de spécifier que la recherche devait se faire sur toutes les feuilles du classeur or là sa me fait le recherche sur une feuille

    Désolé

  4. #4
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    dans ce cas boucle sur les feuilles tu sais le faire on t'a déjà donné le code...
    je te laisse faire les déclaration de variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for each sh in worksheets
     
        Set c = sh.[A:iv].Find(What:="total", LookIn:=xlValues, LookAt:=xlWhole)
        If c Is Nothing Then
          c.EntireRow.Delete
        End If
    next sh
    Si tu veux un message met une variable booléenne a vrai une fois le résultat trouvée et test la après la boucle

    edit petit souci le clavier le code est visiblement semblable a celui de laetitia

  5. #5
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    re essai comme cela !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Option Explicit
    Option Compare Text
    Sub es()
    Dim c As Variant, ws As Worksheet
    Application.ScreenUpdating = False
    For Each ws In Worksheets
    ws.Activate
    Set c = [A:iv].Find(What:="total", LookIn:=xlValues, LookAt:=xlWhole)
    If Not c Is Nothing Then c.EntireRow.Delete
    Next ws
    End Sub
    ps salut l'ami krovax effectivement on ta donne le code hier sur un post qui a ete supprimer??

  6. #6
    Débutant   Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    885
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 885
    Points : 267
    Points
    267
    Par défaut
    Citation Envoyé par Krovax Voir le message
    dans ce cas boucle sur les feuilles tu sais le faire on t'a déjà donné le code...
    je te laisse faire les déclaration de variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for each sh in worksheets
     
        Set c = sh.[A:iv].Find(What:="total", LookIn:=xlValues, LookAt:=xlWhole)
        If c Is Nothing Then
          c.EntireRow.Delete
        End If
    next sh
    Si tu veux un message met une variable booléenne a vrai une fois le résultat trouvée et test la après la boucle

    edit petit souci le clavier le code est visiblement semblable a celui de laetitia
    Merci de ton aide
    Mais j'avais essayé mais sa marche pas


    Par contre laetitia, ton code, je ne sais pas pourquoi, ne me supprime pas la ligne avec le mot "Total" mais sa me supprime la ligne 1

  7. #7
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    re, comment tu l as ecrit ??????? je viens de tester pas de souci.

  8. #8
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Si le code est dans le module de feuil1 par exemple
    Si je me souvient bien des tests que j'avais fait tu fera toujours la recherche dans la feuille 1
    les activate ne changera rien
    essaye de mettre dans le module de la feuil1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sub test()
    worksheets("feuil2").activate
    range("a1")="Bonjour"
    end sub
    La feuil2 est bien affiché mais le range travaille sur a feuil1

  9. #9
    Débutant   Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    885
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 885
    Points : 267
    Points
    267
    Par défaut
    Je viens de réessayé : toujours le même résultat

    Si sa peu aidé, je vous met le fichier Excel en pièce joint

    Peut être que une partie de mon code fait "interférence" car effectivement, sur un doc Excel simple, sa marche ??

  10. #10
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    re plus le temps de regarde ton fichier il faut que je partes sorry.
    en esperant que l' ami krovax a le temps

    tu es sur que cela vient pas de ton pc je vois des flammes(lol)

  11. #11
    Membre actif
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Points : 283
    Points
    283
    Par défaut
    Je vien de télécharger ton fichier, j'ai mis Total dans une case au hasard et ça fonctionne, la ligne dans laquelle j'ai ecrit total est bien supprimée.
    Tu es sur de ton coup. Est ce que ton fichier chez toi est exacetement le même?

  12. #12
    Débutant   Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    885
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 885
    Points : 267
    Points
    267
    Par défaut
    Effectivement je viens d'essayé (encore et encore) en important (car c'est l'un des but du fichier) avec un simple petit fichier : pas de problème

    Sa peu venir des fichiers importés ?????????

    Mis a part un calcul et des filtres automatique (sur les fichiers importés), il n'y a rien de particulier qui aurait pu posé problème éventuellement.
    Surtout que la suppression des calculs et autre est réalisé avant de d'exécuté la suppression des cellules avec le mot "Total"


    Un avis

  13. #13
    Membre actif
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Points : 283
    Points
    283
    Par défaut
    J'ai déjà eu un problème avec Find qui venait du format des cellules. Mais dans mon cas il ne trouvait pas, dans ton cas il trouve visibement en ligne 1 et l'efface, c'est bien ça?

    Je viens de relire les post au dessus et je suis un peu perdu, ton problème est qu'il supprime la ligne 1 ou qu'il ne tourne pas sur toutes les feuilles du classeur?

  14. #14
    Débutant   Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    885
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 885
    Points : 267
    Points
    267
    Par défaut
    Citation Envoyé par diude54 Voir le message
    Je viens de relire les post au dessus et je suis un peu perdu, ton problème est qu'il supprime la ligne 1 ou qu'il ne tourne pas sur toutes les feuilles du classeur?
    Apparament, il tourne sur toutes les feuilles mais au lieu de supprimer les ligne dans lesquelles on trouve la cellule "Total" (qui n'est pas dans la première ligne), il me supprime la première ligne



    Sinon pour mon probléme, il pourrai (je pense) y avoir une autre solution :

    La cellules avec "Total", se trouve a la fin de chacune des feuilles mais pas forcement dans la même colonne d'une feuilles à l'autre.
    Donc n'y a t'il pas une autre possibilité sachant que dans la ligne où se trouve la cellule "Total", les cellules de la colonne A sont vide.

    J'ai essayé de faire avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub SupTotal()
    Dim ws As Worksheet
    For Each ws In Worksheets
    ws.Activate
        For i = 2 To 1000
            If ws.Range("A" & i) = "" Then
               ws.Range(i).Delete
            Else: GoTo OK
            End If
    OK:
        Next i
    Next ws
    End Sub
    Je peu me permettre de faire ca car aucune ligne de doit avoir la cellule de la colonne A vide.

    Mais sa ne marche pas




    ------------------------------------------------
    EDIT

    J'ai trouvé une autre solution qui me convient (pour le moment)
    Mes cellules "Total" n'étant sur beaucoup de colonnes différentes sur les différentes feuilles, j'ai fais ca :
    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
    Sub SupTotal()
    Dim WS As Worksheet
    For Each WS In Worksheets
        For i = 2 To WS.Range("B60000").End(xlUp).Row
            If WS.Range("B" & i).Value = "Total" Then
               WS.Rows(i).Delete
            End If
        Next i
        For j = 2 To WS.Range("C60000").End(xlUp).Row
            If WS.Range("C" & j).Value = "TOTAL" Then
               WS.Rows(j).Delete
            End If
        Next j
        For i = 2 To WS.Range("B60000").End(xlUp).Row
            If WS.Range("B" & i).Value = "TOTAL" Then
               WS.Rows(i).Delete
            End If
        Next i
    Next WS
    End Sub


  15. #15
    Membre actif
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Points : 283
    Points
    283
    Par défaut
    Tu aurais aussi pu faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim wk as Worksheet
    Dim c as range, plage as range
    Dim Derlig as long
    For each Wk in Thisworkbook.worksheets
     
    DerLig = Worksheets("Feuil1").UsedRange.SpecialCells(xlCellTypeLastCell).Row
     
    Set Plage= range("B1","D"&Derlig)
     
    For each c in plage
    If c.value="Total" then rows(c.row).delete
    next c
     
    Next Wk

  16. #16
    Débutant   Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    885
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 885
    Points : 267
    Points
    267
    Par défaut
    Merci diude54

    J'ai pas essayé ton code mais comme le mien me suffi pour le moment, je vais en rester la.

    Toutefois, je garde ton code en cas de probléme

    à tous

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

Discussions similaires

  1. [XL-2010] supprimer des lignes en fonction de la valeur de la cellule d'une colonne
    Par psylo24 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/11/2012, 13h09
  2. Réponses: 6
    Dernier message: 24/05/2012, 11h53
  3. listview couleur d'une ligne en fonction d'une valeur
    Par Kanetsugu dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 27/03/2012, 11h48
  4. [XL-2003] supprimer une ligne en fonction d'une date
    Par bosk1000 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/05/2010, 20h55
  5. Réponses: 1
    Dernier message: 10/02/2008, 19h56

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