Automatiser une procédure de filtre + copier coller

Sitar

XLDnaute Nouveau
Bonjour,

Je m'y connais peu en VBA et avant de poster j'ai regardé sur ce forum, au passage très bien fait avec beaucoup de réponses intéressantes et une aide exceptionnelle.

En gros je souhaite automatiser quelque chose qui est simple à faire via le filtre automatique.

Je filtre sur la colonne F, tout ce qui n'est pas vide, ça m'affiche un certains nombre de lignes. Je les copie/colle dans un autre onglet, ce qui me permet via Word de générer du publipostage.

Lorsque je dois faire ceci pour de multiples évènements, ça devient vite ennuyeux, alors je me suis dit que faire un bouton qui génère ça tout seul serait très pratique. L'idéal serait que le bouton me demande sur quelle colonne je veux appliquer le critère, et qu'il génère l'onglet automatiquement.

Pourriez-vous m'aider à créer cette macro ou à me dire comment procéder ?

Merci beaucoup,

Sitar

ps : je joins un fichier exemple, j'ai cru comprendre que c'était plus simple :)
 

Sitar

XLDnaute Nouveau
Re : Automatiser une procédure de filtre + copier coller

Ah oui je n'ai pas fait attention, désolé. C'est un fichier sous Mac, j'espère que ça va fonctionner.
 

Pièces jointes

  • exemple.zip
    83.4 KB · Affichages: 63
  • exemple.zip
    83.4 KB · Affichages: 46
  • exemple.zip
    83.4 KB · Affichages: 56

Robert

XLDnaute Barbatruc
Repose en paix
Re : Automatiser une procédure de filtre + copier coller

Bonsoir Sitar, bonsoir le forum,

En pièce jointe ton fichier modifié avec le code ci-dessous :

Code:
Sub Macro1()
Dim be As Range 'déclare la variable be (Boîte d'Entrée)
Dim col As Integer 'déclare la variable col (Colonne)
Dim pl As Range 'déclare la variable pl (PLage)

On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
'définit la variable be (génère une erreur si bouton "Annuler")
Set be = Application.InputBox("Cliquez sur une des cellules de la colonne à filtrer !", "FILTRE AUTOMATIQUE", Type:=8)
If Err <> 0 Then Exit Sub 'si une erreur a été générée, sort de la procédure
On Error GoTo 0 'annule la gestion des erreurs
col = be.Column 'définit la colonne col
Sheets("Feuil2").Cells.Clear 'efface TOUT dans l'onglet "Feuil2"
With Sheets("Feuil1") 'prend en compte l'onglet "Feuil1"
    Set pl = .Range("A").CurrentRegion 'définit la plage pl
    .Range("A1").AutoFilter 'lance le filtre automatique
    .Range("A1").AutoFilter Field:=col, Criteria1:="<>" 'filtre la colonne col, critère : non vides
    pl.SpecialCells(xlCellTypeVisible).Copy Sheets("Feuil2").Range("A1") 'copie et colle les lignes visible dans l'onglet "Feuil2"
    .Range("A1").AutoFilter 'supprime le filtre automatique
End With 'fin de la prise en compte de l'onglet "Feuil1"
End Sub
Le fichier :
 

Pièces jointes

  • Sitar_v01.xls
    380 KB · Affichages: 128

Sitar

XLDnaute Nouveau
Re : Automatiser une procédure de filtre + copier coller

Merci beaucoup c'est vraiment sympa, j'étais pas loin tout seul et tu m'as aidé à compléter la solution.

Deux questions bonus :

- Est-ce qu'il est possible de n'afficher dans la feuille 2 que la colonne qu'on a utilisé pour filtrer ?
- Quelle différence si je veux générer ceci dans un nouveau fichier par exemple ?

Merci beaucoup,
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Automatiser une procédure de filtre + copier coller

Bonsoir Sitar, bonsoir le forum,

Le code modifié ci-dessous (à adapter) devrait répondre à tes deux questions :
Code:
Sub Macro1()
Dim be As Range 'déclare la variable be (Boîte d'Entrée)
Dim col As Integer 'déclare la variable col (Colonne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim cc As Workbook 'déclare la variable cs (Classeur Cible)

