Effacer lignes selon couleur texte

bonjour

je dois traiter et automatiser un fichier qui contient plus de 20.000 lignes de données

dans un soucis de nettoyage je souhaite supprimer des lignes dont le texte est d'une certaine couleur (bien souvent il s'agit d'une titre de nouvelle partie inutile pour l'automatisation

je joins un fichier exemple avec 2 méthodes de boucles qui ne fonctionnent pas (for / next et while / loop)

pouvez vous m'aider. Je débute.....

d'avance merci

Bonsoir,

je n'ai pas testé vos codes, mais j'ai vu (je pense) l'erreur !

Vos boucles vont de 1 à dernière ligne. Si on admet que la ligne 2 et 3 sont à effacer, alors lorsque i vaut 2, le code efface la ligne 2 de la feuille, automatiquement la ligne 3 "remonte" et devient une nouvelle ligne 2, lorsque i fait son Next il passe à 3, et du coup il ne voit plus l'ancien 3 qui est devenu 2 !

Sur une feuille Excel, lorsque l'on utilise une boucle pour effacer des lignes il faut commencer de la dernière ligne vers la première avec un Step - 1

Du coup dans notre exemple : i = 3 il efface, 4 devient 3 mais 2 reste 2, avec le Next, i passe à 2 et hop il peut l'effacer, 2 et 3 ne sont plus et 4 est devenu 2 !

@ bientôt

LouReeD

Bonsoir Mrours

Pour la boucle il faut partir de la fin

For i = derniereligne To i Step -1
    If Range("A" & i).Font.Color = RGB(42, 106, 151) Then Rows(i).Delete
Next i

A+

Edit : oups, salut LouReed

bonjour LouReed, BrunoM45, MROURS, le fil,

avec 20.000 lignes, ceci est plus efficace.

Sub effacer_lignes_bleues()

     Dim i As Long, aA, derniereligne As Long

     With ActiveSheet
          With .UsedRange
               derniereligne = .Row + .Rows.Count - 1     'si l'usedrange ne commence pas avec ligne 1
               ReDim aA(1 To derniereligne, 1 To 1)     'pour performance tout en mémoire
          End With

          For i = 1 To derniereligne     'supprimer 1ière ligne est une problème avec cette méthode  !!!
               aA(i, 1) = cdbl(((.Range("A" & i).Font.Color = RGB(42, 106, 151)) * (Len(.Range("A" & i)) > 0) * (i > 1)))
          Next i

          If Application.Sum(aA) <> 0 Then     's'il y a des lignes comme ca ...
               With .Range("AA1").Resize(derniereligne)     'une colonne qui n'embête pas vos données (à modifier)
                    .Value = aA     'écrire matrice vers cette plage
                    .AutoFilter 1, "<>0"     'les lignes concernés
                    .Offset(1).SpecialCells(xlVisible).EntireRow.Delete     'supprimer ces lignes
                    .AutoFilter
                    .ClearContents
               End With
          End If
     End With

End Sub

merci à tous pour vos réponses, autant j'ai bien compris le principe de la boucle depuis le bas en remontant autant je suis aux fraises sur la derniere proposition

une ultime question, ci comment faire pour éffacer une ligne pour laquelle le texte en bleu n'est pas sur la première cellule. en gros le texte peut se trouver sur n'importe quelle cellulle de la ligne.

cf capture ci jointe :

image

Bonjour à tous,

une ultime question, ci comment faire pour éffacer une ligne pour laquelle le texte en bleu n'est pas sur la première cellule. en gros le texte peut se trouver sur n'importe quelle cellulle de la ligne.

Peut-être ainsi:

[EDIT]: petit correctif suite à la remarque de BsAlv:

Option Explicit
Sub effacer_lignes_bleues()
 Dim i As Long, j As Integer
 Dim derniereligne As Long, dernierecolonne As Integer
  Application.ScreenUpdating = False
   With Sheets("Table 1")
    derniereligne = .UsedRange.Rows.Count
    dernierecolonne = .UsedRange.Columns.Count
     For i = derniereligne To 1 Step -1
      For j = 1 To dernierecolonne '(mettre 2 si tu ne tiens pas compte de la colonne A)
       If .Cells(i, j).Font.Color = RGB(42, 106, 151) Then .Rows(i).Delete:exit for
      Next j
     Next i
   End With
End Sub

Cordialement,

@Xorsankukai,

j'ajouterai un "exit for" après votre rows(i).delete et un point avant ce rows !

If .Cells(i, j).Font.Color = RGB(42, 106, 151) Then .Rows(i).Delete:exit for

Mais aussi un seul delete comme je l'avais démonstré avec un autofilter pour gagner du temps

Je ferais mon recherche avec un findformat

Bonsoir à tous,

j'ajouterai un "exit for" après votre rows(i).delete et un point avant ce rows !

Hello BsAlv, effectivement, j'ai bien oublié un point, c'est rectifié, merci pour ta vigilance,

Cordialement,

bonjour à vous et encore merci pour votre aide

j'ai réussi la faire tourner la macro sur mon fichier test

cependant elle ne fonctionne pas sur un extrait de mon fichier mailing que je vous le joins ici.

Si toute fois vous pouvez m'expliquer pourquoi cela ne fonctionne pas.

Pour vous expliquer mon but final :il s'agit de récuper des données d'un fichier PDF et en faire un tableau structuré pour effectué des tris et recherches sur critères.

  • J'ai exporté un fichier PDF en Excel et que je veux transformer en tableau structuré. Il y a 1100 pages à traiter avec 5 ou 6 fiches entreprises par pages. => 5500entreprises
  • mon idée est déjà de supprimer les lignes inutiles de l'onglet table1 (celles avec du texte bleues)
    J'obtiens alors un ensemble de données d'entreprise (une fiche par entreprise) sur 19lignes.
  • J'effectue rechercher et extrais les données par lot de 19 lignes (une fiche entreprises) pour les recopier (past value) dans un tableau structuré sur un autre onglet (avec insertion d'une nouvelle ligne en début de tableau à chaque extraction de nouvelles données de fiche entreprise.)
  • Ensuite soit j'efface effacer les lignes déjà traitée dans l'onglet table1 soit je passe au groupe de 19 lignes suivantes,
    je procède ainsi avec une boucle (durée de la boucle = nombre max de ligne divisée par 19) etc...
  • Pour finalement ne garder que le tableau structuré pour effectuer mes tris et sélections.

cdt

re,

c'est quelque chose pour PQ ! Lire ce pdf et puis créer des données sur une ligne (1 pour 19). Plus facile qu'avec VBA.

bonjour BART

désolé je n'ai rien compris à ton post

@MROURS,

Votre excel2019 contient PQ. Avec celui c'est vraiment facile de transformer un pdf en tableau structuré avec un minimum de manipulations. 1.100 pages, il faut demander au spécialistes ici, mais cela ne durera pas une heure et en même temps il changera les données de vos 5-6 entreprises par page en une seule ligne par entreprise.

Donc, à mon avis pour cette problème, vous serez surpris par les possibilités et la vitesse de PQ

Rechercher des sujets similaires à "effacer lignes couleur texte"