Filtre auto puis copier coller

stephane.quinquis

XLDnaute Junior
Bonjour,

Je vous sollicite pour une nouvelle macro. Je dispose de deux classeurs:"inventaire production exemple" et "inventaire pasteurisation exemple".

Je souhaite filtrer des informations d'un tableau situé sur la feuil1 du classeur "inventaire production exemple". Puis ces informations que je viens de filtrer doivent être copiées puis collées dans un autre claseur"inventaire pasteurisation.

A l'aide de l'enregistreur de macro, j'ai obtenu le résultat suivant:
Code:
Sub testfiltre()
'
' testfiltre Macro
' Macro enregistrée le 20/04/2010 par quinquis
'

'
    Windows("inventaire pasteurisation exemple.xls").Activate
    Rows("7:7").Select
    Selection.Insert Shift:=xlDown
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    Selection.Interior.ColorIndex = 2
    Selection.Font.ColorIndex = 0
    Windows("inventaire production exemple.xls").Activate
    Selection.AutoFilter Field:=4, Criteria1:="<>"
    ActiveWindow.SmallScroll ToRight:=5
    Selection.AutoFilter Field:=6, Criteria1:="="
    ActiveWindow.SmallScroll ToRight:=-4
    [B]Range("A7:F9").Select[/B]
    Selection.Copy
    Application.CutCopyMode = False
    Windows("inventaire pasteurisation exemple.xls").Activate
    Range("A8").Select
    ActiveSheet.Paste
    Windows("inventaire production exemple.xls").Activate
[B]    Range("D8:D9").Select[/B]
    Application.CutCopyMode = False
    Selection.Copy
    ActiveWindow.SmallScroll ToRight:=5
    Range("N8").Select
    ActiveSheet.Paste
    ActiveWindow.SmallScroll ToRight:=-4
    Selection.AutoFilter Field:=4
    ActiveWindow.SmallScroll ToRight:=6
    Selection.AutoFilter Field:=14
    ActiveWindow.ScrollColumn = 1
    ActiveWindow.SmallScroll ToRight:=0
    ActiveWindow.SmallScroll Down:=-6
End Sub

La démarche de la macro est la suivante:
  • Insertion d'une ligne dans "inventaire pasteurisation"
  • Revenir au "classeur inventaire production"
  • Filtre automatique sur le paramètre poids(sélectionne uniquement les cellules non vides)
  • Filtre automatique sur le paramètre envoi vers pasteurisation(sélectionne uniquement les cellules vides)
  • Copier la plage de données filtrée et la coller à l'endroit où la ligne a été inséré
  • Revenir au classeur"inventaire production"
  • Faire un copier coller entre la colonne poids et la colonne envoi vers pasteurisation(cela permettra de ne pas avoir de données deux fois recopiées lors de la prochaine utilisation de la macro)
  • Enfin déselectionner les filtres sur le paramètre poids et le paramètre envoi vers pasteurisation

Mon problème se situe au niveau du copier coller car je ne sais pas comment uniquement sélectionner les données qui viennent d'être filtrées et non pas une plage de données fixes. Idem pour le copier coller dans la même feuille.

Merci d'avance
 

Pièces jointes

  • inventaire production exemple.xls
    31 KB · Affichages: 92
  • inventaire pasteurisation exemple.xls
    26 KB · Affichages: 104
  • inventaire production exemple.xls
    31 KB · Affichages: 82
  • inventaire pasteurisation exemple.xls
    26 KB · Affichages: 103
  • inventaire production exemple.xls
    31 KB · Affichages: 81
  • inventaire pasteurisation exemple.xls
    26 KB · Affichages: 103

soenda

XLDnaute Accro
Re : Filtre auto puis copier coller

Bonjour le fil, stephane.quinquis

...je ne sais pas comment sélectionner les données qui viennent d'être filtrées ...
L'exempe suivant sélectionne les cellules visibles (filtrées) de la plage [A2:A100]. A adapter
Code:
Range("A2:A100").SpecialCells(xlCellTypeVisible).Select
A plus
 

stephane.quinquis

XLDnaute Junior
Re : Filtre auto puis copier coller

Bonjour Soenda, Bonjour le forum

J'ai un autre petit problème. Je pensais que l'insertion d'une ligne en A7 dans mon classeur "inventaire pasteurisation" me permettrait de coller plusieurs lignes à cet endroit.
Or il m'est seulement possible de coller une seule ligne à la fois. Je voulais donc savoir s'il était possible de coller plusieurs lignes(pas forcément toujours le même nombre de lignes) sans écraser les précèdentes données.

Merci.
 

soenda

XLDnaute Accro
Re : Filtre auto puis copier coller

Re,

J'ai un autre petit problème ... l'insertion de plusieurs lignes

Utilise "Selection.Count", pour connaitre le nb de lignes à insérer.

