XL 2010 Macro : supprimer une ligne dont la 1ere cellule est vide MAIS ...

  • Initiateur de la discussion Initiateur de la discussion jm480
  • Date de dĂ©but Date de dĂ©but

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnĂ©s oĂč l'entraide fait la force. Apprenez, Ă©changez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

jm480

XLDnaute Nouveau
Bonjour Ă  toutes et tous,

Je suis nul en macros, parce que je n'en fais que trop rarement (đŸ€) mais en gĂ©nĂ©ral je me dĂ©brouille avec le Forum...

J'ai ce fichier qui est généré par un robot (logs d'EDI).

J'ai réussi a faire un macro qui me supprime des colonnes inutiles.

Je veux supprimer les lignes qui prĂ©sentent des cellules vides, mais qui ont quand mĂȘme des donnĂ©es (cf les lignes avec les caractĂšres en rouge).

Auriez vous une idée ???

Ce que j'ai trouvé sur le net fonctionne bien pour les lignes "totalement vides" mais ça ne marche pas quand il y a des données ....

MERCI beaucoup pour votre aide 🙂

​
CMAF-SLTSR20C WWOTHLCHFRFOS
26-mars-21​
20-Feb-2125-Feb-21
janv-21​
01-mars-21​
CMAF-SLTSR20C WWOTHLCHFRFOS
26-mars-21​
20-Feb-2125-Feb-21
janv-21​
01-mars-21​
CMAF-SLTSR20C WWOTHLCHFRFOS
26-mars-21​
CMAF-SLTSR20VK70 HMMYPENUSCHS16-Apr-21
12-mars-21​
14-mars-21​
janv-21​
01-Apr-21CMAF-SLTSR20VK70 HMMYPENUSCHS16-Apr-21
12-mars-21​
14-mars-21​
janv-21​
01-mars-21​
CMAF-SLTSR20VK70 HMMYPENUSCHS16-Apr-21
CMAF-SLTSR20VK70 HMMYPENUSCHS02-May-21
24-mars-21​
24-mars-21​
Feb-2101-May-21CMAF-SLTSR20VK70 HMMYPENUSCHS02-May-21
24-mars-21​
24-mars-21​
mars-21​
01-May-21CMAF-SLTSR20VK70 HMMYPENUSCHS02-May-21
CMAF-SLTSR20C WWOIDBLWCAHAL21-Apr-21
22-mars-21​
22-mars-21​
Apr-2101-Apr-21CMAF-SLTSR20C WWOIDBLWCAHAL21-Apr-21
22-mars-21​
22-mars-21​
Apr-2101-Apr-21CMAF-SLTSR20C WWOIDBLWCAHAL21-Apr-21
22-mars-21​
22-mars-21​
Apr-2101-Apr-21CMAF-SLTSR20C WWOIDBLWCAHAL21-Apr-21
CMAF-SLTSR20C WWOMYPENUSCHS23-Apr-21
23-mars-21​
23-mars-21​
mars-21​
01-May-21CMAF-SLTSR20C WWOMYPENUSCHS
23-Apr-21​
 

PiĂšces jointes

DerniĂšre Ă©dition:
@jm480

ton fichier en retour ; fais Ctrl e ➯ travail effectuĂ© ! 🙂

ça passe de 205 lignes à 160 lignes, soit 45 lignes en moins.

VB:
Sub Essai()
  Dim n&: n = Cells(Rows.Count, "K").End(3).Row: If IsEmpty([K1]) Then Exit Sub
  Dim t As Byte, j As Byte, i&: Application.ScreenUpdating = 0
  For i = n To 1 Step -1
    With Cells(i, 1)
      t = 0
      For j = 0 To 9 'pour les colonnes A Ă  J, SAUF F, et PAS K
        If j <> 5 Then If Trim$(.Offset(, j)) = "" Then t = t + 1
      Next j
    End With
    If t = 9 Then Rows(i).Delete
  Next i
End Sub

j'ai mis Trim$() car beaucoup de cellules apparemment vides
contiennent en fait un espace !
​

soan
 

PiĂšces jointes

Bonjour jm480, soan,

