Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
VBA Copier base de Données Filtrée vers Nouveau classeur
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 !
J'ai des bases de données où je fais des extractions. Mais c'est galère de copier le tableau filtré et la mise en forme sur un autre classeur car cela peut s'avérer long et souvent, j'ai un problème de mémoire et je dois tout arrêter et recommencer 🙁.
Connaissez vous un code qui permettrait de copier une feuille de mon classeur filtré vers un nouveau classeur en copiant la mise en forme, c'est à dire en respectant la taille de mes cellules de mon fichier d'origine et en copiant en valeur et en format? Ouf 😱
Re : VBA Copier base de Données Filtrée vers Nouveau classeur
Bonjour Michel,
Le classeur de destination doit être ouvert
Click avec le bouton droit de la souris à copier et ...Déplacer ou copier
Coche Créer une copie et indique le fichier de destination
et ensuite fait ton filtre ; fait tout cela avec l'enregistreur de macro
On te donnera les indications pour supprimer les lignes filtrées cela doit être facile.
Bruno
Re : VBA Copier base de Données Filtrée vers Nouveau classeur
Bonjour Bruno
Merci pour ta réponse 🙂.
Je vois un peu ce dont tu me parles, mais je t'assure que sur des grosses bases de données, ce n'est pas si simple à faire et j'ai toujours eu des problèmes de ce type. Alors ce que je demande est faisaible, je le sais , et cela pourrait être utile au plus grand nombre 😱.
Re : VBA Copier base de Données Filtrée vers Nouveau classeur
Re,
J'ai fais ce petit fichier avec les explications à l'interieur.
Le filtre et la suppression des lignes masquées restent à voir.
On peut améliorer la macro en demandant de choisir le fichier de destination ou l'onglet à copier.
Et que fait le filtre???
Bruno
Re : VBA Copier base de Données Filtrée vers Nouveau classeur
Bonsoir,
Je viens de créer un fichier qui te permets de choisir le workbook et la sheet (Source à copier)
Ceci avec boite de dialogue et Listes.
On peut choisir également le fichier de destination
Enfin il suffit de cliquer sur le bouton "Copier Déplacer l'Onglet" et cela se fait tout seul.
L'onglet est copié après le dernier onglet du fichier destination.
Ce fichier peut intéresser certains demandeurs
Pour les filtres, il me faut en savoir plus de ta part pour réaliser la macro.
Bonsoir Michel
Bruno
Re : VBA Copier base de Données Filtrée vers Nouveau classeur
Bonjour Bruno
Merci pour ce fichier qui est super 🙂.
Bon, je me suis dit qu'il fallait faire simple.
Donc voici en gros, ce que j'ai fait. Ce code permet de copier rapidement une feuille en valeur, format et commentaire. J'ai pas utilisé les tableaux (que je ne maîtrise toujours pas 😱).
Sinon, j'ai pas mis Option Explicit et pas déclaré toutes mes variables.
Voici ce que j'obtiens en temps de traitement pour un fichier d'environ 276 000 lignes sur 5 colonnes.
Et le temps pour copier un classeur avec la première et la dernière cellule de remplie est de 147 secondes avec un fichier de 2.7 Mo au final😱.
Code:
Sub Copie_Structure_Feuille_Valeur_Format_Commentaire()
'Dim t1 As Long, NomFAct As String, DerCelSel As Variant, DerCelAdr As Variant, NBcol As Long, NBLig As Long, cell As Range, i As Long
Dim LargCol(1048576), HautLig(1048576) ', DercelLig As Long, DerCelCol As Long, Ilig As Long, ICOl As Long
t1 = Timer
Application.ScreenUpdating = False
NomFAct = ActiveSheet.Name
DerCelSel = ActiveCell.SpecialCells(xlLastCell).Select
DerCelAdr = ActiveCell.Address: DerCelCol = ActiveCell.Column: DercelLig = ActiveCell.Row
NBcol = 0
For ICOl = 1 To DerCelCol
If Cells(1, ICOl).ColumnWidth <> 0 Then NBcol = NBcol + 1: LargCol(NBcol) = Cells(1, ICOl).ColumnWidth
Next
NBLig = 0
For Ilig = 1 To DercelLig
If Rows(Ilig & ":" & Ilig).RowHeight <> 0 Then NBLig = NBLig + 1: HautLig(NBLig) = ActiveSheet.Rows(Ilig & ":" & Ilig).RowHeight
Next
'Stop
' A voir pour traitement de type Tableau
'For Each cell In ActiveSheet.Range(Cells(1, 1), Cells(DercelLig, DerCelCol))
'Traitement tableau
'Next
Sheets.Add
For i = 1 To NBcol
Cells(1, i).ColumnWidth = LargCol(i)
Next
For i = 1 To NBLig
Rows(i & ":" & i).RowHeight = HautLig(i)
Next
ActiveSheet.Next.Select
Range("A1").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Selection.Copy
ActiveSheet.Previous.Select
Range("A1").Select
'Mettre pour chaque cellule la valeur et le format et le commentaire
'Posibilité de mettre la formule avec xlPasteFormulas mais commenter xlPasteValues
'Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteComments, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
If Len(NomFAct) < 27 Then ActiveSheet.Name = "CV " & NomFAct Else ActiveSheet.Name = "CV " & Mid(NomFAct, 1, 14) & Right(NomFAct, 14)
Application.ScreenUpdating = True
MsgBox Timer - t1
End Sub
Re : VBA Copier base de Données Filtrée vers Nouveau classeur
Salut bien,
Apparemment tu copies l'intégralité de la page en plusieurs étapes.
Je pense qu'il est beaucoup plus rapide de copier la page entière comme je l'ai proposé.
Seul inconvénient si des formules se rapportent à d'autres onglets de ce classeur
(quoique on peux repasser sur ces formules et écrire en dur).
Maintenant si tu souhaites conserver ta macro je suggère ceci....
pour la largeur et hauteur de cellules
Code:
Sheets.Add
For i = 1 To NBcol
Columns(i).ColumnWidth = Sheets(NomFAct).Columns(i).ColumnWidth
Next
For i = 1 To NBLig
Rows(i).RowHeight = Sheets(NomFAct).Rows(i).RowHeight
Next
PS : je serais curieux de savoir le temps de copie avec mon fichier
(A voir pour renommer l'onglet)
Re : VBA Copier base de Données Filtrée vers Nouveau classeur
Bonjour Bruno
Merci pour ta réponse. Avec ton code, je n'ai pas vraiment vu de différence.
Mon code en #8 est assez intéressant car il permet de copier une feuille, un TCD, un tableau (au sens des nouvelles versions) tel qu'il est, c'est à dire filtré ou non en supprimant tout nom qu'il peut contenir et qui peut être handicapant et ralentir l'ouverture du fichier. Par exemple j'avais un tableau avec extraction ODBC qui si il était filtré (sur 276 000 lignes) entraînait un ralentissemnt et même un plantage d'excel. En appliquant ma macro , j'ai fait des extractions avec un fchier de 20 Mo qui s'ouvre très facilement même avec des filtres 🙂.
- 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