Tableau - Extraction : méthode resize après filtre et avec choix colonnes

Olya

XLDnaute Junior
Bonjour à Tous

Tout est dans le titre ou presque

je souhaite extraire les lignes visibles après filtre ( mais pas seulement). le tableau étant grand je veux prendre que quelques colonnes qui ne se suivent pas forcement et envoyer le résultat à destination d'un nouveau classeur nommé avec texte et horodatage : "toto_aaaammjjmmss"

PS. dans la pièce jointe l'extraction est faite vers Feuil2 et sans prendre en compte uniquement les lignes visibles

Merci de m'aider à solutionner le problème et si possible vers un autre classeur comme indiqué ci-dessus.

Cordialement
 

Pièces jointes

  • Olya EXTRACT.xls
    79.5 KB · Affichages: 56

Paf

XLDnaute Barbatruc
Re : Tableau - Extraction : méthode resize après filtre et avec choix colonnes

Bonjour

dans un premier temps, le code modifié pour ne prendre en compte que les lignes visibles

Code:
Sub Extract()
 Dim t(), t1(), x As Long, i As Long
 Application.ScreenUpdating = 0
  
 t = Feuil1.Range("B25:DZ" & Feuil1.Cells(Rows.Count, 3).End(3).Row)
 ReDim t1(1 To UBound(t), 1 To 5) ' 1 to 5 puisqu'on ne veut que 5 colonnes
 For i = 1 To UBound(t)
    If Rows(i + 24).EntireRow.Hidden = False Then 'i+24 car le 1 du tableau correspond à la ligne 25 de la feuille
        x = x + 1
        t1(x, 1) = t(i, 1)     'colonne B
        t1(x, 2) = t(i, 2)     'colonne C
        t1(x, 3) = t(i, 3)     'colonne D
        t1(x, 4) = t(i, 12)    'colonne M
        t1(x, 5) = t(i, 121)   'colonne DR
    End If
 Next i
  
 Sheets("Feuil2").Cells(25, 1).Resize(x, 5) = t1
 MsgBox "copy ok!!"
End Sub

A+
 

Olya

XLDnaute Junior
Re : Tableau - Extraction : méthode resize après filtre et avec choix colonnes

Bonsoir Paf

Que dire ?

