[excel macro] effacer ligne ayant A vide

Résolu
testos -  
gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   -
bonjour en faite j'aimerai faire un macro qui me permette nt d'effacer toute les lignes qui on une case vide en A ...
merci d'avance
testos

8 réponses

  1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    Tu peux modifier ainsi :
    Sub efface_vide()
    Dim l As Long
    For l = Cells.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1
        If Cells(l, "E").Value = "" _
            Or Cells(l, "F").Value = "" Then Cells(l, 1).EntireRow.Delete
    Next l
    End Sub

    Comme tu as plusieurs colonnes j'ai changé la détection de la taille de ton tableau.
    Si tu veux que E et F soit vide, il faut remplacer OR par And
    9
    1. ancelot
       
      Ok compliquons un peu les choses,

      J'ai quelques notions de VB mais visiblement pas assez pour pouvoir me démerder tout seul:
      Voila j'ai des fins de phrases qui ont sauté de ma derniere colonne (L) pour venir s'insérer dans une nouvelle ligne vide en case A

      exemple :

      J'avais
      France 24;54;78;98;MSN98;FALSE
      Allemagne 54;90;76;64;76;87;KSKS2;FALSE

      et (ne me demandez quoi comment g fé ca) il y a eu plusieurs ligne pour lesquels il s'est passé le suivant:
      France 24;54;78;98;MSN98
      ;FALSE
      Allemagne 54;90;76;64;76;87;KSKS2;FALSE

      Je n'ai aucune prémice d'idée de comment faire, déjà que je ne sais pas ajouter du texte en fin de chaine de texte d'une cellule sous VB!

      Merci énormément pour votre aide
      0
      1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744 > ancelot
         
        bonjour

        Si c'est toujours ";FALSE" qui est passé en colonne A ligne suivante, avec cette macro cela devrait recoller en colonne L
        Sub recolle_efface()
        Dim l As Long
        For l = Cells.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1
            If Range("A" & l).Value = ";FALSE" Then
                 Range("L" & l - 1).Value = Range("L" & l - 1).Value & Range("A" & l).Value
                 Rows(l).Delete
            End If
        Next l
        End Sub
        
        0
      2. ancelot > gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Génial!! ça marche du tonnerre!

        Grand merci,
        0
  2. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    Je ne vois pas l'intérêt de supprimer une ligne lorsque une "case est vide",
    mais si c'est le but, alors cette macro le fait :

    Sub efface_A_vide()
    Dim l As Integer
    For l = Cells(65256, 1).End(xlUp).Row To 1 Step -1
    If Cells(l, 1).Value = "" Then Cells(l, 1).EntireRow.Delete
    Next l
    End Sub


    merci de nous dire si cela fonctionne pour toi.
    1
    1. lartur
       
      Salut. Lartur pour te remercier de ta connaissance au sujet de l'élimination d'une ligne. Cela fonctionne sur une de mes bécane mais la macro ne s'arrête plus... que faire dans un tel cas, je n'ai toujours pas la solution alors je cherche
      0
  3. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    Cette macro doit s'arrêter, mais elle contient une erreur car il faut définir l'ndex de ligne en "long" et non en "integer" car sinon le maximum de lignes est 32 767.
    D'autre part en excel 2007, il faut augmenter le nombre de lignes au-delà de 65356 mais je vous laisse chercher le nouveau maximum !

    Sub efface_A_vide()
    Dim l As long
    For l = Cells(65356, 1).End(xlUp).Row To 1 Step -1
    If Cells(l, 1).Value = "" Then Cells(l, 1).EntireRow.Delete
    Next l
    End Sub 
    0
    1. Hilys
       
      Salut,

      Je vais poser une question basique mais je n'ai malheureusement pas trouvé la réponse par moi-même.

      Si je veux appliquer cette macro sur les colonnes E et F comment dois-je m'y prendre ?

      Merci d'avance !

      Hilys
      0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. Patate
     
    Bonjour à tous,
    Puis-je solliciter votre aide s’il vous plait ?

    La macro de gbinforme modifier ainsi me convient parfaitement pour supprimer les cellules contenant « zzz » de la colonne A sans effacer la ligne entière :
    Sub efface_A_vide()
    Dim l As Integer
    For l = Cells(65256, 1).End(xlUp).Row To 1 Step -1
    If Cells(l, 1).Value = "zzz" Then Cells(l, 1). Delete
    Next l
    End Sub

    Seulement lorsque la dernière cellule de la colonne A contient “zzz”, la cellule d’à coté colonne B passe dans la colonne A (bien sûr cela ce passe aussi bien si la cellule est en A30 qu’en A500)

    Je pense que le problème (mise à part mes faibles connaissances en la matière) se trouve ligne3 de la macro avec le mot « Row » alors que je veux rester dans la colonne j’ai ce mot « ligne ».

    Merci de aide,
    Patrick
    0
  6. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    Ce que tu as noté n'a rien à voir avec row mais est provoqué par delete.

    Comme tu supprime la cellule, une autre en bas ou à droite prends la place.

    Pour éviter remplaces delete par clearcontents : tu auras une cellule vide sans déplacement des autres.
    0
  7. Patate
     
    Merci gbinforme pour cette réponse rapide,
    Réponse évidente, à ma portée, elle me convient parfaitement….

    Pour supprimer les cellules vides (car je souhaite aussi les supprimer) j’ai ajouté une ligne et de cette façon j’arrive au but :
    Sub efface_A_vide4()
    Dim l As Long
    For l = Cells(65356, 1).End(xlUp).Row To 1 Step -1
    If Cells(l, 1).Value = "zzz" Then Cells(l, 1).ClearContents
    If Cells(l, 1).Value = "" Then Cells(l, 1).Delete
    Next l
    End Sub

    En attendant une réponse, j’avais bricolé un peu la macro qui ce passait de « ClearContents » et cela marchait aussi, bien qu’inutile, pour l’humour je vous la présente :

    Sub efface_A_vide3() 'ok
    Sheets("Feuil1").Select
    Range("A65536").End(xlUp).Offset(1, 0).Select
    ActiveCell.FormulaR1C1 = "provisoire"
    Dim l As Long
    For l = Cells(65356, 1).End(xlUp).Row To 1 Step -1
    If Cells(l, 1).Value = "zzz" Then Cells(l, 1).Delete
    If Cells(l, 1).Value = "" Then Cells(l, 1).Delete
    Next l
    Range("A65536").End(xlUp).Offset(0, 0).Select
    Selection.ClearContents
    End Sub

    Par contre cette macro ne fonction pas pour supprimer les cellules contenant #VALEUR ! , je vais continuer à chercher pour ce problème. Mais peut-être avez-vous une réponse magique ? :)

    Merci encore et bonne soirée
    Patrick
    0
  8. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    cette macro ne fonction pas pour supprimer les cellules contenant #VALEUR !
    If Left(Cells(l, 1).Text, 1) = "#" Then Cells(l, 1).Delete

    Ainsi tu supprimes les cellules en erreur.

    Cependant ta macro ne peux pas fonctionner correctement car à la fin de son déroulement ta colonne A est complètement décalée de la colonne B et les 2 colonnes sont totalement déphasées.

    Désolé mais tu ne peux pas supprimer une cellule et garder l'intégrité de ton fichier, ce qui est possible en supprimant la ligne.

    Ta nouvelle formule fonctionne par hasard car au départ tu avait un paramètre par défaut de delete à xlleft ce qui amenait la cellule B en colonne A. Ce paramètre est passé à xlup par tes manipulations ce qui fait que ta cellule A remonte d'une ligne.
    0