XL 2013 Quel type de boucle? [résolu]

tben08

XLDnaute Occasionnel
Bonjour,

J'ai un fichier de 200 000 lignes avec des doublons. Quand dans la colonne T j'ai un code analytique, je sais que je dois supprimer la ligne du dessus et ainsi de suite.

A votre avis quelle est la meilleure boucle?

Merci d'avance pour votre aide
 
Dernière édition:

laetitia90

XLDnaute Barbatruc
Re : Quel type de boucle?

bonjour tben08:)

comme cela pas simple... le mieux un fichier exemple avec quelques lignes non confi.....
ET expliquer la condition de suppression .......colonne T ???

pas mal de methode pour faire cela plus ou moins rapide 200000 lignes ???
 

tben08

XLDnaute Occasionnel
Re : Quel type de boucle?

Ok ci-joint un petit extrait de la base.

Donc dans la colonne T il y a parfois un code analytique, quand il y a ce code la ligne de dessus est a supprimer car c'est un doublon.

J'aimerais créer une boucle qui me fait ça pour les 200 000 lignes.

Merci
 

Pièces jointes

  • test.xlsx
    10.3 KB · Affichages: 31
  • test.xlsx
    10.3 KB · Affichages: 33

tben08

XLDnaute Occasionnel
Re : Quel type de boucle?

non car ce sont les cellules vides que je dois supprimer, sauf que dans mes cellules vides, il y en a que je ne dois pas supprimer. Je dois uniquement supprimer les lignes qui so,t juste avant les lignes avec code analytique
 

ROGER2327

XLDnaute Barbatruc
Re : Quel type de boucle?

Bonjour à tous.


Une proposition :​
Code:
Sub toto()
Dim i&, l&, t()
  With Feuil1.Columns("T:T")
    l = .Cells(.Rows.Count).End(xlUp).Row
    t = Range(.Cells(1), .Cells(l)).Value
    With Application: .ScreenUpdating = 0: .EnableEvents = 0: .Calculation = -4135: End With
    For i = l To 3 Step -1
      If Not IsEmpty(t(i, 1)) Then If AscW(t(i, 1)) <> 9658 And IsEmpty(t(i - 1, 1)) Then .Cells(i).Value = ChrW(9658) & .Cells(i).Value: i = i - 1: .Parent.Rows(i).Delete
    Next
    With Application: .Calculation = -4105: .EnableEvents = 1: .ScreenUpdating = 1: End With
  End With
End Sub
Remarques :


  1. Un caractère ► est ajouté devant les «N° SECTION» traités. Ceci pour :
    • éviter qu'une répétition de la procédure élimine inconsidérément des lignes ;
    • permettre un nouveau traitement si des lignes nouvelles sont ajoutées dans la feuille Feuil1.
  2. Je n'ai pas testé le code sur 200 000 lignes : si c'est trop lent, il faudra envisager une autre stratégie.


Bonne journée.


ℝOGER2327
#8165


Dimanche 8 Décervelage 143 (Saint Bordure, Capitaine - fête Suprême Tierce)
15 Nivôse An CCXXIV, 6,0879h - lapin
2016-W01-2T14:36:39Z
 

tben08

XLDnaute Occasionnel
Re : Quel type de boucle?

ça fonctionne très bien merci.

Maintenant je souhaiterais faire une inputbox pour récupérer la colonne car ce ne sera pas toujours la même.

j'ai fait ça mais ça ne fonctionne pas :

Dim c As String


Dim i&, l&, t()
c = InputBox("Lettre de la colonne pour supprimer les doublons?")
With Feuil1.Columns(c:c)

si je mets ("c:c"), il ne se passe rien, pas de message d'erreur. Si je mets ça (c:c) ça bloque dès que je lance la macro.

Merci pour votre aide
 

tben08

XLDnaute Occasionnel
Re : Quel type de boucle?

Oui la macro de roger2327 fonctionne très bien mais je veux y rajouter une inputbox pour choisir la colonne.

Du coup quand j'ai dit ça " si je mets ("c:c"), il ne se passe rien, pas de message d'erreur. Si je mets ça (c:c) ça bloque dès que je lance la macro." c représente une variable et pas du dur comme le T
 

Paf

XLDnaute Barbatruc
Re : Quel type de boucle?

Re,

je me suis mal exprimé :

ca fonctionne sur la macro de Roger en ayant remplacé
Code:
With Feuil1.Columns("T:T")
par
Code:
c = InputBox("Lettre de la colonne pour supprimer les doublons?")
 With Feuil1.Columns(c & ":" & c)

Re désolé
 

ROGER2327

XLDnaute Barbatruc
Re : Quel type de boucle?

Re...


ça fonctionne très bien merci.

Maintenant je souhaiterais faire une inputbox pour récupérer la colonne car ce ne sera pas toujours la même.

j'ai fait ça mais ça ne fonctionne pas :

Dim c As String


Dim i&, l&, t()
c = InputBox("Lettre de la colonne pour supprimer les doublons?")
With Feuil1.Columns(c:c)

si je mets ("c:c"), il ne se passe rien, pas de message d'erreur. Si je mets ça (c:c) ça bloque dès que je lance la macro.

Merci pour votre aide
Essayez :​
Code:
Sub toto()
Dim i&, l&, c&, col$, t()
  col = InputBox("Quelle est la colonne à traiter ?" & vbLf & "(de A à XFD, en majuscules ou en minuscules)", "Choisir une colonne.")
  On Error Resume Next
  c = Feuil1.Columns(col & ":" & col).Column
  If Err.Number Then MsgBox """" & col & """ n'est pas une référence valide de colonne.": Exit Sub
  If MsgBox("Vous avez choisi la colonne " & """" & UCase(col) & """." & vbLf & "Continuer ?", vbOKCancel, "Confirmation...") = vbCancel Then Exit Sub
  With Feuil1.Columns(c)
    .Select
    l = .Cells(.Rows.Count).End(xlUp).Row
    t = Range(.Cells(1), .Cells(l)).Value
    With Application: .ScreenUpdating = 0: .EnableEvents = 0: .Calculation = -4135: End With
    For i = l To 3 Step -1
      If Not IsEmpty(t(i, 1)) Then If AscW(t(i, 1)) <> 9658 And IsEmpty(t(i - 1, 1)) Then .Cells(i).Value = ChrW(9658) & .Cells(i).Value: i = i - 1: .Parent.Rows(i).Delete
    Next
    With Application: .Calculation = -4105: .EnableEvents = 1: .ScreenUpdating = 1: End With
  End With
End Sub


Bonne soirée.


ℝOGER2327
#8166


Lundi 9 Décervelage 143 (Dormition de Jacques Vaché, interprète - fête Suprême Quarte)
16 Nivôse An CCXXIV, 6,5297h - silex
2016-W01-3T15:40:16Z
 

Discussions similaires

Réponses
16
Affichages
454

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 069
Messages
2 085 040
Membres
102 763
dernier inscrit
NICO26