Set cc = Workbooks("Le_nom_du_Classeur_ouvert.xls") 'définit la classeur cible (à adapter à ton cas)
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
'définit la variable be (génère une erreur si bouton "Annuler")
Set be = Application.InputBox("Cliquez sur une des cellules de la colonne à filtrer !", "FILTRE AUTOMATIQUE", Type:=8)
If Err <> 0 Then Exit Sub 'si une erreur a été générée, sort de la procédure
On Error GoTo 0 'annule la gestion des erreurs
col = be.Column 'définit la colonne col
cc.Sheets("Feuil1").Cells.Clear 'efface TOUT dans l'onglet "Feuil1" du classeur cc
With Sheets("Feuil1") 'prend en compte l'onglet "Feuil1"
    Set pl = .Range("A").CurrentRegion 'définit la plage pl
    .Range("A1").AutoFilter 'lance le filtre automatique
    .Range("A1").AutoFilter Field:=col, Criteria1:="<>" 'filtre la colonne col, critère : non vides
    'copie et colle les lignes visible dans l'onglet "Feuil1" du classeur cible cc
    .Application.Intersect(pl.SpecialCells(xlCellTypeVisible), Columns(col)).Copy cc.Sheets("Feuil1").Range("A1")
    .Range("A1").AutoFilter 'supprime le filtre automatique
End With 'fin de la prise en compte de l'onglet "Feuil1"
End Sub
 

Sitar

XLDnaute Nouveau
Re : Automatiser une procédure de filtre + copier coller

Merci beaucoup !

Ton code est super, j'aurais aimé ajouté en plus de la colonne les lignes de A à F par exemple, mais je n'ai pas réussi à le faire, saurais-tu me dire ce qu'il faut modifier ?

Merci beaucoup
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Automatiser une procédure de filtre + copier coller

Bonsoir Sitar, bonsoir le forum,

Sitar, tu ne penses pas qu'on perdrait moins de temps si tu posais d'emblée les bonnes questions ?
Le code modifié :
Code:
Sub Macro1()
Dim be As Range 'déclare la variable be (Boîte d'Entrée)
Dim col As Integer 'déclare la variable col (Colonne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim cc As Workbook 'déclare la variable cs (Classeur Cible)

Set cc = Workbooks("Le_nom_du_Classeur_ouvert.xls") 'définit la classeur cible (à adapter à ton cas)
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
'définit la variable be (génère une erreur si bouton "Annuler")
Set be = Application.InputBox("Cliquez sur une des cellules de la colonne à filtrer !", "FILTRE AUTOMATIQUE", Type:=8)
If Err <> 0 Then Exit Sub 'si une erreur a été générée, sort de la procédure
On Error GoTo 0 'annule la gestion des erreurs
col = be.Column 'définit la colonne col
cc.Sheets("Feuil1").Cells.Clear 'efface TOUT dans l'onglet "Feuil1" du classeur cc
With Sheets("Feuil1") 'prend en compte l'onglet "Feuil1"
    Set pl = .Range("A").CurrentRegion 'définit la plage pl
    .Range("A1").AutoFilter 'lance le filtre automatique
    .Range("A1").AutoFilter Field:=col, Criteria1:="<>" 'filtre la colonne col, critère : non vides
    'copie et colle les lignes visibles (colonnes A à F) dans l'onglet "Feuil1" du classeur cible cc
    .Application.Intersect(pl.SpecialCells(xlCellTypeVisible), Columns("A:F")).Copy cc.Sheets("Feuil1").Range("A1")
    'si col est supérieur à 6 copie et colle les lignes visibles de la colonne col dans l'onglet "Feuil1" du classeur cible cc
    If col > 6 Then .Application.Intersect(pl.SpecialCells(xlCellTypeVisible), Columns(col)).Copy cc.Sheets("Feuil1").Range("G1")
    .Range("A1").AutoFilter 'supprime le filtre automatique
End With 'fin de la prise en compte de l'onglet "Feuil1"
End Sub
 

Discussions similaires

Réponses
6
Affichages
210
Réponses
12
Affichages
491