GRAND MERCI tout simplement, grand merci pour tes corrections et tes commentaires.
je n'étais pas trop loin mais ..je ne m'en sortais pas.. BRAVO
--
il ne me reste plus qu'à me remettre au travail pour essayer par moi même d' envoyer mes données filtrées vers un nouveau classeur ..et un peu de mise enforme.. ( à moins que quelqu'un passe par là ) :)

Merci PAF , très cordialement Olya
 

job75

XLDnaute Barbatruc
Re : Tableau - Extraction : méthode resize après filtre et avec choix colonnes

Bonsoir Olya, Paf,

Excel copie très bien les plages disjointes :

Code:
Sub Extract()
Dim chemin$, nom$, col As Range, P As Range
chemin = ThisWorkbook.Path & "\" 'à adapter
nom = "toto" 'à adapter
Set col = Feuil1.[B:B,C:C,D:D,M:M,DR:DR] 'colonnes à adapter
Set P = Intersect(Feuil1.[B25].CurrentRegion.EntireRow, col)
Application.ScreenUpdating = False
With Workbooks.Add(xlWBATWorksheet) 'nouveau document
  .Sheets(1).Name = nom
  P.Copy .Sheets(1).[A1]
  Application.DisplayAlerts = False
  .SaveAs chemin & nom & "_" & Format(Now, "yyyymmdd_hhmmss")
  .Close
End With
End Sub
Edit : ajouté Application.DisplayAlerts au cas où l'on clique comme un malade plusieurs fois par seconde :rolleyes:

A+
 
Dernière édition:

Herdet

Nous a quitté
Repose en paix
Re : Tableau - Extraction : méthode resize après filtre et avec choix colonnes

Bonsoir Olya,
Une solution qui utilise une copie des cellules visibles avec un filtre et intersect.
La Sub EXPORT_Donnees_filtrees() est à améliorer bien sûr avec Chemin, Fichier,... suivant message de job75 (qui m'a pris de vitesse)

Bon travail
Robert
 

Pièces jointes

  • RD-Olya EXTRACT avec filtre.zip
    35 KB · Affichages: 29

job75

XLDnaute Barbatruc
Re : Tableau - Extraction : méthode resize après filtre et avec choix colonnes

Re, salut Herdet,

Sur Win 7 - Excel 2010 j'ai testé la durée d'exécution de la copie (sans filtrage, donc maximum de cellules) :

- par tableau VBA (post #2) => 8,1 millisecondes

- par copier-coller (post #4) => 2,3 millisecondes.

A+
 

Herdet

Nous a quitté
Repose en paix
Re : Tableau - Extraction : méthode resize après filtre et avec choix colonnes

Re, salut Herdet,

Sur Win 7 - Excel 2010 j'ai testé la durée d'exécution de la copie (sans filtrage, donc maximum de cellules) :

- par tableau VBA (post #2) => 8,1 millisecondes

- par copier-coller (post #4) => 2,3 millisecondes.

A+
Tu mesures la vitesse d'exécution d'Excel et l'efficacité d'un code en millisecondes !:confused:
Dans quel but ?

Question : dans la vrai vie, quel est le temps d'exécution d'une pression et un relâchement de touche ou d'un clic ? :confused::eek:
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Tableau - Extraction : méthode resize après filtre et avec choix colonnes

Tu mesures la vitesse d'exécution d'Excel et l'efficacité d'un code en millisecondes !:confused:
Dans quel but ?

Et vous, vous venez sur le forum dans quel but ?

Comme tout le monde je suppose, pour améliorer vos connaissances en découvrant les meilleures solutions.

Bien sûr ici ça devient intéressant avec des tableaux de 100 000 ou 1 000 000 de lignes.

A+
 

Herdet

Nous a quitté
Repose en paix
Re : Tableau - Extraction : méthode resize après filtre et avec choix colonnes

Et vous, vous venez sur le forum dans quel but ?
Comme tout le monde je suppose, pour améliorer vos connaissances en découvrant les meilleures solutions.
Bien sûr ici ça devient intéressant avec des tableaux de 100 000 ou 1 000 000 de lignes.
A+
Bonsoir Job,
Oui, c'est connu, chacun à SA meilleure solution ... sauf que grâce à une énorme caisse à outils, pour un problème il y a toujours des dizaines de solutions, justement pour que chacun y trouve son bonheur.

Après 31 ans de tableur depuis Visicalc, Multiplan, Excel, dev. divers sur VB, VBA, VBNET, Fortran, C, ... sur Mac et PC et 15 ans de forum (MPFE, XLD,...), j'ai au moins retenu ça et aussi qu'on ne doit jamais jamais perdre de vue la réalité de l'utilisation.
Comment définir le mot "Meilleure" en informatique : vitesse, clarté, commentaires, facilité de la maintenance, pérennité, adaptabilité aux évolutions, gestion des erreurs, ... ?

Ceci-dit, n'ayant pas la science infuse, je suis toujours prêt à apprendre, à tester et exploiter d'autres solutions.
Voir https://www.excel-downloads.com/thr...utton-sur-une-feuille-pas-dans-un-usf.229476/

Cordialement
Robert

Traiter un tableur d'un million de lignes... , données, formules,... avec un simple PC ?
Il y a d'autres moyens de traiter les données, non ?
A+
Robert
 

job75

XLDnaute Barbatruc
Re : Tableau - Extraction : méthode resize après filtre et avec choix colonnes

Re,

J'ai recopié le tableau du post#1 sur 125 000 lignes :

- macro post #2 => 8,87 secondes

- macro post #4 => 0,98 seconde sans enregistrement - 2,27 secondes avec enregistrement du fichier.

Bonne fin de soirée
 

job75

XLDnaute Barbatruc
Re : Tableau - Extraction : méthode resize après filtre et avec choix colonnes

Re,

Ce qui ralentit beaucoup la macro du post #2 c'est ce test :

Code:
If Rows(i + 24).EntireRow.Hidden = False Then
La lecture d'une propriété d'un Range prend toujours du temps.

A+
 

Olya

XLDnaute Junior
Re : Tableau - Extraction : méthode resize après filtre et avec choix colonnes

Bonjour à tous

Grand merci pour toutes vos contributions utiles,

Herdet, ta macro fait le boulot mais elle ne répond pas en tous points à ma demande.. je garderai tes idées sous le coude.. on sait jamais :) merci beaucoup à toi

Job, c'est une macro très bien faite, elle est compacte , rapide et offre la possibilité de créer un Classeur et l'enregistrer.
En effet ta remarque est pertinente en ce qui concerne le IF de ma macro (gentiment corrigée par PAF). l'idée au départ était de charger la variable (t) directement en ne prenant que les lignes visibles ( mais je n'ai pas su définir la variable (t) avec la fonction : SpecialCells(xlCellTypeVisible). peut-être que tu sais le faire ? cela permet d'enlever la condition IF et optimiser le code.

Pour revenir à ton code en voici quelques questions si tu trouves le temps de répondre :)

1) dans le : P.Copy .Sheets(1).[A1] est ce qu'on peutprendre en compte le formatage source ( format, largeur etc..) ..?

2) ici la variable COl est en dur, peut-on par une fenêtre de dialogue inviter l'user à sélectionner les colonnes souhaitées. cela permet très facilement d'utiliser la macro avec plus de souplesse dans les choix des colonnes à copier.

3) peut-on permettre en fin de macro à l'utilisateur de choisir , par dialogue , l'emplacement de l'enregistrement ( Bureau, clé usb)

Encore une fois Merci JOB ta macro est vraiment sublime ..

Cordialement Olya

Cordialement
 

Staple1600

XLDnaute Barbatruc
Re : Tableau - Extraction : méthode resize après filtre et avec choix colonnes

Bonjour à tous

Olya
Suggestions matinales
1) dans le : P.Copy .Sheets(1).[A1] est ce qu'on peutprendre en compte le formatage source ( format, largeur etc..) ..?
Voir la méthode PasteSpecial (sans oublier la touche F1 quand on est dans l'éditeur VBE)
•-> Consulter les archives du forum


2) ici la variable COl est en dur, peut-on par une fenêtre de dialogue inviter l'user à sélectionner les colonnes souhaitées. cela permet très facilement d'utiliser la macro avec plus de souplesse dans les choix des colonnes à copier.
Voir InputBox
•-> Consulter les archives du forum (sans oublier la touche F1 quand on est dans l'éditeur VBE)


3) peut-on permettre en fin de macro à l'utilisateur de choisir , par dialogue , l'emplacement de l'enregistrement ( Bureau, clé usb)
Divers méthodes possibles :
pour choisir l'emplacement par boite de dialogue
Application.Dialogs(xlDialogSaveAs)
Application.FileDialog(msoFileDialogFolderPicker) (VBA natif)
BrowseForFolder (utilise l'objet Shell.Application)
pour trouver le chemin du Bureau
SpecialFolders("Desktop")
•-> Consulter les archives du forum


C'est bien beau de faire l'article pour les archives du forum, mais oucéti qu'elles sont, palsambleu !!

Juste ici camarade ;)

