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-E]recherche de toutes lignes avec zero


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    En reconversion
    Inscrit en
    Mai 2006
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Mai 2006
    Messages : 482
    Points : 161
    Points
    161
    Par défaut [VBA-E]recherche de toutes lignes avec zero
    Bonjours a tous

    desolé de commancer comme cela mais je n'ai pas d'idée pour debuter mon Code.
    Sauf pour selectionner le tableau mais apres je suis perdu

    Je voudrais dans un tableau comportant des lignes et des colonnes (donc par definition un tableau) selectionner toutes les lignes comportant un zero situé toujours dans la meme colonne et en l'ocurence la colonne "D".

    Ensuite toutes ces lignes selectionner je voudrais les supprimer.

    Si quelqu'un peu m'aiguiller sur la demarche à suivre.

    Merci d'avance

  2. #2
    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
    ben déjà tu le sélectionne comment ton tableau ..? montre ton code et dis nous ce qui est sélectionné .. et la position de ta colonne D .. par rapport à cela ..
    ensuite on trouvera le For Each... qui va bien

  3. #3
    Membre habitué
    Homme Profil pro
    En reconversion
    Inscrit en
    Mai 2006
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Mai 2006
    Messages : 482
    Points : 161
    Points
    161
    Par défaut
    Mon tableau est selectionner par le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Set firstcell = Range("H1")
    Set lastcell = Range("A65536").End(xlUp)
    Set zone = Range(firstcell, lastcell)
    Range(firstcell, lastcell).Select
    Et donc je veux faire une recherche dans la colonne D (qui est en quatrieme position) sur la plage selectionner et supprimer toutes les lignes qui comprote un zero dans cette colonne.

  4. #4
    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
    donc tu sélectionne une plage allant de Axxx à H1, xxx étant la derniére ligne "non-vide" dans la colonne A...

    bon au lieu de sélectionner la zone .. affecte une variable range à celle-ci
    puis par un For Each.. parcours en les lignes..et à chaque tour de boucle contrôle la colonne D et supprime la ligne si = 0...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Dim rTab As Range
    Dim r As Range
    Set rTab = Range(firstcell, lastcell)
    For Each r In rTab.Rows
      'ici à chaque tour de boucle ..
      ' r.. représente une ligne du tableau..
      If r.Cells(4) = 0 Then
        r.Delete Shift:=xlUp
    End If
    Next

    PS : Ensuite pose toi la question "que ce passe t'il si la feuille contenant mon tableau n'est pas la feuille active au moment du lancement de la macro..."

  5. #5
    Membre habitué
    Homme Profil pro
    En reconversion
    Inscrit en
    Mai 2006
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Mai 2006
    Messages : 482
    Points : 161
    Points
    161
    Par défaut
    Je viens de tester ton code bbil est apparemment rien ne se supprime aucune ligne, mais sur la variable lastcell j'ai une valeur qui est renvoyer en faisant un stop juste apres ton code avec "erreur 2015".

    Voila le 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
    selection.Copy
        Workbooks.Add
     
        selection.PasteSpecial Paste:=xlPasteValues
     
         Stop
           Dim rTab As Range
    Dim r As Range
    Set rTab = Range(firstCell, lastCell)
    For Each r In rTab.Rows
      'ici à chaque tour de boucle ..
      ' r.. représente une ligne du tableau..
      If r.Cells(4) = 0 Then
        r.Delete Shift:=xlUp
    End If
    Next
    Stop

  6. #6
    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
    il manque tes lignes d'affectation de lastCell et firsCell.. que je n'ai pas voulu reprendre.....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Set firstcell = Range("H1")
    Set lastcell = Range("A65536").End(xlUp)
    en plus dans mon premier code j'avais zapper.. ton set zone... on aurai pu utiliser ta variable range zone, en lieu et place de mon rTap

  7. #7
    Membre habitué
    Homme Profil pro
    En reconversion
    Inscrit en
    Mai 2006
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Mai 2006
    Messages : 482
    Points : 161
    Points
    161
    Par défaut
    Ok bbil j'ai retester et ça marche en parti le code m'a bien supprimé la ligne i mais ne m'a pas supprimé la ligne j qui a egalement un zero, il me semble avoir lu un message d'Alain Tech sur un autre post que c'etait du au probleme que la ligne j apres suppression devenait et provoquait le bug.

    Mais je peux me planter et que ce que je viens de dire n'a pas de sens.

    Si c'est le cas toute mes excuses.

  8. #8
    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
    oups... j'ai du mal à te suivre ... c'est quoi ces lignes i et j ??

  9. #9
    Membre habitué
    Homme Profil pro
    En reconversion
    Inscrit en
    Mai 2006
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Mai 2006
    Messages : 482
    Points : 161
    Points
    161
    Par défaut
    Ligne i et j C'est la ligne N°9 et la ligne N°10 toute mes excuses c'est moi qui me suis mal exprimer car dans la colonne A( n°1 ) j'ai une liste qui ce deroule alphabetiquement.

    Donc j'aurais pas du utiliser les termes i et j.

  10. #10
    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
    ok .. bon tu aurai pu nous mettre un lien vers le post à alain...

    tiens une solution serai peu-être de grouper par une "union" les lignes à détruire dans un même range et à les détruire aprés la boucle for :

    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
    Dim rADet As Range
    Dim rTab As Range
    Dim r As Range
    Set firstcell = Range("H1")
    Set lastcell = Range("A65536").End(xlUp)
    Set rTab = Range(firstcell, lastcell)
    For Each r In rTab.Rows
      'ici à chaque tour de boucle ..
      ' r.. représente une ligne du tableau..
      If r.Cells(4) = 0 Then
        If rADet Is Nothing Then
          Set rADet = r
         Else
         Set rADet = Application.Union(rADet, r)
        End If
    End If
    Next
    If Not rADet Is Nothing Then rADet.Delete
    End Sub

  11. #11
    Membre habitué
    Homme Profil pro
    En reconversion
    Inscrit en
    Mai 2006
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Mai 2006
    Messages : 482
    Points : 161
    Points
    161
    Par défaut
    Ok bbil merci ça marche impec desolé pour le lien j'y ai pas pensé.

    Par contre j'ai une evolution a faire au code precedent comment je peux effacer les lignes comportant un zero mais en ne touchant pas a la premiere colonne, pour ne pas toucher a l'ordre de ma liste alphabetique.

  12. #12
    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
    tu ve laisser la premiére colonne intacte ..? c'est bien cela ..? alors c'est plus simple ... le premier code devais marcher plus de probléme de décalage de ligne.. suffit de remplace le code r.delete par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(r.Cells(2),R.Cells(8)).ClearContents
    2 = Colonne B
    8 = Colonne H ...


  13. #13
    Membre habitué
    Homme Profil pro
    En reconversion
    Inscrit en
    Mai 2006
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Mai 2006
    Messages : 482
    Points : 161
    Points
    161
    Par défaut
    Merci bbil mais,

    J'ai encore un petit souci que je ne vois pas comment resoudre ce problème.

    En effaçant les lignes complettes j'ai mes données qui sont toute remonter les unes derriere les autres sans espace, par contre je perd mon ordre alphabetique de la premiere colonne.

    si je garde ma premiere colonne intacte et que j'efface les lignes comportant un zero sans cette premiere colonne comportant ma liste alphabetique, les lignes de données sont espacé de cellule vide.

    Qu'est ce qui est le plus simple :

    _ recreer la liste alphabetiquedans la premiere colonne sur la plage de donnée restante apres avoir effacé les lignes.

    _ supprimer les cellules vides entre mes données en ne touchant pas à ma premiere colonne pour reconcentrer ma plage de donnée.

    J'espere avoir ete assez clair.

    Merci d'avance

  14. #14
    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
    il y as quoi dans ta premiére colonne ? je vois pas pourquoi tu perd l'ordre alphabétique.. ? une formule ?

  15. #15
    Membre habitué
    Homme Profil pro
    En reconversion
    Inscrit en
    Mai 2006
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Mai 2006
    Messages : 482
    Points : 161
    Points
    161
    Par défaut
    non juste une liste type personalisé d'excell:

    a,b,c,d,e,f,g,h,...

  16. #16
    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 zoumzoum59
    non juste une liste type personalisé d'excell:

    a,b,c,d,e,f,g,h,...
    c'est pas l'ordre que tu perd .. non ? il y as des trous c'est tout ..? non ?

  17. #17
    Membre habitué
    Homme Profil pro
    En reconversion
    Inscrit en
    Mai 2006
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Mai 2006
    Messages : 482
    Points : 161
    Points
    161
    Par défaut
    exacte desolé je me suis mal exprimé et je comprend maintenant que ça n'aide pas a la comprehension de ce que j'ai voulue expliquer

    Mille excuses bbil.

  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
    donc si la colonne A contient une valeur allant de 'a' à 'z' ... modifie ainsi ton 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
    23
    24
     
    Dim rADet As Range
    Dim rTab As Range
    Dim bColA As byte 'Caractére 1° ligne
    Dim r As Range
    Set firstcell = Range("H1")
    Set lastcell = Range("A65536").End(xlUp)
    Set rTab = Range(firstcell, lastcell)
    bColA = asc("a") 
    For Each r In rTab.Rows
      'ici à chaque tour de boucle ..
      ' r.. représente une ligne du tableau..
      If r.Cells(4) = 0 Then
        If rADet Is Nothing Then
          Set rADet = r
         Else
         Set rADet = Application.Union(rADet, r)
        End If
       Else
         r.cells(1) = chr(bColA)
         bColA = bColA +1
    End If
    Next
    If Not rADet Is Nothing Then rADet.Delete

  19. #19
    Membre habitué
    Homme Profil pro
    En reconversion
    Inscrit en
    Mai 2006
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Mai 2006
    Messages : 482
    Points : 161
    Points
    161
    Par défaut
    ok bbil ton code fonctionne mais j'ai encore dirais je occulter malgres moi une info c'est que ma liste alphabetique, apres le z continue sur:

    a,...,z,aa,ab,ac,...,az,ba,bb,bc,...,bz,ca,cb,cc,... et ainsi de suite.

    alors que t'as suite

    utilise le code ascii si j'ai bien compris et donc apres z,{,...

    Si ça peut aider ma liste existe dans les listes perso d'excell, ne peut-on pas la recuperer avec la fonction "GetCustomListContents" ?

    Quant à ouskel'n'or ta proposition paraissait simple d'utilisation mais je ne sais pas pourquoi les cellules ne se sont supprimer à l'execution du code.

  20. #20
    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
    bon remplace la ligne bCola =Chr... par :
    et la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      r.cells(1) = chr(bColA)
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     st = Cells(1, bColA).AddressLocal(False, False)
       r.cells(1) = Left(st, Len(st) - 1)


    PS: Si tu as besoin d'explication demande à ousk .. je vais manger ...

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

Discussions similaires

  1. [XL-2003] VBA - Problème d'insertion de ligne avec copie de formules
    Par oracle7556 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 04/06/2010, 15h22
  2. Macro VBA pour mettre colonne en ligne avec cellule fusionnée
    Par dany13 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/01/2008, 06h09
  3. [VBA-E]Recherche d'une valeur avec la colonne comme variable
    Par Corlo dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 25/04/2007, 09h21
  4. [VBA-E] ajout d'une ligne avec ordre alphabétique
    Par Yaone dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/04/2006, 16h52
  5. [VBA-E]recherche d'une ligne
    Par calimero91 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/01/2006, 12h11

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