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 excel apres un test IF


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Avatar de yoyo3d
    Homme Profil pro
    Administratif
    Inscrit en
    Avril 2002
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2002
    Messages : 413
    Points : 1 254
    Points
    1 254
    Par défaut Supprimer une ligne excel apres un test IF
    Bonjour à tous, tout d'abord, j'espere que je poste sur le bon forum...

    Je ne connais pas vraiment visual basic pour excel, mais j'essaye d'automatiser certaines taches sous excel 2000 .
    Voilà mon soucis, je récupère des listes d'enregistrement issues d'un terminal téléphonique, chaque ligne correspond à un appel et je dois d'abord supprimer les lignes qui ne m'intéressent pas…
    En fait tout ce qui n'est pas identique à "xx" ou "yy" ou "zz"dans la colonne A, je souhaite le supprimer.
    J'ai essayer de faire un test if( testvaleur; valeur si vrai;valeur si faux), mais dans la valeur si faux, je ne peux pas supprimer la ligne qui contient ma valeur fausse.

    Voilà une partie de mon code:

    Ici, je teste pour voir si la cellule contient une valeur numérique ou pas( apres transformation par mes sois…)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("A2").Select
    ActiveCell.FormulaR1C1 = "=ISNUMBER(RC[2])"
    Ici, j'incrémente mon test jusqu'à la ligne 10000
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Selection.AutoFill Destination:=Range("A2:A10000"), Type:=xlFillDefault
    la je voudrais spécifier que si ma valeur de résultat est vrai, je garde la ligne, sinon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Rows("2:2").Select
    Selection.Delete Shift:=xlUp
    j'espere avoir été suffisament claire dans ma question, merci à vous...

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 243
    Points : 86
    Points
    86
    Par défaut
    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 a()
    Dim i As Integer
    i = 1 ' ici la premiere ligne à checker
    Do Until Cells(i, 1) = ""
     
    If Cells(i, 1).Value = "aa" Or Cells(i, 1).Value = "bb" Or Cells(i, 1).Value = "cc" Then
     
    Rows(i & ":" & i).Delete
    End If
    i = i + 1
    Loop
     
    End Sub
    essai ca...et adapte le

  3. #3
    Membre éprouvé
    Avatar de yoyo3d
    Homme Profil pro
    Administratif
    Inscrit en
    Avril 2002
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2002
    Messages : 413
    Points : 1 254
    Points
    1 254
    Par défaut
    ok, merci, c'est une réponse "flash"
    j'essaie et je te dit si ça marche...
    merci encore

  4. #4
    Membre actif Avatar de marsupilami34
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    575
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 575
    Points : 262
    Points
    262
    Par défaut
    Citation Envoyé par VBBBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    Rows(i & ":" & i).Delete
    End If
    i = i + 1
    Attention, si tu incrémenta quand tu supprime une ligne, tu vas oublier de vérifier une ligne du au fait que lorsque tu supprimes une lignes les lignes d'en dessous remonte.

    Donc i=i+1 oui mais si tu ne supprimes pas de lignes

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 243
    Points : 86
    Points
    86
    Par défaut
    mais lui veut supprimer des lignes comment dois on faire dans ce cas..

  6. #6
    Membre actif Avatar de marsupilami34
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    575
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 575
    Points : 262
    Points
    262
    Par défaut
    Peut être comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub a()
    Dim i As Integer
    i = 1 ' ici la premiere ligne à checker
    while Cells(i, 1) = ""
     
          If Cells(i, 1)= "aa" Or Cells(i, 1)= "bb" Or Cells(i, 1)= "cc" then
             Rows(i & ":" & i).Delete
          End If
          i = i + 1
     
    Wend
     
    End Sub

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 243
    Points : 86
    Points
    86
    Par défaut
    ca revient au meme non?

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 243
    Points : 86
    Points
    86
    Par défaut
    ile est pas bon ton code....il cheke aucune ligne

  9. #9
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 814
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 814
    Points : 7 642
    Points
    7 642
    Par défaut
    Citation Envoyé par VBBBA
    ile est pas bon ton code....il cheke aucune ligne
    C'est le même que le tien sauf qu'il utilise un WHILE en lieu et place d'une DO UNTIL (et qu'il s'est planté sur la condition du while, mais bon...)

    Deux possibilités:
    1) utiliser un IF THEN ELSE, faire la suppression de ligne dans le THEN, et l'incrémentation dans le ELSE
    2) chercher la dernière ligne à traiter, et vérifier les lignes en partant de la fin et en remontant (en gros, en décrémentant l'indice i)

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 243
    Points : 86
    Points
    86
    Par défaut
    ton code ne cheke pas

    il faut while not cells(i,1) = ""

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 243
    Points : 86
    Points
    86
    Par défaut
    en reprenant ton dernier commentaire et en ajoutant not

    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
     
     
    Sub a()
    Dim i As Integer
    i = 1 ' ici la premiere ligne à checker
    While Not Cells(i, 1) = ""
     
          If Cells(i, 1) = "aa" Or Cells(i, 1) = "bb" Or Cells(i, 1) = "cc" Then
             Rows(i & ":" & i).Delete
          Else
          i = i + 1
          End If
     
     
    Wend
     
    End Sub


    et la ca marche

  12. #12
    Membre éprouvé
    Avatar de yoyo3d
    Homme Profil pro
    Administratif
    Inscrit en
    Avril 2002
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2002
    Messages : 413
    Points : 1 254
    Points
    1 254
    Par défaut
    bon, vous fachez pas, je comprend vos codes, mais je n'arrive pas à les integrer dans ma macro...
    je vais essayer le dernier, mais est ce que je peux directement l'integrer dans le code de ma macro?


    edit
    ok ça marche j'avais pas prix en compte les valeur aa ou bb, mais VRAI et FAUX dans mon code, merci encore, c'est super....

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 243
    Points : 86
    Points
    86
    Par défaut
    à toi d'adapter aprés

  14. #14
    Membre éprouvé
    Avatar de yoyo3d
    Homme Profil pro
    Administratif
    Inscrit en
    Avril 2002
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2002
    Messages : 413
    Points : 1 254
    Points
    1 254
    Par défaut
    Salut, je pensais avoir résolu le mystere et finalement le code ne fonctionne pas,
    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
    Columns("C:C").Select
    ' voici le début de mon code
    
        Selection.Replace What:="""19""", Replacement:="aa", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False
        Selection.Replace What:="""17""", Replacement:="bb", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False
        Selection.Replace What:="""18""", Replacement:="cc", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False
        Selection.Replace What:="""20""", Replacement:="dd", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False
    
    
    Dim i As Integer
    ' je fait partir cette fonction à partir de la ligne 2 pour garder ma ligne de titre
    
    i = 2 ' ici la premiere ligne à checker
    While Not Cells(i, 1) = ""
    
          If Cells(i, 1) = "aa" Or Cells(i, 1) = "bb" Or Cells(i, 1) = "cc" Or Cells(i, 1) = "dd" Then
             Rows(i & ":" & i).Delete
          Else
          i = i + 1
          End If
          
    
    Wend
    en fait le changement de valeur est bien réalisé, mais les lignes ne correspondant pas, ne sont pas effecées...j'ai oublié quelquechose???
    merci

  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
    Hello,
    Je ne comprends plus rien à ce que tu veux faire...
    Citation Envoyé par Tu
    En fait tout ce qui n'est pas identique à "xx" ou "yy" ou "zz"dans la colonne A, je souhaite le supprimer.
    Ce que tu fais :
    Tu recherches une valeur entre guillemets que tu "cherches" à remplacer par des caractères sans guillemet.
    Et donc, tu cherches "18", "19", "20", guillemets compris et ne les effaces donc pas, mais tu cherches à les remplacer par aa bb cc... sans les guillemets.
    Tu sélectionnes une colonne et ta demande de remplacement se fait par ligne, non par colonne... (SearchOrder:=xlByRows)
    Enfin, tu dis "je fais partir ma plage à la ligne 2" or en sélectionnant ta colonne, tu sélectionnes... toute la colonne (Columns("C:C").Select)

    Essaie de reformuler ta demande, là "je" n'y comprends rien.
    - Ce que tu veux faire (remplacer ou effacer)
    - Quelles données tu cherches (sont-elles pourvues ou non de guillemets)
    - Où se trouvent-elles (Sur une colonne unique ou partout dans la feuille ?)
    A+

  16. #16
    Membre éprouvé
    Avatar de yoyo3d
    Homme Profil pro
    Administratif
    Inscrit en
    Avril 2002
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2002
    Messages : 413
    Points : 1 254
    Points
    1 254
    Par défaut
    bon, désolé, je me suis embrouillé avec ce que je voulais réaliser au dépard et les solutions que vous m'avez touts proposées...
    au depart, avec ma macro, je voulais :
    1) remplacer les ""17"" de mon listing par des "17", les ""18"" par des "18" etc cela me semblait plus simple pour reperer les lignes qui ne m'interressent pas!!
    2) ensuite, tout ce qui n'est pas "17" ou "18" etc je souhaitait le supprimer....

    vu les listing proposés , je n'avais plus besoin de modifier les valeurs puisque visiblement, le code if ...then ... permetait de supprimer directement les lignes qui ne contenaient pas mes valeurs de test ....

    c'est plus clair la???
    en fait tout ce qui est remplacement de valeurs dans mon code n'est plus utile, sauf que vos codes ne me suppriment pas les lignes inutiles, c'est une histoire de format de characteres???

  17. #17
    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
    Non. Quand tu fais une recherche, tu recherches une cellule. Quand la cellule est trouvée, il faut supprimer la ligne et non la selection. Or ta solution ne le permet pas telle quelle. Pour supprimer ta ligne tu dois la désigner
    A+

  18. #18
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Citation Envoyé par yoyo3d
    ....
    c'est plus clair la???
    en fait tout ce qui est remplacement de valeurs dans mon code n'est plus utile, sauf que vos codes ne me suppriment pas les lignes inutiles, c'est une histoire de format de characteres???
    bon est tu en est ou ..? ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    If Cells(i, 1) = "aa" Or Cells(i, 1) = "bb" Or Cells(i, 1) = "cc" Then
             Rows(i & ":" & i).Delete
          Else
          i = i + 1
          End If
    teste la colonne 1 : A ..? c'est bien cela que tu veu..?

  19. #19
    Membre éprouvé
    Avatar de yoyo3d
    Homme Profil pro
    Administratif
    Inscrit en
    Avril 2002
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2002
    Messages : 413
    Points : 1 254
    Points
    1 254
    Par défaut
    bon, je vais recommencer mon cde et je vous tiens au courant,
    Merci

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

Discussions similaires

  1. [VBA] Comment supprimer une ligne entiere dans excel
    Par babouoles dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 06/07/2017, 08h34
  2. [XL-2010] Supprimer une ligne excel et listbox à l'aide d'une listbox multicolonne
    Par MatthieuT42 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 11/05/2015, 09h40
  3. Supprimer une ligne excel avec une condition
    Par Quentin006 dans le forum Excel
    Réponses: 4
    Dernier message: 28/05/2009, 11h45
  4. [VBA] supprimer une ligne excel
    Par morgan47 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/06/2006, 14h11
  5. [VBA Excel] Ajouter, supprimer une ligne ou collone range
    Par loacast dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 22/11/2005, 15h53

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