Il suffit ensuite de choisir judicieusement tes mots-clés.

Si malgré tes recherches, tu n'arrives pas à avancer dans ton code VBA, reviens nous voir.
 
Dernière édition:

Olya

XLDnaute Junior
Re : Tableau - Extraction : méthode resize après filtre et avec choix colonnes

Bonjour Staple

Merci pour ton temps mais tes Suggestions matinales ne m'aident pas beaucoup ..

F1 je connais, l'enregistreur de macro aussi .. le collage spécial aussi , et bien sûr parcourir ici et là..

Ici, dans ma démarche, il ne s'agit pas de faire le truc pour le faire, mais d'intégration et d'optimisation de code ... en profitant du conseil et de suggestion de gens expérimenté comme JOB ..

Je disais plus haut à titre d'exemple:
" l'idée au départ était de charger la variable (t) directement en ne prenant que les lignes visibles ( mais je n'ai pas su définir la variable (t) avec la fonction : SpecialCells(xlCellTypeVisible). " le tout au regard du code qui suit ... ( le but ici est aussi de solliciter les connaissances des autres, de communiquer, échanger... ?)


Merci pour ton passage et suggestions en tous cas
Cordialement
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Tableau - Extraction : méthode resize après filtre et avec choix colonnes

Re

Olya
Tu as fais des recherches sur les mots-clés que j'ai mis en gras et bleu ?
Et tu n'as rien trouvé dans les archives??
Pourtant c'est pas la matière qui manque...
Un exemple des archives pris au hasard
https://www.excel-downloads.com/threads/filedialog-msofiledialogsaveas-utilisation.68858/
et un autre
https://www.excel-downloads.com/threads/selection-dossier-par-defaut.74039/

( le but ici est aussi de solliciter les connaissances des autres, de communiquer, échanger... ?)
Quel plus bel endroit que les archives du forum (qui recèle de nombreuses pétites) pour solliciter les connaissances des autres ? ;)

PS: Juste pour savoir, tu me classes dans les gens inexpérimentés ou dans une catégorie proche de celle de job ? ;)
(Je dis cela par ce que je traine mes guêtres sur ce forum depuis bientôt dix ans...:rolleyes: et presque vingt ans que je pratique Excel)

EDITION : Bonjour job75, c'est vrai que si tu fais tout le boulot alors mes suggestions n'ont plus de raison d'être ;)
Sauf pour les éventuels nouveaux membres du forum qui passeront ici et sauront ainsi qu'il existe un moteur de recherche interne au forum et des archives.
(encore faut-li que ces nouveaux membres soient comme moi adepte du DIY ;) )
 
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 206
Messages
2 086 211
Membres
103 158
dernier inscrit
laufin