VBA : Supprimer 1 ligne sur 2

LouisBlanc

XLDnaute Nouveau
Bonjour à tous

J'ai 1 fichier de 54000 lignes et 5 colonnes.
Il faut que je supprime 1 ligne sur 2.
Je réussi à le faire dans une boucle for next

For i = 2 To nptotal + 1
Rows(i).Select
Selection.Delete Shift:=xlUp
Next

mais l'exécution est très longue.
Je souhaiterais faire une sélection multiple d'1 ligne sur 2 (à l'aide d'1 boucle peut être), puis supprimer la sélection en 1 seule opération, ce qui je pense gagnerait beaucoup en temps d'exécution.
Mais voilà, je n'arrive pas à faire cette sélection.
Auriez vous des propositions.

Merci d'avance
 

LouisBlanc

XLDnaute Nouveau
Re : VBA : Supprimer 1 ligne sur 2

Bonjour à tous

Mon projet avance grâce à vous, mais je me pose encore quelques problèmes.

J'ai une variable tableau qui contient 30000 lignes sur 1 colonne.
Je voudrais transférer les valeurs de ce tableau, dans un autre tableau de 1000 lignes et 30 colonnes, ou la 1ère colonne contiendrait les 1000 premières lignes du premier tableau, la colonne 2 les 1000 suivantes, et ainsi de suite.
Actuellement, je copie le tableau 1 dans 1 colonne du tableur, puis j'affecte avec une boucle, les plages voulues dans mon tableau 2. Lorsque la boucle est terminée, j'efface la colonne du tableur.
Ca marche bien, mais ça ne me parait pas très "élégant". Pensez vous qu'il y a moyen de faire mieux.

Je prépare un petit bout de code pour exemple (il faut que je nettoie car beaucoup de variable), et je le transmets dans un prochain post.
 

job75

XLDnaute Barbatruc
Re : VBA : Supprimer 1 ligne sur 2

Bonjour LouisBlanc, bonjour les autres,

Code:
Sub Tableaux()
Dim dur!, t1, t2(1 To 1000, 1 To 30), i As Byte, j%, n%
dur = Timer
t1 = [A1:A30000] 'par exemple
For i = 1 To 30
  For j = 1 To 1000
    n = n + 1
    t2(j, i) = t1(n, 1)
  Next
Next
MsgBox "Durée " & Format(Timer - dur, "0.00 \s")
End Sub
Sur mon ordi graphite-gaz => 0,02 seconde.

Faut pas avoir peur des boucles Louis :)

A+
 

job75

XLDnaute Barbatruc
Re : VBA : Supprimer 1 ligne sur 2

Re,

Avec restitution du tableau t2 dans la feuille => 0,14 seconde :

Code:
Sub Tableaux()
Dim dur!, t1, t2(1 To 1000, 1 To 30), i As Byte, j%, n%
dur = Timer
t1 = [A1:A30000]
For i = 1 To 30
  For j = 1 To 1000
    n = n + 1
    t2(j, i) = t1(n, 1)
  Next
Next
[B1].Resize(1000, 30) = t2 'restitution
MsgBox "Durée " & Format(Timer - dur, "0.00 \s")
End Sub
Nota : j'ai déclaré n As Integer (%), si plus de 32767 cellules déclarer As Long (&).

A+
 

LouisBlanc

XLDnaute Nouveau
Re : VBA : Supprimer 1 ligne sur 2

Re-Bonjour

Ci dessous un petit bout de code qui fonctionne bien pour ce que j'ai a faire, mais est il possible d'éviter l'étape intermédiaire ?
Auriez vous des idées ???

Sub ess2()

'préparation du tableau exemple
ActiveSheet.Name = "départ"
For i = 1 To 30000
Cells(i, 1) = (i - 1) + 1
Next i
tab1 = Range(Cells(1, 1), Cells(30000, 1))
'création d'une feuille de travail temporaire
Sheets.Add
ActiveSheet.Name = "temporaire"
'copie du tableau dans tableur
Range(Cells(1, 1), Cells(30000, 1)) = Application.Index(tab1, , 1)
'organisation des données
For K = 1 To 30
lignedebut = 1 + ((K - 1) * 1000)
lignefin = 1001 + ((K - 1) * 1000)
Range(Cells(lignedebut, 1), Cells(lignefin, 1)).Copy
Range(Cells(1, K + 1), Cells(1000, K + 1)).PasteSpecial
tab2 = Range(Cells(1, 2), Cells(1000, 31)).Value
Next K
Range(Cells(1, 2), Cells(1001, 31)).ClearContents
'nouvelle feuille pour contrôle
Sheets.Add
ActiveSheet.Name = "controle"
'copie du tableau 2 dans tableur pour vérification
Range(Cells(1, 1), Cells(1000, 30)) = tab2

End Sub
 

LouisBlanc

XLDnaute Nouveau
Re : VBA : Supprimer 1 ligne sur 2

Merci

comprends pas, surement bug du net, je n'avais pas vu les posts #47 et #48 avant d'envoyer mon dernier message.

Job75 : super, j'avais essayé un truc du genre, mais ça ne marchait pas. Comme je suis débutant, surement une erreur de code.
Je vais retranscrire ça dans mon projet.

Question subsidiaire : comme je débute, je n'ai pas l'habitude de déclarer mes variables, et jusque là çà marche très bien. Alors peut être pourriez vous me dire l'intérêt, voir la nécessité, de le faire.

Encore merci
 

job75

XLDnaute Barbatruc
Re : VBA : Supprimer 1 ligne sur 2

Re,

La déclaration des variables n'est indispensable que si l'obligation de la faire est cochée dans VBA (Outils-Options).

Ou si l'on a mis Option Explicit en haut du module.

Dans l'immédiat j'y vois 2 intérêts importants :

- éviter les fautes d'orthographe dans les noms des variables

- accélérer les macros : par exemple une variable Byte utilise moins de place mémoire qu'une variable Long, a fortiori Double ou Variant.

Une variable non déclarée se voit affecter par défaut le type Variant.

A+
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 413
Messages
2 088 199
Membres
103 763
dernier inscrit
p.michaux