Array et rapidité du code

F

Fif

Guest
Bonjour tout le monde,


J'ai un petit problème de traitement de données.
Dans un fichier conséquent j'ai fait une macro pour supprimer 10 colonnes.
Malheureusement chrono en main ça prend 1 minute voir plus.

En furetant sur le forum j'ai trouvé ce fil :
Lien supprimé
En résumé Thierry expose un code basé sur les tableau qui est très rapide.
Si j'ai assez bien compris la logique du code (je m'en sers dans mon fichier pour trier les lignes avec plusieurs filtres)
je n'arrive pas à l'appliquer à mon problème de suppression de colonnes qui rame.
De même eest ce que qq'un peut m'expliquer pourquoi cette méthode est plus rapide ?

Merci à tous
 

porcinet82

XLDnaute Barbatruc
Salut Fif, Pat1545,

Je pense Pat que tu voulais plutot donner Lien supprimé.

Sinon Fif, tu m'etonnes un peu puisque pour supprimer 10 colonnes simplement (j'entends sans condition), il faut quelques seconde seulement et un code tout simple avec une boucle et un Column(i).Delete

Tiens nous au courant avec comme le propose Pat un bout de fichier.

@+
 
F

Fif

Guest
Re-Bonjour tout le monde.

Bon, j'ai essayé de faire par moi même. Avec mes maigres connaissances en VBA mais je galère trop.

Je n'ai aps de condition pour supp les colonnes, j'ote toujours les mêmes.
Voici la macro que j'ai mis :

Sub Supp_coll()

Sheets('Données').Select
Range('G:G,I:I,O:O,N:N,X:X,Y:Y,Z:Z,AE:AE,AG:AG,AI:AI,AH:AH,AJ:AJ,AK:AK,AV:AV,AU:AU,AT:AT,AS:AS,AN:AN,AO:AO,AM:AM').Select
Selection.Delete Shift:=xlToLeft
Sheets('Notice').Select
End Sub

Bon c'est un peu débutantissime, j'ai fait pour une colonne en auto, et j'ai rajouté toutes les colonnes que je voulais voir disparaitre.
Avec columns(i).delete si j'ai bien compris il faut remplacer i par le numéro de la colonne -1.
Mais je n'y suis pas arrivé, merci de votre précieuse aide.
 

porcinet82

XLDnaute Barbatruc
Salut Fif,

En fait, je supposais que tu avais des colonnes liées et donc que tu pourrais faire une boucle afin d'eviter de tout lister, mais ici je ne suis pas sur que ca change grand chose etant donné que tes colonnes sont éparpillées.

Je te donne quand meme le code avec des boucles afin que tu vois comment c'est fait :
Code:
Sub supr_col()
Dim i As Integer

For i = 45 To 48
    Columns(i).Delete
Next i
For i = 39 To 41
    Columns(i).Delete
Next i
For i = 33 To 37
    Columns(i).Delete
Next i
Range('g:g,i:i,n:o,x:y,ae:ae').Delete
End Sub

Si tu as des questions, n'hesite pas.

@+
 

Discussions similaires

Statistiques des forums

Discussions
312 496
Messages
2 088 982
Membres
103 997
dernier inscrit
SET2A