Dans ce genre de problÚme il vaut mieux utiliser cette méthode, trÚs rapide grùce au tri de regroupement :
VB:
Sub Nettoyer()
Dim t, n&
t = Timer
Application.ScreenUpdating = False
With Sheets("DATA J").UsedRange
    .Columns(2).EntireColumn.Insert 'insĂšre une colonne auxiliaire
    .Columns(2) = "=1/(TRIM(RC[-1])<>"""")"
    .Columns(2) = .Columns(2).Value 'supprime les formules
    .Sort .Columns(2), xlAscending, Header:=xlNo 'tri pour regrouper les valeurs d'erreur et accélérer
    On Error Resume Next 'si aucune SpecialCell
    With .Columns(2).SpecialCells(xlCellTypeConstants, 16)
        n = .Count
        .EntireRow.Delete 'suppression des valeurs d'erreur
    End With
    .Columns(2).EntireColumn.Delete 'supprime la colonne auxiliaire
    With .Parent.UsedRange: End With 'actualise la barre de défilement verticale
End With
Application.ScreenUpdating = True
MsgBox n & " ligne(s) supprimée(s) en " & Format(Timer - t, "0.00 \sec")
End Sub
Fichier joint, je l'ai testé en recopiant le tableau de 205 lignes sur 82 000 lignes.

La macro s'exécute chez moi en 0,4 seconde.

A+
 

PiĂšces jointes

j'ai mis Trim$() car beaucoup de cellules apparemment vides
contiennent en fait un espace !
​

😳

J'ai bien fait de demander, je n'aurais jamais été capable de tout ça !

Je dois m'imprimer ça sur papier et vous poser des questions pour essayer de comprendre la logique, car le jour ou une colonne se rajoute, je serai complétement lourdé !

J'en rajoute 1 couche :

On me demande un rapport simplifié, c'est à dire avec UNIQUEMENT les valeurs "vide" (= on fait l'inverse de ce que j'ai demandé tout à l'heure).

A ce titre, j'aurais pensé à quelque chose :

1 bouton "simple"
1 bouton "détaillé"
1 bouton exporter la sélection (= ce qui est affiché) pour que l'utilisateur fasse ce qu'il veut.

Est ce que c'est cohérant ?

MERCI encore 👍
 
Re, bonsoir mapomme,

Oui avec un tableau VBA c'est trÚs rapide aussi mais les formats (s'il y en a) ne sont pas conservés.

Pour finir, si l'on veut tester 9 cellules comme le fait soan on utilisera ce fichier (2) avec la formule :
VB:
.Columns(2) = "=1/(TRIM(RC[-1]&RC[1]&RC[2]&RC[3]&RC[4]&RC[6]&RC[7]&RC[8]&RC[9])<>"""")"
Sur 82 000 lignes c'est Ă  peine plus long => 0,63 seconde.

Edit : ah tiens, mapomme a supprimé son message, dommage.

A+
 

PiĂšces jointes

DerniĂšre Ă©dition:
@jm480 (bonsoir job75)

voici la nouvelle version du fichier. 🙂

* ouvre le fichier en lecture seule ; tu verras l'item pour faire ça en cliquant sur la petite flÚche bas qui est à droite du bouton Ouvrir (qui est dans la boßte de dialogue « Ouvrir » un fichier).

* clique sur le bouton "Simple" ➯ Rapport simplifiĂ©, avec uniquement les lignes « vides » (45 lignes).

* ferme le fichier, puis ouvre-le de nouveau en lecture seule.

* clique sur le bouton "DĂ©taillĂ©" ➯ Rapport dĂ©taillĂ©, toutes les lignes sauf les « vides » (160 lignes).​



pour l'export de fichier, je pense que tu parles d'un export en fichier .pdf ; ou peut-ĂȘtre en .csv ? dans les 2 cas, je te donne la mĂȘme rĂ©ponse : dĂ©solĂ©, mais j'm'y connais pas bien en export de fichiers ; aussi, je laisse Ă  un autre intervenant le soin de t'aider pour faire cela ; bonne chance ! 🍀
​


regarde aussi les 3 autres posts de @job75 : son post #5 ; son post #7 ; et son post #8. 😉

bizarre, tout Ă  l'heure j'avais vu un post de @mapomme (salut), mais il l'a supprimĂ©.​

soan
 

PiĂšces jointes

@jm480, le fil,

Lis d'abord mon post prĂ©cĂ©dent. 🙂

je mets ici le code VBA du fichier de mon post #9 :

VB:
Option Explicit

Private Sub Job(k As Byte)
  Dim n&: n = Cells(Rows.Count, "K").End(3).Row: If IsEmpty([K1]) Then Exit Sub
  Dim t As Byte, j As Byte, i&: Application.ScreenUpdating = 0
  For i = n To 1 Step -1
    With Cells(i, 1)
      t = 0
      For j = 0 To 9 'pour les colonnes A Ă  J, SAUF F, et PAS K
        If j <> 5 Then If Trim$(.Offset(, j)) = "" Then t = t + 1
      Next j
    End With
    If k = 1 Then
      If t <> 9 Then Rows(i).Delete
    Else
      If t = 9 Then Rows(i).Delete
    End If
  Next i
End Sub

Sub RapSMP()
  Job 1
End Sub

Sub RapDTL()
  Job 2
End Sub

sur l'unique feuille de calcul "DATA J" : le bouton « Simple » appelle la sub RapSMP() (= rapport simplifiĂ©) ; et le bouton « DĂ©taillĂ© » appelle la sub RapDTL() (= rapport dĂ©taillĂ©) ; ensuite, ces 2 subs appellent la sub privĂ©e Job() : l'utilisateur ne peut pas l'appeler directement, et c'est pas Ă  lui de le faire ! 😛​

soan
 
- Navigue sans publicité
- AccÚde à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

RĂ©ponses
11
Affichages
2 K
RĂ©ponses
8
Affichages
940
Retour