Un exemple avec un petit gestionnaire d'erreurs :
(la feuille active étant la feuille sur laquelle on effectue la sélection)
Code:
    [COLOR=green]' En cas d'erreur (pas de cellules visible), passer à la ligne suivante (If)[/COLOR]
    On Error Resume Next
    [A2:A100].SpecialCells(xlCellTypeVisible).Select
 
    [COLOR=green]' S'il y a une erreur, remettre à 0 Err.Number et quitter la sub[/COLOR]
    If Err.Number Then Err.Clear: Exit Sub
 
   [COLOR=green]' insère autant de lignes à partir de la ligne 7 (à adapter)[/COLOR]
[COLOR=green]  ' qu'il y a de "xlCellTypeVisible" sélectionnées[/COLOR]
    Feuil2.Rows(7).Resize(Selection.Count).Insert xlDown
A plus
 

stephane.quinquis

XLDnaute Junior
Re : Filtre auto puis copier coller

Bonjour Soenda,

Merci encore pour ton aide.

J'ai encore un problème. Je n'ai pas réussi à insérer au bon endroit ce dont tu me parles. Je pense que c'est ce code qu'il faut que j'adapte:
Code:
' insère autant de lignes à partir de la ligne 7 (à adapter)
  ' qu'il y a de "xlCellTypeVisible" sélectionnées
    Feuil2.Rows(7).Resize(Selection.Count).Insert xlDown

Si possible, j'aimerai qu'après le filtre automatique la macro compte le nombre de cellules visibles à partir de la ligne 7 du classeur "inventaire production" puis insère le nombre de cellules correspondant à partir de la ligne 8 de mon classeur "inventaire pasteurisation".

J'espere avoir été assez clair dans mes explications.

Merci d'avance
 

soenda

XLDnaute Accro
Re : Filtre auto puis copier coller

Bonjour le fil, steph29

stephane.quinquis à dit:
Je n'ai pas réussi à insérer au bon endroit ce dont tu me parles
En reprenant l'exemple précédent, modifie comme suit :
Code:
    [B][COLOR=green]' Sélectionne les cellules visibles à partir de la [U]ligne 7[/U][/COLOR][/B]
    [A[B][COLOR=red]7[/COLOR][/B]:A100].SpecialCells(xlCellTypeVisible).Select 
    [B][COLOR=green]' . . .[/COLOR][/B] 
    [B][COLOR=green]' insère autant de lignes (...) à partir de la [U]ligne 8[/U][/COLOR][/B]
    Feuil2.Rows([B][COLOR=red]8[/COLOR][/B]).Resize(Selection.Count).Insert xlDown
A plus
 

stephane.quinquis

XLDnaute Junior
Re : Filtre auto puis copier coller

Bonjour le forum, Bonjour Soenda

Merci encore pour ta réponse Soenda mais malheureusement la macro ne fonctionne toujours pas correctement.
Je l'ai appliqué à un exemple. Il n'y a pas de bug mais l'insertion de lignes ne se fait pas et je ne comprends pas pourquoi.
Code:
Code:
Sub testcopie()
'
' testcopie Macro
' Macro enregistrée le 26/04/2010 par quinquis
'
    Windows("inventaire production exemple.xls").Activate
    Selection.AutoFilter Field:=4, Criteria1:="<>"
    ActiveWindow.SmallScroll ToRight:=4
    Selection.AutoFilter Field:=6, Criteria1:="="
    ActiveWindow.SmallScroll ToRight:=-4
    Range("A7:F1000").SpecialCells(xlCellTypeVisible).Select
    Windows("inventaire pasteurisation exemple.xls").Activate
    Feuil1.Rows(7).Resize(Selection.Count).Insert xlDown
    Windows("inventaire production exemple.xls").Activate
    Range("A7:F1000").SpecialCells(xlCellTypeVisible).Select
    Selection.Copy
    Windows("inventaire pasteurisation exemple.xls").Activate
    Range("A7").Select
    ActiveSheet.Paste
    Windows("inventaire production exemple.xls").Activate
    ActiveWindow.SmallScroll ToRight:=4
    Selection.AutoFilter Field:=6
    ActiveWindow.SmallScroll ToRight:=-4
    Selection.AutoFilter Field:=4
    Range("D7:D1000").SpecialCells(xlCellTypeVisible).Select
    Application.CutCopyMode = False
    Selection.Copy
    ActiveWindow.SmallScroll ToRight:=5
    Range("F7").Select
    ActiveSheet.Paste
    ActiveWorkbook.Save
    ActiveWindow.Close
End Sub

La macro se trouve sous la forme d'un bouton dans inventaire pasteurisation.
Cijoint.fr - Service gratuit de dépôt de fichiers

Cordialement
 

Pièces jointes

  • inventaire production exemple.xls
    31.5 KB · Affichages: 85
  • inventaire production exemple.xls
    31.5 KB · Affichages: 97
  • inventaire production exemple.xls
    31.5 KB · Affichages: 94

Statistiques des forums

Discussions
312 164
Messages
2 085 867
Membres
103 007
dernier inscrit
salma_hayek